智能家居折腾记录–DIY设备#1

发布于 2020-02-16  127 次阅读


#1.方案探讨

接入协议选择

首先确认一点,为了确保整套系统的方便部署和方便开发,主要以网络协议连入系统,因此在与系统的连接上考虑的是网络协议。

首先考虑的是http协议,最常见,用起来也很方便,但就是我们传输的数据量普遍较小,不需要很多复杂的控制,运行在单片机上的http客户端对于资源也有一定的占用。

其次是直接利用TCP或UDP协议传输报文,自建协议,但这个就有点复杂,简单的字符串传输没有问题,但就是没有那么可靠,用在传感器上还能够接受,数据包损坏大不了丢了,也没啥损失,但就是无法保证可靠性,在发送信号控制方面会有问题,还有就是必须在智能家居平台上面实现插件对报文进行解析,工作量较大,暂时放一边。

我最后决定选MQTT协议,是最近鼓捣这个才了解到的基于TCP的的应用层协议,其使用了消息订阅/发布的模式,特别适合物联网领域,低带宽,低网络稳定性的环境,极度精简,还提供qos服务。不对数据的内容和格式做限制,很灵活。另外提供了客户端意外中断的处理机制。而且homeassistant直接支持mqtt协议,内置了mqtt客户端。

综上,最后考虑利用mqtt协议进行数据的传输,现在只要制定mqtt协议中的主题发布规则和通信的消息格式即可。

可以设置一个中心节点,中心节点通过WiFi接入家庭网络,中心节点可以通过外加蓝牙mesh模块,443m无线模块,i2c模块,连接其他串口设备,作为网关,接收其他设备的数据,转换成mqtt报文提交。并接受mqtt报文,解析后发送给各其他设备。


中心节点硬件平台的选用

既然需要连接网络,esp8266是必然的选择,esp8266系列有单就芯片本身就有多种型号,主要区别在可用io数目和内存大小,具体型号表详见:

http://wiki.ai-thinker.com/_media/esp8266/esp8266_module_list.png

ESP8266内置MCU,可直接对其编程,官方提供了 NON-OS SDK 和  RTOS SDK(基于freeRTOS)。 更好更快捷的使用方法是刷写对应的固件,如果需要作为wifi适配器使用,可以直接刷入官方的AT固件,上位机使用AT指令进行串口通信。另外还支持一些解释器固件,如支持*micropython的microPython固件,支持lua的nodemcu固件,另外还有专用固件:如esphome,espeasy,为了智能家居编写的固件,直接写配置,调用api,或者通过web可视化配置即可轻松接入。这里都打算玩玩,先尝试文档较为完整,完成度较高的esphome。

micropython支持多种平台,esp8266,esp32,stm32
nodemcu目前只支持esp8266
esphome也支持多平台,esp8266,esp32
Arduino的资源目前还是最多的,现在能支持的开发板也有很多 

考虑到所需外部元件的数量,我选择以下三种内部对相关引脚已经上下,直接供电就能使用的型号:

  • ESP01S:2个可用io,8m Flash ,板载天线,低成本,用在简单的传感器或者开关上。
  • ESP07S:9个可用io,32m Flash,可直接连接IPEX接口的天线,用在一些需要较好信号的地方。
  • ESP12S: 9个可用io,32m Flash ,板载天线,通常使用,价格适中。

针对上面的芯片选型,在开发时可选择使用了对应芯片的开发板。

另外新出品的esp32是esp8266的升级版,运算能力更强,功耗更低,有两个处理器,还内置了ble蓝牙,玩法等待挖掘。

io若不够使用,可以配合stm32和arduino。

以上是主控mcu的选择,由于wifi的功耗还是比较大的,因此适用于有外接电源的情况。


子节点连接的方案

主要考虑连接距离和功耗,一些子节点希望使用电池供电,因此功耗要尽可能低。这里考虑了多种方案:

简单的开关控制可使用JDY-40,是一个2.4g数传模块,免去了外接mcu,八路开关量,同时也可以进行串口传输数据,传输距离120m。

若需要强信号,可以选择GT38串口443m模块支持空中唤醒和自动组网,一对一,一对多,多对多。

室内多模块考虑使用蓝牙mesh自组网模块,可以支持zigbee协议,结合mcu进行更精细的控制,例如led颜色,pwm进行调光等等。


传感器连接方案

从节省io口的目的出发,尽量考虑IIC总线或者UART串口或者单总线模拟量。

以上对硬件和相关协议做了探讨,接下来就要对蓝牙mesh,串口部分,等子节点中数据的格式进行规定


======To Be Continued======


当其他人都认为你要鸽的时候,你鸽了,亦是一种不鸽