admin管理员组文章数量:1540692
ESP32 WIFI MESH学习笔记
文章目录
- 前言
- 一、服务器部分
- 二、ESP32部分
- 1.引入例子
- 2.修改用户名称及密码
- 3.初始化IOT登陆信息
- 4.初始化
- 5.侦听函数
- 6.主函数
- 7.子节点程序
- 三、程序验证
前言
前文(笔记6)已完成带websever根节点的MESH网搭建,并实现了通过访问web节点控制子节点设备。但使用物联网的形式,会更容易地实现设备的远程监控本文将记录通过WIFI把Mesh网接入MQTT服务器,实现向MQTT服务器收发信息的功能。
一、服务器部分
为方便学习,本次使用简单的DFOBOT的MQTT服务器,地址为:iot.dfrobot 。第一次使用需进行注册,这里不再介绍。
注册完成后,记下用IOT用户名iot_id(user )和密码Iot_pwd(password)。注意不是登陆iot.dfrobot的用户名和密码 ,如下图:
然后新建一个设备,如下:
记下topic名称,服务器的设置就完在了。
二、ESP32部分
1.引入例子
加载例子 mqttbrtdge,如下图:
2.修改用户名称及密码
修改下图中MESH网名称、密码,以及可接入公网的WIFI名称及密码。
需注意的是,如接家用WIFI不能接5G,只能接4.2G。我还是用手机热点进行连接。方便查看是否已接入。
然后,我们需要生成以下对象
painlessMesh mesh;
WiFiClient wifiClient;
PubSubClient mqttClient(mqtt_Broker, 1883, mqttCallback, wifiClient);
3.初始化IOT登陆信息
在程序前段,声名登陆信息(指针变量),如下:
我还增加两个变量,分别记录访问IOT时,需要提供访问设备的名称, 以及是否已连接到IOT服务器
4.初始化
初始化部分与websever部分相同,不再累述。传送门
5.侦听函数
当侦听到话题内容时,把内容从串口打印出来,并向全网广播:
代码如下
void mqttCallback(char* topic, uint8_t* payload, unsigned int length) {
char* cleanPayload = (char*)malloc(length+1);
memcpy(cleanPayload, payload, length);
cleanPayload[length] = '\0';
String msg = String(cleanPayload);
Serial.printf(" Received msg=%s\n", msg.c_str());
free(cleanPayload);
String targetStr = String(topic);
Serial.printf(" Received rargetStr=%s\n", targetStr);
mesh.sendBroadcast(msg);
}
6.主函数
主函数比较简单,
mesh.update();
mqttClient.loop();
由于发现wifi不时会掉线,增加了以下代码,用于掉线后重新接入mqtt服务器。
if (!mqttClient.connected()){
Mqtt_connected =0;}
if (mqttClient.connect(client_id.c_str(), MQTT_UserID, MQTT_UserPW)&&Mqtt_connected == 0) {
Mqtt_connected = 1;
Serial.println("Public emqx mqtt broker connected");
mqttClient.publish(Topic, "Hi EMQ X I'm ESP32 ^^");
mqttClient.subscribe(Topic);}
else {
delay(1000);
}
至此,MESH网的根节点程序已完成。
7.子节点程序
子节点程序与笔记6一致。不累述传送门入口
三、程序验证
打开手机WIFI ,分别给三块ESP32加电。其中根节点用电脑USB口加电。
打开IDE的串口监视器,稍等一段时间后,会有 “Public emqx mqtt broker connected” 字样。此时,说明我们的MESH网已接入MQTT服务器。
我们打开MQTT服务器对应话题板,会发现写入了“Hi EMQ X I’m ESP32 ^^”字样,说明已经把信息写入了MQTT的话题 板,如下图
我们再向这个话题板发送Led_1_on,以及Led_1_off 的信息,如下图
回到我们的串口发监视器,会有以下内容:
如果我们按笔记6的程序编写子节点的程序,我们会发现节点1的红灯会亮起来。
此时再发送Led_1_off,节点设备上的红灯会熄灭。说明我们可以通过MQTT的话题板控制节点设备了。
以上就是今天的笔记,谢谢观看!
版权声明:本文标题:ESP32 WIFI MESH学习笔记7-物联网与控制(ESP32部分) 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/dianzi/1727037183a1095170.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论