- 阅读本文需要具备的编程语言知识有:typescript, micropython
- 本文涉及的硬件知识有:IO的基础操作
- 本文不涉及对MQTT Broker的搭建相关内容
- 前一部分内容请参见:【Laf 物联网探索】Laf 使用MQTT 的正确姿势以及基础流程
- 阅读本文大概需要10分钟
最终要实现一个最基础的空调伴侣,它有以下几种功能:
- 1 红外控制空调的功能
- 2 检测室内温湿度的功能
- 3 将检测到的温湿度数据上传Laf的功能
- 1 ESP32C3 成本 10元
- 2 红外发射模块 成本2元
- 3 红外接收模块 成本3元
- 4 AHT10温湿度传感器 成本7元
- 5 杜邦线若干
诚然,直连有着操作便捷,流程简单,复杂度低的优势,但我最终决定不使用MQTT 直连的原因如下
- 1 MQTT协议在小程序、UNIAPP中没有很好的支持,会加大控制端的开发难度
- 2 直连存在安全隐患,即使可以设置账号与密码进行验证,我并不希望控制密码出现在前端
- 3 Laf中转更加灵活,它可以将控制指令转化后发给受控端,并且在接入AI之后成为真正的『智能空调伴侣』
首先,在本次实现过程中分为三个部分,分别为 Laf云端、设备端、控制端。其中Laf云端负责将数据存库,以及对控制端的数据的转发(Http-->Mqtt),设备端进行空调的控制以及温湿度数据的上传,控制端负责直观的呈现控制过程以及效果。设备端共需完成两个操作,首先为红外遥控器编码录入存储,其次为上述控制以及数据上传。
设备端的运行环境是Micropython,如何烧录以及如何上传程序不在本文的讨论范围。设备端主要分为两部分的操作,一部分是红外编码的录制,另一部分是红外发射以及数据上传流程。这里顺便说一句,带有红外发射的手机可以通过APP发送红外指令控制空调,这种APP内也是有厂家的数据库,但是我们肯定是获取不到的,因此我们需要自行录制红外编码。如果用若干年前的语言风格来形容,那么这个过程就是机器『学习』的过程。设备端主要代码如下:
Micropython的红外库还是不少的,大部分都有『录制』功能,首先引入库文件,接着定义RX与TX的IO之后,初始化红外功能,在进行录制。 如设备端总代码图中所示,ir 即为红外初始化,在录制过程中 将
if __name__ == '__main__':
.......
修改为
if __name__ == '__main__':
ir.record_cmd()
结束后,在设备根目录会生成一个ButtonCMD.txt的文本文件,该文件内存放着录入的红外数据。当然,您同样可以将红外录制的数据通过MQTT传至Laf数据库进行存储(TODO)。
在了解了如何录入红外数据之后,了解AHT10温湿度如何检测就会变得更简单,AHT10模块有四个IO,其中除VCC,GND两个外,剩余SCL与SDA的I2C通信IO。在设备端代码图中可以看到分别将其定义在了ESP32C3 的 6、7两个IO中。获取温湿度数据只需要两个命令即可:
aht = AHT10(0x38,6,7)
temp = aht.temperature()
humi = aht.humidity()
我们在设备端代码中可以看到数据通过MQTT上传,每5S上传一次(5S一次的频率已经相当快了,一般室内的采样频率可以在一分钟左右)
Laf云端起着一个接收、存储数据,整理数据,以及将受控命令转发至设备的功能。(有小伙伴可能会想为什么不使用设备直接MQTT发送数据控制设备?)
可以参加:【Laf 物联网探索】Laf 使用MQTT 的正确姿势以及基础流程
从代码中可以看出,我们简单的定义了一个端口,它会接收控制端发来的命令,接收的格式为
{
topic:"",//受控端订阅的TOPIC
content:"",//发送的指令
qos:0,// MQTT的QOS
retain:false //MQTT的RETAIN
}
控制端采用UNIAPP进行设计,有兼容多端的优点,目前简单的项目设计如下
目前仅设计了简简单单的功能,未来可能会回来填这个坑~