基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY

DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY

  • 正式DIY
    • 一、本文参考的国外DIY项目
    • 二、本文采用的模块和连接线路
      • 1、ESP8266模块
      • 2、NRF24L01+ PA版(即所谓的功率增强版)
      • 3、硬件连接线路
    • 三、在Arduino下载安装MySensors软件库和其他第三方库
      • 1、安装MySensors软件库
      • 2、Adafruit_NeoPixel 库
      • 3、Time 库
    • 四、修改、编译网关代码并烧录到ESP8266模块
    • 五、启动网关、设置参数

正式DIY

先声明一下,本次DIY并非原创。
硬件方面,参考了一款国外的DIY,他的项目比较完善。有多个信号指示灯和包装外壳等。
我们的DIY只是用ESP8266跟NRF24L01+加强版的模块直接连接,目的是做个简单的网关,对网关功能进行验证。
当然有兴趣的人可以去做完善的版本。
软件上,我们直接用那个国外DIY项目的源代码。
或者在其基础上进行修改。
这款基于ESP8266的网关支持SoftAP模式(热点模式)设置网络连接参数。

一、本文参考的国外DIY项目

这款MQTT-RF无线网关DIY项目在这里:
https://www.openhardware.io/view/349/MySensors-ESP8266-MQTT-gateway

外观图:

基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第1张图片
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第2张图片

主板PCB:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第3张图片
电路原理图:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第4张图片

他的源代码:
https://github.com/Japio74/MySensorsESP8266MQTTGateway
或者:
https://www.openhardware.io/dl/58bdb24644f656d179dca125

二、本文采用的模块和连接线路

1、ESP8266模块

也有人叫它NodeMCU
前面我们研究了怎么用Arduino IDE给它烧程序。
这个模块可以用使用CP2102的或者CH340的,都可以,后者便宜几块钱。
可以在某宝上买到,十几块钱吧。
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第5张图片

2、NRF24L01+ PA版(即所谓的功率增强版)

NRF24L01+ 无线模块 功率加强版 2.4G 无线收发通信模块
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第6张图片
在某宝上,大概两三块钱。
当然我们现在是用在家用场合,收发距离不太远。
如果要远距离传输,最好买那种加屏蔽罩并带有外置天线的。
或者,模块带屏蔽罩,自己另加室外天线。

3、硬件连接线路

我们使用MySensors官方给出的连接定义,这个连接方式是跟网关源代码的定义相符合的。
参考:https://www.mysensors.org/build/connect_radio#nrf24l01+-&-esp8266
整个的连接共使用7根线,IRQ(中断信号管脚)不需要连接。

NRF24L01+ 的管脚定义:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第7张图片
跟ESP8266的连接定义:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第8张图片
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第9张图片

接好之后差不多是这个样子:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第10张图片

关于硬件连接,这个很简单。
要注意的是NRF24L01+这个模块不可以直接接5V电源,否则会烧掉,而有的项目中,据说这个模块的信号接收会受到干扰,解决方法是在GND跟3V3的电源之间接滤波电容,可以是10uF或者100uF,乃至再接一个高频瓷片电容(电容上标注文字103pF,3代表倍率–10的3次方,10X10^3)。

三、在Arduino下载安装MySensors软件库和其他第三方库

1、安装MySensors软件库

打开Arduino,工具–>管理库,搜索“MySensors”:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第11张图片
点安装。

2、Adafruit_NeoPixel 库

这个库是用来控制LED组的库。

在Arduino的库管理器中,搜索“Adafruit_NeoPixel”:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第12张图片
点安装。

这个库在网关源代码的LedControl.cpp中用到。

3、Time 库

这个库是用来获取和计算时间日期的库。
在Arduino的库管理器中,搜索“time”:

基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第13张图片

点安装。
这个库在网关源码的NtpClient.cpp中用到。

四、修改、编译网关代码并烧录到ESP8266模块

下载好源码MySensors-ESP8266-MQTT-gateway.zip

基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第14张图片
把code文件夹解压出来,并重命名为 “GatewayESP8266MQTTClient”:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第15张图片
双击“GatewayESP8266MQTTClient.ino”这个文件:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第16张图片
稍作修改:
1、把

#define MY_BAUD_RATE 9600

改为:

#define MY_BAUD_RATE 115200

2、把

#define MY_MQTT_PUBLISH_TOPIC_PREFIX "mys-mqtt-out"

改为:

#define MY_MQTT_SUBSCRIBE_TOPIC_PREFIX "domoticz/out/MyMQTT"

3、把

#define MY_MQTT_SUBSCRIBE_TOPIC_PREFIX "mys-mqtt-in"

改为:

#define MY_MQTT_PUBLISH_TOPIC_PREFIX "domoticz/in/MyMQTT"

基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第17张图片
4、找到 大概92行:

char MY_ESP8266_SSID[33];
char MY_ESP8266_PASSWORD[64];

在下面加两行代码:

#define MY_WIFI_SSID MY_ESP8266_SSID 
#define MY_WIFI_PASSWORD MY_ESP8266_PASSWORD 

基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第18张图片
5、找到 101行:

#define MY_ESP8266_HOSTNAME "MySensors-Mqtt-gateway"

改为:

 #define MY_HOSTNAME "mqtt-sensor-gateway"

在这里插入图片描述

6、找到大概128行:

#include 

在上面加入一行:

#define MY_INDICATION_HANDLER

基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第19张图片

7、找到 大概146行:

#undef MY_ESP8266_SSID
#undef MY_ESP8266_PASSWORD

把它们删掉或注释掉:
在这里插入图片描述
8、找到大概237行,

  Serial.begin(9600);

修改为:

Serial.begin(MY_BAUD_RATE);

9、找到GatewayESP8266MQTTClient\PersistentData.cpp的第40行,

if (!((brokerIp[i] > 0) && (brokerIp[i] < 255)))

把它改成

if (!((brokerIp[i] >= 0) && (brokerIp[i] <= 255)))

基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第20张图片
代码修改到这里就完成了。

修改后的完整源代码下载地址:
GatewayESP8266MQTTClient_2019.02.16.rar

然后编译,下载到ESP8266。
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第21张图片

五、启动网关、设置参数

然后打开串口:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第22张图片

可以看到默认的IP为:192.168.4.1
开启了AP热点和一个简单的web服务器。
用手机连接热点:
可以看到wifi已经搜索到网关热点了,名字为:MySGateway

基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第23张图片
直接点击,连接进去。
可以看到已经连接:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第24张图片
然后在手机上打开浏览器,在地址栏输入:192.168.4.1,进入设置页面:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第25张图片
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第26张图片

点击“configuration”,进入wifi的配置界面:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第27张图片
因为我的已经设置过了,所以会有参数在里面。
如果从来没有设置过的,右边基本上都是空白的,像是这样:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第28张图片
填写那个表格如下:

Item Value
Mqtt broker ip address 你的MQTT Broker IP(我的是10.0.0.2)
Mqtt broker port 1883
Wireless network 需要连接的wifi
Wireless pqssword wifi密码

填完之后,点下面那个“Save”保存设置参数。
保存好之后,它会提示说:
“Configuration stored,gateway will now restart,after 5 seconds”
意思是,配置已经保存,网关在5秒之后重启。
重启之后,串口打印出来的信息如下:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第29张图片
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第30张图片
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第31张图片
可以看到,ESP8266分配到的IP为:192.168.1.101
好了,此时可以在电脑上用浏览器访问到这个地址,可以看到页面内容如下:
基于Domoticz智能家居系统(十六)DIY一款基于MySensors的ESP8266+NRF24L01的MQTT(WIFI)和RF无线网关(二)正式DIY_第32张图片

好了,到这里,这个简易的网关就DIY完毕了。

下一篇,将要用另一套ESP8266+NRF24L01模块做个客户端,联合domoticz平台做控制实验。

你可能感兴趣的:(智能家居,物联网与MQTT)