esp-8266 интерфейс EEPROM в websocket как это сделать - PullRequest
0 голосов
/ 25 января 2020

Я на начальном уровне, и я хотел реализовать запись EEPROM после получения данных из веб-сокета, если веб-сокет не получает никаких данных в течение 5 секунд, то значение, которое я отправил через веб-сокет для включения и выключения, привело сюда LED_STATE хочу: запишите его в EEPROM через 5 секунд, если из websocket не будет поступать никаких данных: Вот мой код, пожалуйста, если вы можете помочь мне решить эту проблему, спасибо. Я изменил согласно моей необходимости. но требуется EEPROM для веб-сокета, если это возможно.

    #include <ESP8266WiFi.h>
    #include <WebSocketsServer.h>

    #include <Hash.h>
    #include <ESP8266WebServer.h>
    #include <EEPROM.h>

    WiFiServer server(80);
    WebSocketsServer webSocket = WebSocketsServer(81);

    const int pin_led = 5;
    unsigned int value;
    String data;
    const char *msg_toggle_led = "toggleLED";
    const char *msg_get_led = "getLEDState";
    char msg_buf[10];
    int led_state = 0;
    int counter = 0; // for EEPROM testing

    char* ssid = "esp8266websocket_1";
    char* password = "123456789";

    void setup()
    {
    // EEPROM.begin(512);
    pinMode(pin_led, OUTPUT);
    digitalWrite(pin_led,LOW);

    Serial.begin(115200);
    Serial.println();
    Serial.println("Serial started at 115200");
    Serial.println();

    // Connect to a WiFi network
    Serial.print(F("Connecting to ")); Serial.println(ssid);
    WiFi.mode(WIFI_AP);
    IPAddress apLocalIp(10,50,1,1);
    IPAddress apSubnetMask(255,255,255,0);
    WiFi.softAPConfig(apLocalIp,apLocalIp,apSubnetMask);
    WiFi.softAP(ssid, password);
    WiFi.setSleepMode(WIFI_NONE_SLEEP);

    Serial.println("");
    Serial.println(F("[CONNECTED]")); Serial.print("[IP "); Serial.print(WiFi.localIP());
    Serial.println("]");

    // start a server
    server.begin();
    Serial.println("Server started");
    webSocket.begin();
    webSocket.onEvent(onWebSocketEvent);
    //Serial.print(webSocket.localIP());

    }

    void loop()
    {
    webSocket.loop();

    }

    // Called when receiving any WebSocket message
    void onWebSocketEvent(uint8_t client_num,
    WStype_t type,
    uint8_t * payload,
    size_t length) {

    // Figure out the type of WebSocket event
    switch(type) {

    // Client has disconnected
    case WStype_DISCONNECTED:
      Serial.printf("[%u] Disconnected!\n", client_num);
      break;

    // New client has connected
    case WStype_CONNECTED:
      {
        IPAddress ip = webSocket.remoteIP(client_num);
        Serial.printf("[%u] Connection from ", client_num);
        Serial.println(ip.toString());
      }
      break;

    // Echo text message back to client
    case WStype_TEXT:
      Serial.printf("[%u] Text: %s\n", client_num, payload);
      webSocket.sendTXT(client_num, payload);
     // data = webSocket.getData(payload);

      Serial.printf("[%u] Received text: %s\n", client_num, payload);

      // Toggle LED
      if ( strcmp((char *)payload, "toggleLED") == 0 ) {
        counter++;
        led_state = led_state ? 0 : 1;
        //sprintf(msg_buf, "%d", led_state);
        Serial.printf("Toggling LED to %u\n", led_state);
        digitalWrite(pin_led, led_state);
       // webSocket.sendTXT(client_num, msg_buf);

      // Report the state of the LED
      } else if ( strcmp((char *)payload, "getLEDState") == 0 ) {
        sprintf(msg_buf, "%d", led_state);
        Serial.printf("Sending to [%u]: %s\n", client_num, msg_buf);
        webSocket.sendTXT(client_num, msg_buf);

      // Message not recognized
      } else {
        Serial.println("[%u] Message not recognized");
      }
      break;

    // For everything else: do nothing
    case WStype_BIN:
    case WStype_ERROR:
    case WStype_FRAGMENT_TEXT_START:
    case WStype_FRAGMENT_BIN_START:
    case WStype_FRAGMENT:
    case WStype_FRAGMENT_FIN:
    default:
      break;
    }

    }

Я не использую SPIFFS, я вызываю веб-страницу в HTML, которая

    <style>
    input[type="text"]{
    width: 90%;
    height: 3vh;
    }

    input[type="button"]{
    width: 9%;
    height: 3.6vh;
    }

    .rxd{
    height: 90vh;
    }

    textarea {
    width: 99%;
    height: 100%;
    resize: none;
    }

    </style> <script> var Socket; function start() { Socket = new WebSocket('ws://10.50.1.1:81/'); Socket.onmessage = function(evt) { document.getElementById("rxConsole").value += evt.data; } } function enterpressed() { Socket.send(document.getElementById("txbuff").value); document.getElementById("txbuff").value = ""; } </script>

    <textarea id="rxConsole" readonly></textarea>

, пожалуйста, помогите реализовать EEPROM в WEBSOCKET, потому что если websocket запускается и остается там до тех пор, пока клиенты подключены. поэтому нужна помощь для реализации websocket для сохранения состояния ToggleLED через 5 секунд, если данные не поступают с веб-страницы html. Пожалуйста, помогите, если это возможно, спасибо всем.

...