Автоподключение веб-сокета Arduino - PullRequest
0 голосов
/ 01 ноября 2018

Я использую 2 esp8266, оба подключены к одной сети. Esp1 отправляет некоторые данные в esp2, используя websocket. Поэтому в основном esp2 подключается к esp1 websocket и читает данные. Моя проблема в том, что если esp1 перезапущен, после того, как снова, esp2 не подключается к нему и нуждается в перезагрузке для подключения Это код, который я использую на esp2

#include <ESP8266WiFi.h>
#include <WebSocketsClient.h>
#include <ESP8266WebServer.h>
#include <SoftwareSerial.h>

#define USE_SERIAL Serial
#define LEDS 0 //Status led

WebSocketsClient webSocket;
SoftwareSerial COM(5, 4); 

long previousMillis = 0;
long interval = 50;

String data;

void webSocketEvent(WStype_t type, uint8_t * payload, size_t length) {
    switch(type) {
        case WStype_DISCONNECTED:
            yield();
            break;
        case WStype_CONNECTED: {
            webSocket.sendTXT("Connected");
        }
   yield();
            break;
        case WStype_TEXT:
      if(payload[0] == '#') {
        uint32_t dataz = (uint32_t) strtol((const char *) &payload[1], NULL, 10);
        if (dataz < 99911) {
          data = "0" + String(dataz);
        }
        else {
          data = String(dataz);
        }
      }
      yield();
if (data.length() == 6 ) {
COM.print('<'); // start marker
COM.print(data);
COM.println('>'); // end marker
}
       break;
    }

}

void setup() {
  pinMode(LEDS, OUTPUT);
  digitalWrite(LEDS, LOW);
    for(uint8_t t = 4; t > 0; t--) {
        delay(1000);
    }

 WiFi.mode(WIFI_STA);
 WiFi.begin("xxx", "xxx");
 while (WiFi.status() != WL_CONNECTED)
  {
    delay(500);
  }
    // server address, port and URL
    webSocket.begin("192.168.0.30", 81, "/");

    // event handler
    webSocket.onEvent(webSocketEvent);

    // use HTTP Basic Authorization this is optional remove if not needed
    //webSocket.setAuthorization("user", "Password");

    // try ever 5000 again if connection has failed
    webSocket.setReconnectInterval(5000);
  digitalWrite(LEDS, HIGH);
}

void loop() {
  unsigned long currentMillis = millis();
  if(currentMillis - previousMillis > interval) {
        previousMillis = currentMillis;

    webSocket.loop();
  }
}

Мне понадобится помощь, чтобы восстановить соединение, когда esp1 снова станет доступен после отключения Большое спасибо

1 Ответ

0 голосов
/ 10 ноября 2018

webSocket.loop (); должно быть вне оператора if.

...