CH582M低功耗蓝牙温湿度传感器接入HASS

一、低功耗温湿度仪

  1. 参考开源温湿度仪进行制作:https://oshwhub.com/hotant/wireless-temperature-and-humidity-detector-414381a
  2. 使用V3版本,即CH582F的芯片,具有更低的功耗。
  3. 在源码中,可以增加广播时间,默认是1s,可以通过手机蓝牙识别到。更改到10s后,减少功耗,并仍可以通过后续的网关进行识别。
    在这里插入图片描述

二、ESP32 MQTT网关

  1. 使用硬件ESP32-C3,其具有4M的flash。
  2. 使用固件OpenMQTTGateway,需要进行相应的配置才可以适配,配置可以参考视频
  3. 下载OpenMQTTGateway后,路径不能存在中文,否则编译错误。
  4. 进行配置,选择C3芯片,打开BT和HA找寻,设置MQTT的地址和账号密码(即后续的HASS中的MQTT)。
  5. 烧录后,使用wifi进行配网,其中注意配置MQTT的前缀,默认是home,但是需要根据HASS中的MQTT进行相应修改,最后可以在HASS中的MQTT中找到对应设备:
    在这里插入图片描述

三、HASS+Nodered配置

  1. 通过MQTT EXPLORER连接到HASS的MQTT,查看网关上传的数据。发现并未识别到温湿度仪的数据,需要在MQTT中对网关进行配置(设置更快的scan、关闭只找传感器的选项)。
  2. 发现设备后,在nodered中进行配置,逻辑如下:
    在这里插入图片描述
  3. 获取温湿度数据,即通过mqtt进行获取,找到对应的topic即可:
    在这里插入图片描述
  4. 从名字中解析温湿度数据并转换成合理数据
var dat = { payload: msg.payload.name };
// dat类型为 26.4C 69.3H 或者 " 26.4C 69.3H" 或者 "-26.4C 69.3H"
var temp = 0.0;
var humi = 0.0;

// 使用正则表达式解析温度和湿度数据
var matches = dat.payload.match(/([ -]?\d+\.\d+)C\s+(\d+\.\d+)H/);

if (matches && matches.length === 3) {
    // 第一个匹配项是温度
    temp = parseFloat(matches[1].trim());

    // 第二个匹配项是湿度
    humi = parseFloat(matches[2].trim());
}

var newMsg = { payload: { "temp": temp, "humi": humi } };
return newMsg;

  1. 发布数据到hass
    在这里插入图片描述
    在这里插入图片描述
  2. 之后就可以在HASS中看到数据,加入到主页即可。

四、WCH MESH测试

上述已经基本完成了功能,设置成10s,纽扣可以使用一两年时间。但是这种方式需要防止很多的esp32网关,同时实时性存在问题。
蓝牙mesh一直是我想要学习并测试的,参考资料如下:
https://www.cnblogs.com/cchHers/p/15470049.html
https://www.cnblogs.com/JayWellsBlog/category/2160216.html
https://www.cnblogs.com/JayWellsBlog/p/16266404.html

  1. 配网方式
    配网方式有两种,配网器配网和手机自配网。其中、手机自配网就得所有的节点都设置为自配网,可以实现更多的节点配网并可以通过手机进行设置。配网器配网可以实现 配网器+朋友节点+低功耗节点的方式,但是配网器flash限制、朋友节点内存限制,都导致无法存在太多的节点。
  2. 手机自配网注意事项:自配网中,需要将4个(包括MESH_LIB)都烧录到节点中,才可以正常运行。
    在这里插入图片描述
  3. 配网器配网:由于需要使用串口进行debug,而没有相应的设备,暂时无法进行测试。

五、后续待测试

  1. 测试配网器
  2. 测试低功耗节点
  3. 测试自定义数据,实现灯开关、pwm等功能。

五-1 基础组网测试

  1. 注意事项
    之前测试一直失败,配网器发送数据一直显示-1错误,查询资料说是网络占用,但是具体的原因和资料却没有找到。偶尔有一次成功,但是也没有找到问题所在。后来发现我用的是vender,并且在里面加入了USB串口的配置,我猜测是这个导致了配网器发送数据一直失败。后面去除了这个,并在其他测试中注意这个问题,就可以正常测试。

  2. 首先是配网器,选择self_provisioner_vendor_with_peripheral,这里在启动之后,会每隔8s,向addr为2的设备(1为自己)周期性发送长度为4的数据。如下可修改成其他的地址进行测试。
    在这里插入图片描述

  3. 然后是friend节点,选择adv_vendor_friend,其会作为朋友节点,可以为其他low_power的设备存储信息,等待他们醒来后发送数据。当有其他设备接入时,会显示如下信息。功耗在18mA左右。
    在这里插入图片描述

  4. 接下来是adv_vendor_low_power,我将里面的debug、key等都去禁用了,否则key会周期扫描增加功耗,为了测试,也需要将上述配网器的地址进行对应修改。功耗测试结果如下,每隔8s会自动唤醒,如有信息则接收信息。平均功耗在200mA的样子(不使用外部DC-DC,使用内部32K振荡器)。【其中发现每隔1.5s会自动唤醒一次,不知道为什么】
    在这里插入图片描述
    修改如下位置则可以更改唤醒周期,这里单位是100ms,使用80正好是8s。
    在这里插入图片描述
    还是不太清楚,为什么每隔1.5s会唤醒一次,导致功耗增加。难道是类似蓝牙连接需要周期检查是否连接?原来是程序中有一个空的周期性TMOS任务,单位是0.625ms,2400正好为1.5ms。
    在这里插入图片描述

  5. 需要1测试:如果一个开关,每隔1s接收来自其他节点的消息,进行开关等,功耗为多少呢?【测试中只有一个LDO,但是这个LDO有自耗电】。功耗为260uA的程度,稍稍有点高。
    在这里插入图片描述

  6. 需求2测试:一个按键开关,采用中断方式,如果有按键则会触发,其他时间内均为休眠。且不需要接收来自配网器的信息。这里设置无任务、接收配网器时间为1h,期间的功耗为:60uA,但是时不时会跳出来一个高电流,且不周期,不知道为什么。
    在这里插入图片描述

  7. LDO静态电流测试:感觉静态电流是不是太大了,得要测一测,测试条件为shutdown模式,果然,这个功耗足足有52uA,上面的按键如果采用更低电流的LDO或者使用纽扣电池,功耗预计将低于10uA,还是挺可观的。
    在这里插入图片描述

  8. 注意事项:要注意在烧录的时候,合理选择是否清空flash,清空后会重新加入配网器,分配到一个新的地址,之前的地址就报废了。如果配网器清空了flash,之前被配网的设备则无法再重新被这个配网器配网,导致其他设备失效,这是最重要的。

  9. 最后是配网器的peripheral功能,还不是很了解,手机可以和这个进行连接,但是如何通信还不清楚。之前以为是蓝牙串口,但是好像没有接收到数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值