BLE
调试助手进行调试,看看能否查到温湿度数据是怎样传输的。BLE
调试助手进行扫描周围的蓝牙设备,可以找到 LYWSD03MMC
名称的蓝牙设备,这个就是需要连接的米家蓝牙温湿度计2代的设备,这个名称可以从设备后盖上查到。注意:这里需要记录米家蓝牙温湿度计2代的 MAC 地址,后面需要用到
CONNECT
按键就可以进行连接了,当连接完成后,会进入设备提供的Service
列表,如下图:Device Information
这个Service
,尝试读取数据,验证一下数据读取是否有限制。UUID
,这个比较麻烦,需要从设备提供的众多Service
列表中去查找,去猜测。所幸的是依靠强大的度娘
或谷哥
,这些坑已经有人踩过了,这里就可以参考他们的踩坑经验快速定位到需要的数据。在https://github.com/JsBergbau/MiTemperature2/issues/1
这个issue
中,就有不少的借鉴经验,例如读取温湿度的 UUID
和温湿度数据的换算方式。 1读取的原始数据:
2E6 0A 36 B4 0A
3
4温度换算方法
5温度 = 0x0AE6 = 2790
6湿度 = 0x36 = 54
7电量 = 0x0AB4 =2740
8
9实际显示:
10温度:27.9 C
11湿度:54%
12电量: 2.742 V (读数后使用万用表测量电池)
RW007
高速WIFI
模块的BLE
主机功能尝试读取米家蓝牙温度计2代的温湿度数据,这里使用STM32F411-NUCLEO开发板
和RW007 EVB
进行测试。RW007
扫描附近的设备,查找米家蓝牙温度计2代设备,并进行连接。mac
地址为A4:C1:38:35:52:94
,使用RW007
模块进行扫描,在扫描的结果列表中可以找到对应的mac
地址。RW007
初始化和执行扫描操作。1msh />rw007_ble init central
2msh />rw007_ble scan
RW007扫描米家蓝牙温湿度计2代的设备
RW007
模块连接上米家蓝牙温湿度计2代的设备,后会收到来自米家蓝牙温湿度计2代的设备的NOTIFY
数据,内容刚好是温湿度及电量数据。1msh />rw007_ble connect A4:C1:38:35:52:94
通过上面的命令进行连接米家蓝牙温湿度计2代的设备。
NOTIFY
,在接收数据的位置,添加解析数据的功能即可,在rw007_ble_ntf_handle
的函数中进行以下的修改。 1case RW007_BLE_NTF_TYPE_NOTIFY_RX:
2 {
3 struct rw007_ble_gap_event_notify_rx *notify_rx;
4
5 rt_kprintf("RW007_BLE_NTF_TYPE_NOTIFY_RX\n");
6
7 notify_rx = (struct rw007_ble_gap_event_notify_rx *)data;
8 rt_kprintf("conn_handle:%d, attr_handle:%d, rcv (%s) length:%d, data:\n",
9 notify_rx->conn_handle, notify_rx->attr_handle,
10 notify_rx->indication ? "indication":"notification", notify_rx->length_data);
11 hex_dump((const rt_uint8_t *)(notify_rx + 1), notify_rx->length_data);
12 int32_t temp = 0xffff;
13 int hum = 0xff;
14 int32_t v_bat = 0xffff;
15
16 rt_uint8_t *ptr = (const rt_uint8_t *)(notify_rx + 1);
17
18 //Here to get mi tempture data
19 temp = 0xffff & ptr[1];
20 temp = temp<<8;
21 temp = temp | ptr[0];
22 hum = ptr[2];
23 v_bat = 0xffff & ptr[4] ;
24 v_bat = v_bat << 8 ;
25 v_bat = v_bat | ptr[3];
26 rt_kprintf("temp=%d mC,hum=%d%,v_bat=%dmV\n",temp,hum,v_bat);
27 break;
28 }
第四步:编译烧录程序,验证功能。
验证功能成功!
RW007 BLE
主机功能的操作,以及如何把米家蓝牙温湿度计2代设备的温湿度数据进行换算的流程,总的来说 RW007 BLE 主机功能使用还算方便,比较麻烦和多坑的是解析温湿度数据,开始一直没弄清楚哪一个 UUID 和 温湿度数据有关的,也是折腾了不少时间,幸好在朋友的帮助下才顺利解析到温湿度数据。