-
Notifications
You must be signed in to change notification settings - Fork 580
Closed
Description
I am working on a project where I need to open a websocket, then make an http request. Whenever I make the http request, the websocket is disconnected, and I have no idea why.
#include "./config.h"
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <ESP8266HTTPClient.h>
#include <WebSocketsClient.h>
#include <ArduinoJson.h>
ESP8266WiFiMulti WiFiMulti;
WebSocketsClient webSocket;
long nextCmdId = 1;
bool connected = false;
unsigned long lastPing = 0;
void sendPing() {
DynamicJsonBuffer jsonBuffer;
JsonObject& root = jsonBuffer.createObject();
root["type"] = "ping";
root["id"] = nextCmdId++;
String json;
root.printTo(json);
webSocket.sendTXT(json);
}
void webSocketEvent(WStype_t type, uint8_t *payload, size_t len) {
switch (type) {
case WStype_DISCONNECTED:
Serial.printf("[WebSocket] Disconnected\n");
connected = false;
break;
case WStype_CONNECTED:
Serial.printf("[WebSocket] Connected to: %s\n", payload);
sendPing();
makeTestRequest();
break;
case WStype_TEXT:
Serial.printf("[WebSocket] Message: %s\n", payload);
break;
}
}
bool connectToWebSocket() {
HTTPClient http;
http.begin(START_ENDPOINT, SSL_FINGERPRINT);
http.addHeader("Authorization", AUTH_HEADER);
int httpCode = http.GET();
if (httpCode != HTTP_CODE_OK) {
Serial.printf("HTTP GET failed with code %d\n", httpCode);
http.end();
return false;
}
WiFiClient *client = http.getStreamPtr();
client->find("wss:\\/\\/");
String host = client->readStringUntil('\\');
String path = client->readStringUntil('"');
path.replace("\\/", "/");
Serial.println("WebSocket Host=" + host + " Path=" + path);
webSocket.beginSSL(host, 443, path, "", "");
webSocket.onEvent(webSocketEvent);
http.end();
return true;
}
bool makeTestRequest() {
HTTPClient http;
http.begin(TEST_ENDPOINT, SSL_FINGERPRINT);
http.addHeader("Authorization", AUTH_HEADER);
int httpCode = http.GET();
Serial.printf("Test Request HTTP Code: %d\n", httpCode);
http.end();
return httpCode == HTTP_CODE_OK;
}
void setup() {
Serial.begin(115200);
Serial.setDebugOutput(true);
WiFiMulti.addAP(WIFI_SSID, WIFI_PASSWORD);
while (WiFiMulti.run() != WL_CONNECTED) {
delay(100);
}
configTime(3 * 3600, 0, "pool.ntp.org", "time.nist.gov");
}
void loop() {
webSocket.loop();
if (connected) {
if (millis() - lastPing > 5000) {
sendPing();
lastPing = millis();
}
} else {
connected = connectToWebSocket();
if (!connected) {
delay(500);
}
}
}Metadata
Metadata
Assignees
Labels
No labels