声明:本人对模仿本文实验造成的人身伤害和财产损失不负责任,请注意安全、佩戴护目镜等防具。本文使用的VPN技术仅作传感器数据加密用途。
本文内容如题。此系统功能有:远程查看当前室内温湿度、屏幕显示当前室内温湿度、远程查看温湿度随时间变化曲线、Siri等语音助手控制空调等。
所需材料如下:
- 任意ESP8266开发板或最小系统(不需要SPI、代码支持OTA升级)-10元;
- Arduino ESP8266开发环境, 需要的库为EspMQTTClient、Adafruit_AM2320、SSD1306Brzo、IRremoteESP8266 -免费;
- AM2320 I2C 温湿度传感器模块(此传感器性价比较高,请自行搜索参数,也可自行选择其他合适传感器)-10元;
- SSD1306 128*64 I2C OLED屏幕 -10元;
- 5cm*7cm洞洞板,如封面所示 -3元两个;
- 跳线若干 -5元一堆;
- TSAL6200红外发射二极管 -5元10个;
- 22欧电阻,可选同时并联100欧电阻 -10元几百个;
- 焊台、松香等拆焊工具耗材 -50~200元
- USB数据线 -2元;
- Openwrt无线路由器(作为L2TP客户端加密传感器数据);
- 运行Linux(Ubuntu)系统的云服务器/局域网服务器;
配置Arduino ESP8266开发环境本文不详述。最后两项的基础知识请自行学习,如不需要加密通讯可不用Openwrt无线路由器,或使用SSL加密代替VPN,具体方法本文不详述。
一、温湿度传感器节点
NodeMCU开发板的引脚编号定义参考此图:
硬件部分:
将开发板如图所示放置:
AM2320: 电源+ -> 3V3,GND -> GND;信号SDA -> D2,SCL -> D1;
屏幕: 电源VCC -> 3V3,GND -> GND;信号SDA -> D3,SCL -> D5;
红外部分:并联22欧和100欧电阻,正极方向从开发板下方走线连接D6,红外LED负极连接右侧的GND。阻值为计算所得,仅适用此型号红外LED,若使用其他红外LED可能会过压损坏。
具体走线请自行摸索,建议先在面包板连接后测试,确定元件正常和连接正确后再焊到洞洞板上。
软件部分:
git clone https://gitee.com/cyjason2000/TandH_Node.git
使用带数据传输功能的USB2.0数据线,或者USB转TTL连接电脑与开发板,然后用安装好所需库的Arduino打开SimpleMQTTClient_home_display_IR文件夹中的.ino文件,编辑WiFi SSID与密码,还有等一下介绍的MQTT服务地址端口、账号密码。
在Arduino开发板菜单选中ESP8266通用或自己的开发板。Baud rate 选择115200,编译并写入。写入之后,如果后续要加入新功能,可以通过浏览器访问串口输出的OTA升级Web界面地址,上传编译后的.bin文件升级。
二、搭建MQTT和数据可视化服务
本部分需要Linux、MySQL、计算机网络相关知识,本文仅提供在Ubuntu18.04 Server搭建方法。
1.L2TP/IPsec服务
声明:此VPN服务仅用于个人隐私保护、敏感数据加密等合法用途。
安装脚本:
https://teddysun.com/448.htmlteddysun.com然后用Openwrt路由器作为客户端,其下的设备都可以通过VPN加密连接到服务器,无需担心传感器数据泄露。具体原理请自行学习计算机网络相关知识。
2.MQTT服务
简单地说,MQTT服务就是在物联网设备间转发消息的服务,详细介绍请自行搜索。
有两种常用的MQTT服务:EMQX和Mosquitto。其功能相似,在本文中使用到的功能几乎相同,区别只在API不同。EMQX按照其官网文档指引下载安装,中英双语。
https://docs.emqx.io/broker/latest/cn/docs.emqx.ioMosquitto服务的安装教程满天飞,就不造轮子了。
3、MySQL
安装,新建“mqtt”数据库,添加一个仅有“mqtt”数据库完整权限、可远程访问的账号。请自行学习数据库、MySQL相关知识。
4、Apache2(可选,可用其他Web服务代替)
自己写一个主页,包含有Web界面服务端口的超链接。请自行学习计算机网络、Apache和HTML相关知识。
5、关键步骤:MQTT消息转存MySQL
使用mqtt2sql项目,按照README操作:
https://github.com/curzon01/mqtt2sqlgithub.com如果执行mysql.sql报错,可以使用我改写的:
https://gitee.com/cyjason2000/mqtt2sqlgitee.com操作完成后,修改单片机代码里的账号密码等,编译写入,半分钟后查询mqtt数据库的mqtt表,若查询到类似图中信息则配置成功。
6、Grafana服务
Grafana是一个数据可视化Web服务,支持多种数据来源,包括MySQL。
Grafana: The open observability platformgrafana.com在Grafana官网按其提供的方法安装。添加dashboard,填写SQL查询。
请自行学习SQL查询与函数。
等待一段时间即可绘制出如下图温湿度随时间变化曲线。
7、Siri控制格力空调
简单来说就是用“快捷指令”SSH连接到服务器,向Localhost的MQTT服务的home/ctrl主题发送一条"GreeAC_on_26"或者"GreeAC_off",订阅了此主题的开发板收到后通过红外LED发射相应的遥控信号。SSH的具体命令参考EMQX文档的API,或使用Mosquitto自带的Pubclient。
IRremoteESP8266库非常强大,还支持三菱等品牌,也可以录制Raw信号,几乎可以控制一切红外遥控电器。可以自行修改Arduino代码适配自家电器。
三、总结
本文的教程非常不详细,对新手极度不友好,但算是授人以渔。如果不去了解学习,复制粘贴命令做出来的东西没有意义。有的轮子确实没必要重复造,比如文中使用的mqtt2sql项目,但是这个项目的.sql是不适合最新版本MySQL的,如果我不去看源码搞清楚来龙去脉,我还在写自己的mqtt to sql呢。因此,总是要抱着学习的心态去折腾这些没什么实际意义的小东西,虽然结果是useless的,但是过程相当有意思。