- 2024-10-16
-
加入了学习《Follow me 第二季第2期dvacos视频》,观看 Follow me 第二季第2期视频
- 2024-10-11
-
回复了主题帖:
【NUCLEO-WB09KE】蓝牙通信的稳定性与BEACON服务
Beacon 就是广播,不能连接代码专门设置的不给连接。
-
回复了主题帖:
【NUCLEO-WB09KE】PC机与蓝牙设备通讯与web编程
你这个是谷歌的web ble的demo改的吧(询问,没恶意)?
这些demo没有服务器是不是不能在手机上运行,要怎么才能在手机上运行啊,网上查到的都很隐晦
-
发表了主题帖:
【NUCLEO-WB09KE测评】六、PWM 调光 + Wbe ble控制
本帖最后由 dvacos 于 2024-10-11 15:44 编辑
一 、硬件确认
确认LED颜色 与 用于可以配置的LED
确认引脚
二 、cube mx配置
三、实验
添加初始化代码
HAL_TIMEx_PWMN_Start(&htim16,TIM_CHANNEL_1);
初始化互补通道的API与正常通道的API不是同一个
配置后发现灯闪的非常不正常,逻辑分析仪抓PWM发现两个现象,
1、PWM无效只有高低电平
2、PWM断断续续的导致灯是在闪烁
排查了半天,发现是使用例程的代价。需要做2点修改
修改1
注释所有已经配置的LED IO
注释所有相关LED_BLUE的开关
经过以上配置后,发现灯实在PWM闪烁(即一会有PWM 一会是低电平)
修改2
关闭低功耗
这一点非常难找,要不是联想到了BLE会按照广播间隔、连接间隔唤醒自己,起来发送数据。估计都找不到了。
四 、web ble
Web ble简介
Web Bluetooth API 是一种使 Web 应用程序能够与蓝牙低功耗 (BLE) 设备进行交互的 JavaScript API。通过 Web Bluetooth,开发人员可以轻松地构建出能够与各种蓝牙设备通信的 Web 应用,从而扩展了 Web 的功能范围。
Web Bluetooth API 基于 GATT (Generic Attribute Profile) 协议,它定义了设备之间进行数据交换的一种通用方式。在 Web Bluetooth API 中,Web 应用程序扮演了 GATT 客户端的角色,而蓝牙设备则作为 GATT 服务器。通过使用 JavaScript API,Web 应用程序可以扫描附近的蓝牙设备、查询特定服务的设备和与之建立连接,从而实现对蓝牙设备的控制和数据传输。
Web ble效果
- 2024-09-29
-
回复了主题帖:
【NUCLEO-WB09KE测评】四、修改广播名 与 新增自定义服务
wangerxian 发表于 2024-9-29 17:43
广播名可以动态修改吗?
没研究噢,但是肯定可以做的。修改广播任何一家的蓝牙芯片都能做吧,大不了关了再开
- 2024-09-28
-
发表了主题帖:
Follow me 第二季第2期、汇总贴
本帖最后由 dvacos 于 2024-10-16 18:00 编辑
非常感谢DigiKey、EEWorld共同举办的Follow me活动第二季的第二期,让我有体验Arduino UNO R4 WiFi 驱动温度传感器,上传温度到HA,通过HA面板显示数据的开发流程。
视频如下:
一、整体简介
任务简介:
本次的任务的最终目标介绍控制Arduino UNO R4 WiFi 驱动温度传感器,上传温度到HA,通过HA面板显示数据,任务1-3是逐步熟悉Arduino 开发平台的学习过程,并且在过程中体验Arduino 的一些外设。
硬件:
1、Arduino UNO R4 WiFi
2、AHT30 传感器(飞线了,拆了也不好看,索性留着)
3、DAC实验中用到的电阻
硬件简介:
Arduino UNO R4 WiFi 是一款集成了Wi-Fi和蓝牙功能的Arduino开发板。基于R7FA4M1芯片和ESP32-S3芯片,不仅继承了Arduino UNO R3的特性,还增加了联网功能。拥有一个12x8的LED点阵屏、Qwiic连接器等。Arduino UNO R4 WiFi的芯片完整型号为R7FA4M1AB3CFM,ESP32模组的完整编号为ESP32-S3-MINI-1。
AHT30是一款高精度的温湿度传感器,具有低功耗、优异的长期稳定性和快速响应能力。支持I²C接口,并且具有宽电压支持,范围在2.2到5.5 VDC。它配备了一个全新优化的ASIC专用芯片、一个经过改进的MEMS半导体电容式湿度传感元件和一个标准的片上温度传感元件,即使在恶劣环境下也能保持稳定性能。
二 、任务详情
任务一
目标:“搭建环境并开启第一步Blink / 串口打印Hello EEWorld!”
任务一主要是验证开发环境安装完毕,代码就比较简单,硬件就是一根Type-C的线,连接到Arduino上,完成代码下载与串口数据接收。
硬件:
代码:
任务二
目标:“驱动12x8点阵LED;用DAC生成正弦波;用OPAMP放大DAC信号;用ADC采集并且打印数据到串口等其他接口可上传到上位机显示曲线”
任务二是熟悉Arduino 的LED矩阵 和 模拟外设分别是ADC、DAC、运算放大器。其中运算放大器需要自己计算运放的倍率,并且不能超过4.7V,不然会损坏器件,并且先要把DAC输出的电压设置为输入电压的一般(USB输入5v/2=2.5v)。
硬件运行效果:
代码:
Arduino 官方关于运放的解释
硬件:
代码流程:
运行结果:
DAC输出电压降低前后对比
由于上位机不能缩放(或者说我不会)Y轴,只能勉强看
任务三
目标:“通过Wi-Fi,利用MQTT协议接入到开源的智能家居平台HA(HomeAssistant)”
任务三主要目的是控制Arduino上的WiFi模块发送MQTT数据,HA平台是运行在PC端的,功能是接收、解析并显示出MQTT数据。
要点:
1、安装PubSubClient 库
2、参考8266 的例程编写代码,因为只有这个例程有连接WIFI的实例
3、添加自己的WIFI名称 与 密码,注意要2.4G频段的,5G的会连接失败。
4、添加mqtt_server的IP、端口号、用户名、密码、发布的主题
运行效果:
任务四
目标:“驱动SHT40温湿度传感器,上传温湿度到HA,通过HA面板显示数据”
任务四是在任务三上添加获取温度传感器测量的温度值,通过MATT上报给HA平台,替换掉之前的模拟数据。
由于我购买的是AHT40传感器 并且没有Qwiic,所以有了以下的折腾。
Qwiic的IIC引脚
结论:
Arduino UNO R4 WiFi有多组IIC接口,并且Qwiic的代码不能配置非Qwiic的IIC接口,如右上红框。
所以我从下图黑框处,飞了2根线。
以上解决了硬件问题。
软件:
1、经过测试得知,AHT30兼容AHT20的代码,所以安装这个库
2、接线正确后就可以正常获取温度
3、将测量温度代码 与 任务三结合,正常上报温度。
温度测量GIF
代码框图:
三、总结
再次感谢DigiKey 与 EEWorld,本次活动学习到了从未接触过的MQTT和HA,整个流程走过一遍后,发现arduino同一个功能活传感器有太多各种各样的库了,每个库的代码、逻辑都不同,造成了各种代码不适用、查到的资料各种库对不上,浪费很多时间,比直接手动写驱动还要累(不同的累,arduino要过滤信息很烦,应为依赖库,所以经常性的代码没原因的不能用,报错只能报语法上的错)。
但是整体体验下来还是比芯片SDK级C语言开发要快速的,所以有得必有失吧,对于爱好者arduino还是非常好用的,能快速的把创意落地。
代码:
-
发表了主题帖:
【NUCLEO-WB09KE测评】五、蓝牙数据收发实现
本帖最后由 dvacos 于 2024-9-28 18:35 编辑
上文已经可以连接并且发现新的服务了,本文是再上文的基础上实现数据收发。继续参考、阅读BLE_p2pServer 与 BLE_HeartRate
一 数据接收
烧录并连接到BLE_p2pServer,发送数据后,查看LOG,发现发送一字节数据都会打印以下log,按照这个线索去查找自定义服务。
找到蓝牙时间回调的接口,但是不知道出于什么意义,把这个接口以TEST_Notification命名,很容易混淆
添加109-115行的LOG,用于打印数据。
下图LOG成功接收我发送的一字节数据
结合以上2张图,发现不能接收2字节的数据。
一通尝试与查阅后,发现蓝牙数据接收居然要事先给定长度??
于是按照MTU设置为247,结果发现p_Notification->DataTransfered.Length居然不是实际的接收数据的长度(这一点非常奇怪,搞不懂),所以这个只要结合实际的应用给定。
以上完成数据接收实验!!
二 数据回复
参考BLE_HeartRate例程,使用Notify上报数据给手机
找到数据发送接口
需要填写的参数分别是,
1 Opcode(操作码(个人认为不一定正确))
2 类型为TEST_Data_t 的数据,包含传输数据长度、数据指针
3 handle,非常重要填错后接收不到数据
于是添加以下代码,测试验证发送数据
结果居然接收、打印的都不是我填写的变量,并且在声明结构体时,添加static的修饰词,测试后发送的依旧不是我填写的数据。
修改后
修改后终于接收到Notify 数据!!
以上完成数据收发实验,后续就会与Web ble联调!!
- 2024-09-27
-
回复了主题帖:
【ST NUCLEO-WB09KE测评】-1-开箱
何剑波 发表于 2024-9-27 19:58
大佬~这个app我实属是找不到,求链接。。。
用魔法去谷歌商店可以下载,而且用挺多工具的
-
发表了主题帖:
【NUCLEO-WB09KE测评】四、修改广播名 与 新增自定义服务
本帖最后由 dvacos 于 2024-9-27 19:19 编辑
一 熟悉例程
BLE_p2pServer直接编译烧录后,确认广播名 、服务、特征等。
广播内容,按照SIG规范填写厂商码,可以直接识别出是ST的蓝牙IC
广播原始数据
自定义服务 与 特征
二 修改广播名
查阅代码后发现,广播数据由下图传入协议栈
直接修改广播数组即可修改广播名
实验结果如下,成功修改广播名
三 添加自定义服务
新增第二个服务
使用短UUID,并新建2个特征
服务1 的配置
服务1用于接收数据,所以配置 WRITE(写) 、WRITE NO RESP(写不回复)2个特征用于接收手机下发的数据
服务2 的配置
服务2用于上报数据,所以配置NOTIFY (弹出)特征
实验
烧录后上电查看LOG提示初始化新增的服务失败,经过一同艰难的查阅之后终于解决,方法如下:
修改服务的上限值,来添加新的服务
原本的服务1使用6个
新增的服务2也是使用6个
所以将服务属性修改为12个
四 实验结果
Log显示添加成功!
手机APP确认广播名修改(右上角)、添加新自定义服务(红框)成功!!
- 2024-09-26
-
发表了主题帖:
【NUCLEO-WB09KE测评】三、IIC获取温度
本帖最后由 dvacos 于 2024-9-26 16:29 编辑
一、引脚确认
二、Cube Mx配置
选定IIC IO
使能后直接使用默认配置即可(传感器的IIC速率是100-400K均可)
三、 初步验证
生成代码后IIC已经初始化完毕,所以添加代码测试即可。
添加以下代码
不接传感器,严重IIC波形可以正常发送
接上传感器后,整个发送数据,并且每次都有ACK
添加读代码
如图,地址会自动加一,传感器已经有ACK了
以上读写驱动验证完毕
四、 传感器简介
AHT30是一款高性能的温湿度传感器,由广州奥松电子股份有限公司生产。它具有以下特点:
低功耗:设计用于低功耗运行,有助于延长设备的电池寿命。
高精度:能够提供准确的温度和湿度数据。
数字输出:通过I²C接口进行数字信号输出,标准I²C格式。
宽电压支持:工作电压范围为2.2-5.5VDC。
优异的长期稳定性:即使在恶劣的环境下也能保持稳定性能。
响应迅速:能够快速响应环境中温湿度的变化。
抗干扰能力强:采用SMD封装适于回流焊,具有良好的抗干扰性能。
AHT30传感器广泛应用于智能家居、消费电子、医疗、汽车、工业、气象等领域,例如暖通空调、除湿器和冰箱等家电产品,测试和检测设备及其他相关温湿度检测控制产品。
技术规格方面,AHT30的供电电压为DC2.2-5.5V,测量范围是温度-40至120℃、湿度0-100%RH,典型精度为温度±0.5℃、湿度±3%RH(25℃时),分辨率为温度0.01℃、湿度0.024%RH。
五 、驱动传感器
计算出来的温度出错
C语言实验后,温度正确,修改代码
修改代码后,读到正确温度!!
代码
#define aht30_addr 0x38<<1
void write_aht30(uint8_t *data_buf,uint8_t len){
HAL_I2C_Master_Transmit(&hi2c1,aht30_addr,data_buf,len,100);
}
void read_aht30(uint8_t *data_buf,uint8_t len){
HAL_I2C_Master_Receive(&hi2c1,aht30_addr,data_buf,len,100);
}
void aht30_get_data(void){
uint8_t read_back_data[8]={0x0};
read_aht30(read_back_data,sizeof(read_back_data));
LOG("\r");
for(int i=0;i<8;i++){
LOG(",0x%02x",read_back_data[i]);
}
LOG("\r");
double temp=0;
unsigned long data32;
data32 = ((int32_t)(read_back_data[3]&0x0F) << 16) | ((int32_t)read_back_data[4] << 8) | ((int32_t)read_back_data[5]);
temp=(data32*200)/1048576-50;
LOG("temp %X %.3f",data32,temp);
}
void aht30_init(void){
uint8_t init_data[]={0xAC,0x33,0x00};
write_aht30(&init_data[0],3);
}
int main(void)
{
/* USER CODE BEGIN 1 */
/* USER CODE END 1 */
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* USER CODE BEGIN Init */
/* USER CODE END Init */
/* Configure the system clock */
SystemClock_Config();
/* Configure the peripherals common clocks */
PeriphCommonClock_Config();
/* USER CODE BEGIN SysInit */
/* USER CODE END SysInit */
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART1_UART_Init();
MX_I2C1_Init();
/* USER CODE BEGIN 2 */
uint8_t str[] = "Hello eeworld! Hello NUCLEO-WB09KE!\r\n";
HAL_UART_Transmit( &huart1, ( uint8_t * )str, sizeof( str ) - 1, 100 );
// uint8_t init_data[]={0xAC,0x33,0x00};
// HAL_I2C_Master_Transmit(&hi2c1,aht30_addr,init_data,3,100);
// HAL_Delay(150);
//
// uint8_t read_back_data[8]={0x0};
// HAL_I2C_Master_Receive(&hi2c1,aht30_addr,read_back_data,8,100);
aht30_init();
HAL_Delay(150);
aht30_get_data();
}
开发板+传感器
-
回复了主题帖:
【NUCLEO-WB09KE测评】二、卡的死死的BLE初始化
sujingliang 发表于 2024-9-25 19:18
时钟不对,应该像上面这样配
可是例程里不是这么配置的,而且我配置之后
还是不行,连LOG都没有
- 2024-09-25
-
回复了主题帖:
【NUCLEO-WB09KE测评】二、卡的死死的BLE初始化
秦天qintian0303 发表于 2024-9-25 13:12
应该搞一个相关的使用文件,比如先初始化什么,在配置什么的,这个感觉ST应该有
有,第一次尝试后就找到了文档,照着做了,文档名“How to build a Bluetooth® Low Energy application with STM32WB0 MCUs”
链接:
https://www.st.com.cn/content/ccc/resource/technical/document/application_note/group2/cd/20/91/44/a3/8a/47/34/DM00988117/files/DM00988117.pdf/jcr:content/translations/en.DM00988117.pdf
-
回复了主题帖:
【NUCLEO-WB09KE测评】二、卡的死死的BLE初始化
各位大佬要是发现有什么不对的步骤请指出,感谢!
-
回复了主题帖:
【NUCLEO-WB09KE测评】二、卡的死死的BLE初始化
最后的GIF时可以播放的,不知道为什么显示黑色,但是鼠标点击后就可以正常播放。
-
发表了主题帖:
【NUCLEO-WB09KE测评】二、卡的死死的BLE初始化
本帖最后由 dvacos 于 2024-9-25 11:23 编辑
本文目的:打开WB0系列广播,过程比较曲折,新品还是要等一等啊。以下是相关流程
一 失败的尝试
想要打开蓝牙功能,发现BLE的组件是灰色的无法打开,提示要使能“RADIO”,于是开始一步一步的倒推。
打开RADIO的条件是
RADIO TIMER
点击同意之后就可以,自动调整时钟了
打开RADIO功能
BLE组件提示要打开安全相关配置
按照提示打开安全相关功能
注意上图RADIO 处是有警告的,我关闭uart1后在,关闭RADIO 在打开RADIO ,再去打开uart1就好了,不知道为什么。
打开BLE 配置为,从机
打开广播
映射串口,作为蓝牙协议栈的调试接口。
生成代码后,无论怎么调整都是编译错误,
而且都是涉及.S的错误,无法排查
对照着例程对比Cube MX的配置,完全一样的情况下(我对比到的、看得到的),还是始终编译不通过,非常难搞,懵逼。
而且WB0系列太新的,没有文档参考,不止从何下手。
卡了一个多星期后,突然想到更新以下Cube MX看看能不能解决问题。
打开之前的工程,再次生成代码。下图是Cube MX不同时,提示的要不要同步Cube MX相关信息
测试发现,由旧版本的工程再次生成的代码还是编译不过。尝试多次后从开工程,从头在配置一遍,终于!!!编译通过了!!
二 再次出发
6.12.1版本Cube MX 再次配置,以下仅贴图,不添加文字,想看文字看第一节。
三 实验
终于编译成功了
参考例程添加使能广播相关代码,还是无法开启广播,甚至不会正常打印LOG
甚至仿真都没办法运行,所以打算先用例程改蓝牙相关代码,往后走吧。
-
回复了主题帖:
【Follow me第二季第2期】任务三,Home Assistant +EMQX+Arduino mqtt
秦天qintian0303 发表于 2024-9-25 08:50
Home Assistant是安装在哪里的?
命令行安装的
- 2024-09-24
-
发表了主题帖:
【Follow me第二季第2期】任务三,Home Assistant +EMQX+Arduino mqtt
本帖最后由 dvacos 于 2024-9-24 18:01 编辑
任务三:
1、安装docker
官网直接下载的Windows系统x86架构的
https://docs.docker.com/desktop/install/windows-install/
下载后无脑安装即可
安装完成后打开
安装完毕
2、安装home assistant
通过命令窗口安装home assistant(要魔法上网)
安装完毕,魔法上网容易失败,能开始就说明操作没问题,多试几次就好
3、安装EMQX
安装方法和安装home assistant差不多,命令如下:
docker search emqx
docker pull emqx
后续按照视频操作就可以完成添加设备了。
4 、代码
获取本机的IP
安装PubSubClient 等库
参考8266 的例程编写代码,因为只有这个例程有连接WIFI的实例
查看例程在结合搜索引擎+AI就可以,完成代码了。
5 、实验结果
EMQX的集群界面
home assistant mqtt监听界面
确认在监听界面能接收到数据后就可以进一步配置configuration.yaml文件,如果接收不到数据就要去检查代码或者其他配置了
configuration.yaml 配置文件新增内容
home assistant 概况界面
home assistant 温度曲线图界面
以上完成任务三!!!!
完结!!
- 2024-09-21
-
发表了主题帖:
【Follow me第二季第2期】任务二、LED矩阵+DAC正弦+运放放大+ADC采集打印
本帖最后由 dvacos 于 2024-9-21 15:23 编辑
1、 LED矩阵
文本显示:
偶然间发现,ArduinoGraphics 这个库,可以再LED点阵上显示文本,所以就使用它做了以下效果
代码:
//固定字
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
void setup() {
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
const char text[] = "Hello";
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(text);
matrix.endText();
matrix.endDraw();
}
void loop() {
}
滚动文本
由于LED点阵很小,并且分辨率很低,只能显示几个字母,于是加上滚动代码,所以效果如下
代码:
//滚动灯
#include "ArduinoGraphics.h"
#include "Arduino_LED_Matrix.h"
ArduinoLEDMatrix matrix;
void setup() {
matrix.begin();
}
void loop() {
matrix.beginDraw();
matrix.stroke(0xFFFFFFFF);
matrix.textScrollSpeed(100);
const char text[] = " Hello EEWorld! ";
matrix.textFont(Font_5x7);
matrix.beginText(0, 1, 0xFFFFFF);
matrix.println(text);
matrix.endText(SCROLL_LEFT);
matrix.endDraw();
}
2、DAC生成正弦波
DAC引脚确认
所以将示波器接到A0上可以看见以下波形,频率为1khz的正弦波。
3、OPAMP放大DAC信号
放大后的输出信号不应超过 ~4.7 V,否则会出现削波,甚至可能会损坏电路板,所以要降低DAC生成的正弦波的电压
降低前4.64v
降低后2.44v
需要添加的代码:
wave.amplitude(0.5);
接线图
非常重要!!!接错不会放大电压
A0 - A1 提供DAC输出电压
电阻一端接地 中点接A2 另一端接A3
实验效果
4、ADC采集电压并且打印
在第三点的基础上将A3运放输出的电压 接到A4,A0DAC生成的电压接到A5
由于上位机不能缩放(或者说我不会)Y轴,只能勉强看
以上就是任务二的所有任务!!!
- 2024-09-19
-
加入了学习《FollowMe 第二季:2 - Arduino UNO R4 Wi-Fi 及任务讲解》,观看 Arduino UNO R4 Wi-Fi 及任务讲解
- 2024-09-18
-
发表了主题帖:
【Follow me第二季第2期】任务一、开发环境 与 串口输出
本帖最后由 dvacos 于 2024-9-18 15:38 编辑
一 安装IDE
直接去Github下载就不用搞那些烦人的流程,找到对应的系统直接下载就可以,下载后无脑安装即可。
链接:https://github.com/arduino/arduino-ide/releases
二 任务一实现
安装好后打开的界面
弹出一列需要安装的驱动,无脑同意即可
直接开始编译,因为底层已经封装很多代码,如下图,第一次编译时会下载不少东西,等待下载、编译成功即可。
设置语言为中文
添加串口初始化 与 打印数据代码
以上就是,任务一的搭建环境并开启第一步串口打印Hello EEWorld!