本帖最后由 Fillmore 于 2019-6-12 11:41 编辑
之前手里有一个悟空 m1,想将其连接到 HA,利用官方 APP 配网,一直失败。在论坛看到有大神出了 M1 的固件,按照教程,拆开,刷机,进入 bootloader 后一直有 error 打印,无法完成升级流程,索性将 M1 的传感器拆下来,自己开发,将传感器的数据利用 mqtt 发往 HA。
自己开发的固件,希望实现以下功能:
- 可以利用控制台配网
- 可以利用微信配网
- 可以利用控制台设置数据更新时间
- 实现设备的自动发现
- 实现 OTA 升级
手上有一块空闲的 RTL8710 的开发板,正好拿来废物利用。操作系统使用 rt-thread,使用操作系统的好处是操作系统自带了控制台,调试和配置很方便,再者,rt-thread 拥有数量众多的软件包,本次开发中需要用到的 mqtt,rt-thread 也已经提供了,省去了开发的时间。
RTL8710的照片如下图所示,是个类似 ESP8266 的 wifi soc
ZE08 模块预留了 7 个 IO 出来,我们只要用到其中的 4 个,我已经在图中标了出来
M1 使用的甲醛传感器型号是 ZE08,这个传感器,5V 供电,使用串口发送数据,读取数据比较简单。ZE08 有两种模式,一种是主动上报模式,一直是问答模式。我用的是问答模式,也就是要读取数据,要先发读取数据的命令,ZE08 才会把数据返回过来。这里列出需要用到的命令和数据结构体:[color=white !important][color=white !important]?
const char ze08_cmd_initiative_upload_mode[] = {0xFF, 0x01, 0x78, 0x40, 0x00, 0x00, 0x00, 0x00, 0x47};
const char ze08_cmd_question_answer_mode[] = {0xFF, 0x01, 0x78, 0x41, 0x00, 0x00, 0x00, 0x00, 0x46};
const char ze08_cmd_read_data[] = {0xFF, 0x01, 0x86, 0x00, 0x00, 0x00, 0x00, 0x00, 0x79};
struct ze08_data_fromat
{
volatile uint8_t start;
volatile uint8_t cmd;
volatile uint8_t ug_h;
volatile uint8_t ug_l;
volatile uint8_t retain1;
volatile uint8_t retain2;
volatile uint8_t ppb_h;
volatile uint8_t ppb_l;
volatile uint8_t verify;
};
现在的读取数据是 5s 读取一次,数据读取成功,结果如下:
mqtt 服务器使用 HA 自带的 HBMQTT,需要在 HA 的 mqtt 里设置登陆用密码,用户名为默认的 homeassistant
mqtt:
password: your_password
在 sensor 里添加 mqtt 传感器的相关配置
sensor:
...
- platform: mqtt
state_topic: 'home/bedroom/methanal/state'
name: ze08
unit_of_measurement: ug/m3
然后利用 mqtt 将数据发往 topic:home/bedroom/methanal/state 即可,最终效果如下所示:
[size=0.83em]VBEY5WJIOFF73PW]OZ%{H`L.png (82 KB, 下载次数: 0)
下载附件
[color=rgb(153, 153, 153) !important]2019-5-27 10:57 上传
、
ze08 已经连接上了 HA,现在的数据是直接发往 state topic的,看教程,M1 的 3 个传感器可以通过 json 一起发送过去,等将 3 个传感器都对接上后再改改,第一篇就这样吧。
|
楼主自己做的吗,好厉害