在上次的文章中,我们已经给米家温湿度计刷入了定制固件,现在便可以使用蓝牙广播模式来接收数据了。相比于蓝牙连接模式,监听广播模式不建立蓝牙连接,只是等待温湿度计的蓝牙广播,进一步节省了电量消耗。
1.修改固件设置
在开始之前,我们先连接上温湿度计微调一下设置。在有蓝牙功能的电脑上打开这个链接,点击 Connect 并选择对应的温湿度计。在连接成功后会显示如下的内容:
将 Advertising type
修改为 Atc 1441
,并设置所希望的广播间隔时间 Advertising interval
和 广播功率 RF TX Power
,最后点击 Send Config
保存配置。
2.安装蓝牙相关软件
以下内容在 Debian 10 上测试通过,所有命令需要 root 权限。
安装 Python3 和蓝牙:
apt install python3 bluez python3-pip
安装蓝牙依赖:
pip3 install bluepy requests
期间如果遇到 bluepy 安装失败,运行
apt install libgtk2.0-dev
后再试
如果还有其他报错可以自行网络搜索解决,这里就不多涉及了。
3.下载源码并运行
项目地址:https://github.com/JsBergbau/MiTemperature2
使用 Git clone 或直接下载源码压缩包到本地解压,进入目录后 LYWSD03MMC.py
是我们所需要运行文件。在这里我们可以先简单尝试运行 ./LYWSD03MMC.py -a
来验证代码能够工作。不出意外的话,稍等片刻会出现类似如下的回显:
BLE packet: A4:C1:38:8F:C5:55 00 1110161a18a4c1388fc555013a495d0bde1a -82
Temperature: 31.4
Humidity: 73
Battery voltage: 3.038 V
RSSI: -82 dBm
Battery: 93 %
常用的运行参数如下:
--device AA:BB:CC:DD:EE:FF
只接收来自指定 MAC 地址的数据
--count N
接收到N次数据后退出脚本
-r
温度只保留一位小数
-http URL
每次获取到读数后请求指定的 URL
-call CALLBACK
每次获取到读数后运行指定程序
如果需要将读取到的数据写入到文件,作者给出了一个非常简单 bash 的例子,使用 -call 参数调用即可。
#!/bin/bash
# This is quite useful for testing
echo $@ >> data.txt
exit 0
更多的使用方法和说明可以参见作者的项目页面。