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的话题板控制节点设备了。
以上就是今天的笔记,谢谢观看!

本文标签: 学习笔记wifiMesh