Hi,
I've decided to move away from ajax and use websockets for a project.
My starting point is the STM32-Ethernet_ServerAllFunctionsDemo using a W5500 and Blackpill F411.
The code builds ok and runs on the target, at boot up I see this from the serial port.
WebSockets Server IP address: 192.168.1.173
WebSockets Server Running and Ready on BLACKPILL_F411CE
IP address: 192.168.1.173, Port: 8080
when I connect using a browser I see this from the serial debug
Connecting wsServer: ws://192.168.1.23:8080/
but after about 30 seconds it reports failed in the browser tools window.
I suspect I have the syntax slightly wrong in this line:
var connection = "ws://192.168.1.23:8080" ;
websocket = new WebSocket(connection);
I've also tried the following
var connection = new WebSocket("ws://"+location.hostname+":8080/", ["arduino"]);
I've tried many variations of syntax some of which fail immediately and others which fail after 30 seconds or so.
These are my includes, the webpage.h contains the code which is sent to the browser - seems to get there ok. Easier to edit rather than one long line as per the example.
#include "defines.h"
#include <WebSockets2_Generic.h>
#include <EthernetWebServer_STM32.h>
#include "webpage.h"
using namespace websockets2_generic;
WebsocketsServer SocketsServer;
#define WEBSOCKETS_PORT 8080
So close but so far - any help /ideas on how to debug greatly appreciated.
Regards Tim
Ok - as usual as soon as I post a question I manage to make progess,
using this line
var connection = new WebSocket("ws://"+location.hostname + ":8080" );
Results in this from the serial port
Connecting wsServer: ws://192.168.1.23:8080/
HTML sent
[WS] WebsocketsServer::recvHandshakeRequest: key = Host
[WS] WebsocketsServer::recvHandshakeRequest: value = 192.168.1.173:8080
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = host
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = 192.168.1.173:8080
[WS] WebsocketsServer::recvHandshakeRequest: key = Connection
[WS] WebsocketsServer::recvHandshakeRequest: value = Upgrade
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = connection
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = upgrade
[WS] WebsocketsServer::recvHandshakeRequest: key = Pragma
[WS] WebsocketsServer::recvHandshakeRequest: value = no-cache
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = pragma
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = no-cache
[WS] WebsocketsServer::recvHandshakeRequest: key = Cache-Control
[WS] WebsocketsServer::recvHandshakeRequest: value = no-cache
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = cache-control
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = no-cache
[WS] WebsocketsServer::recvHandshakeRequest: key = User-Agent
[WS] WebsocketsServer::recvHandshakeRequest: value = Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML
, like Gecko) Chrome/118.0.0.0 Safari/537.36
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = user-agent
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = mozilla/5.0 (windows nt 10.0; win64; x64) applewebkit/537.36 (kh
tml, like gecko) chrome/118.0.0.0 safari/537.36
[WS] WebsocketsServer::recvHandshakeRequest: key = Upgrade
[WS] WebsocketsServer::recvHandshakeRequest: value = websocket
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = upgrade
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = websocket
[WS] WebsocketsServer::recvHandshakeRequest: key = Origin
[WS] WebsocketsServer::recvHandshakeRequest: value = http://192.168.1.173
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = origin
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = http://192.168.1.173
[WS] WebsocketsServer::recvHandshakeRequest: key = Sec-WebSocket-Version
[WS] WebsocketsServer::recvHandshakeRequest: value = 13
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = sec-websocket-version
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = 13
[WS] WebsocketsServer::recvHandshakeRequest: key = Accept-Encoding
[WS] WebsocketsServer::recvHandshakeRequest: value = gzip, deflate
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = accept-encoding
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = gzip, deflate
[WS] WebsocketsServer::recvHandshakeRequest: key = Accept-Language
[WS] WebsocketsServer::recvHandshakeRequest: value = en-GB,en-US;q=0.9,en;q=0.8
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = accept-language
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = en-gb,en-us;q=0.9,en;q=0.8
[WS] WebsocketsServer::recvHandshakeRequest: key = Sec-WebSocket-Key
[WS] WebsocketsServer::recvHandshakeRequest: value = RbwGt6to72+nIVwH/UnW/Q==
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = sec-websocket-key
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = RbwGt6to72+nIVwH/UnW/Q==
[WS] WebsocketsServer::recvHandshakeRequest: key = Sec-WebSocket-Extensions
[WS] WebsocketsServer::recvHandshakeRequest: value = permessage-deflate; client_max_window_bits
[WS] WebsocketsServer::recvHandshakeRequest: lowkey = sec-websocket-extensions
[WS] WebsocketsServer::recvHandshakeRequest: lowvalue = permessage-deflate; client_max_window_bits
Got Message: Connect Sun Oct 29 2023 18:14:21 GMT+0000 (Greenwich Mean Time)
But when I move a slider the browser tool reports
WebSocket is already in CLOSING or CLOSED state.
So not quite there yet .....
Edit the problem is in the main loop where the connection gets closed after each message
void loop()
{
server.handleClient();
client = new WebsocketsClient;
if (client)
{
*client = SocketsServer.accept();
if (client->available())
{
WebsocketsMessage msg = client->readNonBlocking();
// log
Serial2.print("Got Message: ");
Serial2.println(msg.data());
// return echo
client->send("Echo: " + msg.data());
// close the connection
client->close();
}
delete client;
}
}
So now I think I know the problem just a matter of how to fix it ??
Ok, I'm out of my depth (again) - I think I need some sort of handler / control to keep the connection open and pass data to / from client.
There's lots of info about how to do this using esp82 devices but not much for STM32F4 series especially as I'm using websockets2generic.
Does anyone have some sample code or other starting point to get me over this hurdle ?
Regards Tim
system
Closed
April 27, 2024, 3:06pm
4
This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.