websocket中的esp-8266 EEPROM接口怎么做

时间:2020-01-25 04:41:22

标签: websocket esp8266 arduino-esp8266

我是初学者,如果websocket在5秒钟内未收到任何数据,那么我想在从websocket接收数据后实现EEPROM写操作,那么我通过websocket发送的要打开和关闭的值导致LED_STATE想要如果没有来自websocket的传入数据,请在5秒钟后将其写入EEPROM: 这是我的代码,如果您能帮助我解决这个问题,请谢谢。 我已根据需要进行了修改。 但如果可能,则需要EEPROM用于websocket。

B

我没有使用SPIFFS,而是用HTML调用网页

    #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;
    }

    }

请帮助在WEBSOCKET中实现EEPROM,因为如果websocket启动,只要连接客户端,它就会停留在该位置。因此,如果没有HTML网页的数据,则需要帮助在5秒钟后实现Websocket的ToggleLED状态保存数据。 请帮助,如果可能的话,谢谢大家。

0 个答案:

没有答案