тип веб-сокетов esp8266 == WStype_TEXT всегда является ложным, даже если я отправляю данные

#websocket #esp8266

#websocket #esp8266

Вопрос:

Я пытаюсь обслуживать веб-страницу с цветовым кругом. Когда пользователь меняет цвет на колесе, я хочу отправить новое значение rgb в esp, но код в esp никогда не вводится

 if(type == WStype_TEXT)
 

Серверная часть (код esp8266):

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

#include "index.h"

const char* WiFissid = "ssid";
const char* WiFiPassword = "password";
const int WebServerPort = port;
const int WebSocketsPort = port;

ESP8266WebServer WebServer(WebServerPort);
WebSocketsServer WebSockets = WebSocketsServer(WebSocketsPort);

const int RedPin = 13;
const int GreenPin = 12;
const int BluePin = 14; 

const int Resolution = 256;
int RedValue = 0;
int GreenValue = 0;
int BlueValue = 255;


/* Serve Web Page */

void ServeMainPage()
{
  WebServer.send(200, "text/html", MainPage);
}

/* Web Sockets Get Input */

void WebSocketsGetData(uint8_t num, WStype_t type, uint8_t * payload, size_t length)
{
  if(type == WStype_CONNECTED)
  {
    IPAddress ip = WebSockets.remoteIP(num);
    Serial.println(String(ip[0])   String(ip[1])    String(ip[2])   String(ip[3]));
    String _payload = String((char *) amp;payload[0]);
    Serial.println(_payload);
  }
  else if(type == WStype_TEXT)
  {
    String _payload = String((char *) amp;payload[0]);
    Serial.println(_payload); 
  }
  else if(type == WStype_DISCONNECTED)
  {
    Serial.println("Client disconnected");
  }
}

/* Setup */

void setup() 
{
  /* Map Pins and Set Default Color */
  
  analogWriteRange(Resolution);
  analogWrite(RedPin, RedValue);
  analogWrite(GreenPin, GreenValue);
  analogWrite(BluePin, BlueValue);
  
  /* Start Serial */
    
  Serial.begin(9600);

  /* Connect to WiFi */
  WiFi.mode(WIFI_STA);
  WiFi.begin(WiFissid, WiFiPassword);
  
  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
  }

  Serial.println(WiFi.localIP());

  /* Start and Config Web Server */
 
  WebServer.on("/", ServeMainPage);
  WebServer.begin();

  /* Start and Config Web Sockets Server */
  WebSockets.onEvent(WebSocketsGetData); 
  WebSockets.begin(); 

  
}

void loop()
{
  WebServer.handleClient();
  WebSockets.loop();
}
 

index.h:

     const char MainPage[] PROGMEM = R"=====(
<!DOCTYPE html>

<html>
    <head>
        <meta name = "viewport" content = "width=device-width, initial-scale=1">
        <meta charset="UTF-8">

        <link rel = "stylesheet" href = "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css">
        <script src = "https://cdnjs.cloudflare.com/ajax/libs/jscolor/2.0.4/jscolor.min.js"></script>
        <script src = "https://cdn.jsdelivr.net/npm/@jaames/iro"></script>
    
        <title>Leduri Rares</title>
    </head>

    <body>
        <div class = "container-fluid">
            <div class = "row">
                <div class = "wheel" id = "ColorWheel"></div>
            </div>
        </div>
    </body>
</html>

<style>
    body
    {
        background-color: #000000;
        overflow-x: hidden;
    }

    h1 
    {
        color: white;
    }

    .container-fluid
    {
        margin-top: 5%;
    }

    .row
    {
        text-align: center;
    }

    #ColorWheel
    {
        margin: 0 auto;
    }

    @media only screen and (max-width: 800px) 
    {
        .container-fluid
        {
            margin-top: 10%;
        }

        #ColorWheel
        {
            margin: 5% auto;
        }
    }
</style>

<script>
    let Socket = new WebSocket("wss://myIP:WSPort");

    Socket.onclose = function(event) 
    {
        if (event.wasClean) 
        {
            alert("Connection with the server was closed smoothly");
        } else 
        {
            alert("Connection with the server was closed unexpectedly");
        }
    };

    Socket.onerror = function(error) 
    {
        alert("Connection Error: "   String(error.message));
    };

    var colorWheel = new iro.ColorPicker("#ColorWheel",
    {
        color: "rgb(255, 255, 255)",
        borderWidth: 2,
        borderColor: '#ffffff',
        width: 275,
    });

    colorWheel.on('color:change', function(color, changes)
    {
        var Color = colorWheel.color.rgb;
        
        let ColorsJSON = { 
            Red: Color.r, 
            Green: Color.g,
            Blue: Color.b 
        };
        
        Socket.send(JSON.stringify(ColorsJSON));
    });
</script>
)=====";
 

Я новичок в программировании, и у меня нет идеи, почему это не работает, любая помощь приветствуется!

Ответ №1:

Ваш ESP8266 skecth в порядке. Только что протестировано с моим собственным клиентом. Дважды проверьте свой index.h или замените его простым для целей тестирования.

Комментарии:

1. Я понял это, я написал wss вместо ws на интерфейсе, чтобы соединение было безопасным, даже если у меня нет сертификата ssl, это небольшая ошибка, но из-за нее все это не сработало, большое спасибо за ваше время