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

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sqshining/article/details/87459032

正式DIY

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

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

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

外观图:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

主板PCB:
在这里插入图片描述
电路原理图:
在这里插入图片描述

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

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

1、ESP8266模块

也有人叫它NodeMCU
前面我们研究了怎么用Arduino IDE给它烧程序。
这个模块可以用使用CP2102的或者CH340的,都可以,后者便宜几块钱。
可以在某宝上买到,十几块钱吧。
在这里插入图片描述

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

NRF24L01+ 无线模块 功率加强版 2.4G 无线收发通信模块
在这里插入图片描述
在某宝上,大概两三块钱。
当然我们现在是用在家用场合,收发距离不太远。
如果要远距离传输,最好买那种加屏蔽罩并带有外置天线的。
或者,模块带屏蔽罩,自己另加室外天线。

3、硬件连接线路

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

NRF24L01+ 的管脚定义:
在这里插入图片描述
跟ESP8266的连接定义:
在这里插入图片描述
在这里插入图片描述

接好之后差不多是这个样子:
在这里插入图片描述

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

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

1、安装MySensors软件库

打开Arduino,工具–>管理库,搜索“MySensors”:
在这里插入图片描述
点安装。

2、Adafruit_NeoPixel 库

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

在Arduino的库管理器中,搜索“Adafruit_NeoPixel”:
在这里插入图片描述
点安装。

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

3、Time 库

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

在这里插入图片描述

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

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

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

在这里插入图片描述
把code文件夹解压出来,并重命名为 “GatewayESP8266MQTTClient”:
在这里插入图片描述
双击“GatewayESP8266MQTTClient.ino”这个文件:
在这里插入图片描述
稍作修改:
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"

在这里插入图片描述
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 

在这里插入图片描述
5、找到 101行:

#define MY_ESP8266_HOSTNAME "MySensors-Mqtt-gateway"

改为:

 #define MY_HOSTNAME "mqtt-sensor-gateway"

在这里插入图片描述

6、找到大概128行:

#include <ESP8266WiFi.h>

在上面加入一行:

#define MY_INDICATION_HANDLER

在这里插入图片描述

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)))

在这里插入图片描述
代码修改到这里就完成了。

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

然后编译,下载到ESP8266。
在这里插入图片描述

五、启动网关、设置参数

然后打开串口:
在这里插入图片描述

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

在这里插入图片描述
直接点击,连接进去。
可以看到已经连接:
在这里插入图片描述
然后在手机上打开浏览器,在地址栏输入:192.168.4.1,进入设置页面:
在这里插入图片描述
在这里插入图片描述

点击“configuration”,进入wifi的配置界面:
在这里插入图片描述
因为我的已经设置过了,所以会有参数在里面。
如果从来没有设置过的,右边基本上都是空白的,像是这样:
在这里插入图片描述
填写那个表格如下:

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秒之后重启。
重启之后,串口打印出来的信息如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到,ESP8266分配到的IP为:192.168.1.101
好了,此时可以在电脑上用浏览器访问到这个地址,可以看到页面内容如下:
在这里插入图片描述

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

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

展开阅读全文

没有更多推荐了,返回首页