ESP8266网状网络

时间:2018-10-11 07:11:16

标签: arduino esp8266

我正在使用ESP8266创建一个网状网络,这里我使用两个ESP-01作为客户端,使用nodemcu作为服务器。

我正在使用painlessMesh库。我将值作为JSON获取到服务器,效果很好。但是问题是现在我必须连接到本地WiFi连接才能将此数据发布到nodered。无痛网状网络可以创建一个mqtt桥接器以将该数据传输到mqtt客户端,但是它必须与WiFi路由器位于同一通道中。 我已经尝试过了,但是看起来有点复杂。

有什么方法可以终止上述网格任务并使用Arduino的WiFi库连接到Internet。

 // Prototype for the msg received from other nodes
 void receivedCallback( uint32_t from, String &msg );


// create a task instance to send msg to client nodes
Task logServerTask(10000, TASK_FOREVER, []() {
   DynamicJsonBuffer jsonBuffer;
   JsonObject& msg = jsonBuffer.createObject();
   msg["server"] = "logServer";
   msg["nodeId"] = mesh.getNodeId();

   String str;
   msg.printTo(str);
   mesh.sendBroadcast(str);

   Serial.printf("\n");
   });

void setup() {
   Serial.begin(115200);

     mesh.setDebugMsgTypes( ERROR | CONNECTION | S_TIME );  // set before 
      init() 
     //initialise the mesh
      mesh.init( MESH_PREFIX, MESH_PASSWORD, &userScheduler, MESH_PORT, 
      WIFI_AP_STA, 6 );
      mesh.onReceive(&receivedCallback);
      mesh.stationManual(STATION_SSID, STATION_PASSWORD);
      mesh.setHostname(HOSTNAME);
      client.setClient(wifiClient);
      client.setServer(mqtt_server,1883);
      mesh.onNewConnection([](size_t nodeId) {
      Serial.printf("New Connection %u\n", nodeId);
    });

     mesh.onDroppedConnection([](size_t nodeId) {
     Serial.printf("Dropped Connection %u\n", nodeId);
    });

     // Add the task to the your scheduler
       userScheduler.addTask(logServerTask);
       logServerTask.enable();
     }

  void loop() {
      userScheduler.execute(); // it will run mesh scheduler as well
      mesh.update();
      client.loop();

      while(!client.connected()){
          if(client.connect("ESP8266Client123456789")){
          client.subscribe("thermalValues");
          client.subscribe("thermalValues1");
    }
      else{
       Serial.print("failed,rc=");
       Serial.println(client.state());
       delay(500);
    }   
  }
 }

//callback to the received messages from different nodes
void receivedCallback( uint32_t from, String &msg ) {
  //callback received
 }

1 个答案:

答案 0 :(得分:0)

最后,我没有使用任何串行UART就做到了。全无线。因此,我的体系结构由3个ESP-01和1个NodeMcu ESP 12E组成。其中2个ESP-01充当客户端。一个ESP01充当主持人,一个NodeMcu充当服务器。我采取了以下方法-

  1. 客户端将首先将包含传感器数据的消息作为JSON发送给主持人
  2. 主持人将收到这些来自客户端的消息。这些可以是n个客户。然后,主持人会将这些消息发送到充当服务器的NodeMcu
  3. 服务器将仅接收主持人广播的消息。然后,服务器将解析从主持人收到的JSON并提取所有传感器数据
  4. 您可以在一个循环中执行此操作,而下一部分在另一循环中完成
  5. 连接到wiFi并将数据发布到云

您可以参考此LINK