22#include < SPI.h>
33#include < SD.h>
44#include < esp_sntp.h>
5+ #include < ESPmDNS.h>
56#include < list>
67#include < vector>
78
89#include < WebSocketsClient.h> /* https://github.com/Links2004/arduinoWebSockets */
910
10- #define WEBSOCKET_SERVER " 192.168.0.20 "
11+ #define WEBSOCKET_MDNS_HOSTNAME " sensorhub "
1112#define WEBSOCKET_PORT 80
1213#define WEBSOCKET_URL " /sensors"
1314#define WEBSOCKET_TIMEOUT 4000
@@ -27,6 +28,7 @@ extern void weatherDownloadTask(void *parameter);
2728extern QueueHandle_t displayQueue;
2829static TaskHandle_t displayTaskHandle = nullptr ;
2930
31+ static IPAddress websocketServerIP;
3032static WebSocketsClient webSocket;
3133static auto lastWebsocketEventMS = 0 ;
3234
@@ -202,6 +204,14 @@ static void processPayload(char *payload)
202204 }
203205}
204206
207+ static void messageOnTFT (const char *str)
208+ {
209+ displayMessage msg;
210+ msg.type = displayMessage::SYSTEM_MESSAGE;
211+ snprintf (msg.str , sizeof (msg.str ), str);
212+ xQueueSend (displayQueue, &msg, portMAX_DELAY);
213+ }
214+
205215static void webSocketEvent (WStype_t type, uint8_t *payload, size_t length)
206216{
207217 switch (type)
@@ -210,7 +220,7 @@ static void webSocketEvent(WStype_t type, uint8_t *payload, size_t length)
210220 log_i (" [WSc] Disconnected!" );
211221 break ;
212222 case WStype_CONNECTED:
213- log_i (" [WSc] Connected to ws://%s:%i%s" , WEBSOCKET_SERVER , WEBSOCKET_PORT, WEBSOCKET_URL);
223+ log_i (" [WSc] Connected to ws://%s:%i%s" , websocketServerIP. toString (). c_str () , WEBSOCKET_PORT, WEBSOCKET_URL);
214224 if (history.empty ())
215225 webSocket.sendTXT (" G:\n " );
216226 lastWebsocketEventMS = millis ();
@@ -252,13 +262,14 @@ void setup()
252262 forecasts.reserve (REQUIRED_CAPACITY);
253263 if (forecasts.capacity () != REQUIRED_CAPACITY)
254264 {
255- log_e (" could not allocate %i forecasts. halted! " , FORECASTS_MAX_ITEMS);
265+ log_e (" could not allocate %i forecasts. System halted" , FORECASTS_MAX_ITEMS);
256266 while (1 )
257267 delay (100 );
258268 }
259269
260- log_i (" connecting to %s\n " , WIFI_SSID);
270+ log_i (" connecting to %s" , WIFI_SSID);
261271
272+ WiFi.setSleep (false );
262273 WiFi.begin (WIFI_SSID, WIFI_PSK);
263274
264275 // mount sd card
@@ -285,7 +296,7 @@ void setup()
285296
286297 if (taskResult != pdPASS)
287298 {
288- log_e (" FATAL error! Could not create playerTask . System HALTED!" );
299+ log_e (" FATAL error! Could not create display task . System HALTED!" );
289300 while (1 )
290301 delay (100 );
291302 }
@@ -296,10 +307,40 @@ void setup()
296307
297308 log_i (" connected to %s" , WIFI_SSID);
298309
310+ messageOnTFT (" Searching the sensors..." );
311+
312+ if (mdns_init () != ESP_OK)
313+ {
314+ messageOnTFT (" mDNS ERROR. System halted" );
315+ while (1 )
316+ delay (100 );
317+ }
318+
319+ int ndx = MDNS.queryService (" http" , " tcp" );
320+
321+ log_i (" found %i mDNS servers" , ndx);
322+
323+ while (--ndx != -1 )
324+ {
325+ if (MDNS.hostname (ndx) == WEBSOCKET_MDNS_HOSTNAME)
326+ break ;
327+ }
328+
329+ if (ndx == -1 )
330+ {
331+ messageOnTFT (" No sensors. System halted" );
332+ while (1 )
333+ delay (100 );
334+ }
335+
336+ log_i (" sensorhub found at IP %s" , MDNS.IP (ndx).toString ().c_str ());
337+
338+ websocketServerIP = MDNS.IP (ndx);
339+
299340 sntp_set_time_sync_notification_cb ((sntp_sync_time_cb_t )ntpSynced);
300341 configTzTime (TIMEZONE, NTP_POOL);
301342
302- webSocket.begin (WEBSOCKET_SERVER , WEBSOCKET_PORT, WEBSOCKET_URL);
343+ webSocket.begin (websocketServerIP , WEBSOCKET_PORT, WEBSOCKET_URL);
303344 webSocket.onEvent (webSocketEvent);
304345 webSocket.setReconnectInterval (600 );
305346}
0 commit comments