ESP8266 Mesh Network - PullRequest
       9

ESP8266 Mesh Network

0 голосов
/ 11 октября 2018

Я создаю ячеистую сеть с использованием ESP8266, здесь я использую два ESP-01 в качестве клиентов и nodemcu в качестве сервера.

Я использую библиотеку painlessMesh для того же.Он работает нормально, я получаю значения на сервер в виде JSON.Но проблема в том, что теперь я должен подключиться к локальному WiFi-соединению, чтобы опубликовать эти данные для пользователей.безболезненная сетка может создать мост mqtt для передачи этих данных клиенту mqtt, но он должен быть в том же канале, что и маршрутизатор WiFi.Я пробовал это, но это кажется немного сложным.

Есть ли какой-нибудь способ, которым мы можем завершить вышеуказанную задачу сетки и подключиться к Интернету, используя библиотеку Wi-Fi Arduino.

 // 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 голосов
/ 16 октября 2018

И наконец, я сделал это без использования какого-либо серийного UART.Все беспроводное.Итак, Моя архитектура состоит из 3 ESP-01 и 1 NodeMcu ESP 12E.где 2 ESP-01 выступает в роли клиента.Один ESP01 действует как модератор, а NodeMcu - как сервер.Я применил следующий подход:

  1. Клиенты сначала отправят сообщение, содержащее данные датчика, модератору в виде JSON
  2. Модератор получит эти сообщения от клиентов.Thers может быть n клиентов.Затем модератор отправит эти сообщения в NodeMcu, который функционирует как сервер
  3. Сервер будет принимать только те сообщения, которые были переданы модератором.Затем сервер проанализирует JSON, полученный от модератора, и извлечет все данные датчика
  4. , вы можете выполнить эту операцию в одном цикле. Следующая часть выполняется в другом цикле
  5. подключиться к Wi-Fiи отправить данные в облако

Вы можете сослаться на это LINK

...