Клиент Websocket на ESP8266 не отправляет данные на сервер весенней загрузки - PullRequest
0 голосов
/ 04 июня 2019

У меня есть простой проект с ESP8266 и пружинным загрузочным сервером.И я хочу отправить данные из ESP на сервер через websocket.

В ESP я использую эту библиотеку для создания клиента Stomp: https://github.com/ukmaker/StompClient

Spring Boot ws config:

    @Override
    public void configureMessageBroker(MessageBrokerRegistry config) {
        config.setApplicationDestinationPrefixes("/esp");
    }

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/gs-guide-websocket").setAllowedOrigins("*").withSockJS();
    }

Контроллер WS:

    @MessageMapping("/sensors")
    @CrossOrigin("*")
    public WsModel resendData(WsModel wsModel) {
        return wsModel;
    }

ESP8266:

#include "ESP8266WiFi.h"
#include <WebSocketsClient.h>
#include "StompClient.h"

const char* wlan_ssid = "******";
const char* wlan_password = "******";

const char* ws_host = "localhost";
const int ws_port = 9091;
const char* ws_baseurl = "/gs-guide-websocket"; 

WebSocketsClient  webSocket;

Stomp::StompClient stomper(webSocket, ws_host, ws_port, ws_baseurl, true);

void setup(void)
{ 
  Serial.begin(115200);
  WiFi.begin(wlan_ssid, wlan_password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
  }

  ...some code

  stomper.begin();
}

void loop() {
  webSocket.loop();
  stomper.sendMessage("/esp/sensors", "{\"name\":\"test\"}");
}

У меня нет сообщений об ошибках.Он просто не отправляет никаких данных.

1 Ответ

0 голосов
/ 07 июня 2019

Обращаясь к примерам библиотеки StompClient SpringStompButtons.ino , мы можем увидеть комментарий:

const char * ws_baseurl = "/ esp-websocket /";// не забывайте начальные и конечные "/" !!!

В файле StompClient.h в реализации sockJs есть:

  if (_sockjs) {
    socketUrl += random(0, 999);
    socketUrl += "/";
    socketUrl += random(0, 999999); // should be a random string, but this works (see )
    socketUrl += "/websocket";
  }

Затем вы должны изменить URL-адрес сокета на:

const char* ws_baseurl = "/gs-guide-websocket/"; 

или отключить создание stomp-клиента sockJS с помощью:

Stomp::StompClient stomper(webSocket, ws_host, ws_port, ws_baseurl, false);
...