6
6
#include < DHT_U.h>
7
7
#include " secrets.h"
8
8
#include " config.h"
9
+ #include " icons.h"
9
10
10
11
#ifdef SD_ENABLED
11
12
#include < SPI.h>
12
13
#include < SD.h>
13
14
File oSDFile;
14
- String sSSID = " " ;
15
- String sPSK = " " ;
16
15
#endif
17
16
18
17
// Variables for WiFi Connection.
19
18
int iWiFiStatus = WL_IDLE_STATUS;
20
19
WiFiServer oServer (80 );
21
20
IPAddress WIFI_IP;
22
21
char cClientData;
22
+ int iSSIDLen = 0 ;
23
+ int iPSKLen = 0 ;
24
+ int iWiFiSignal = -100 ;
25
+ String sSSID = " " ;
26
+ String sPSK = " " ;
23
27
24
28
// OLED Display.
25
29
Adafruit_SSD1306 display (SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
@@ -38,6 +42,8 @@ long lUpdateInterval = 2000;
38
42
long lNow = 0 ;
39
43
long lLastSensorUpdate = 0 ;
40
44
long lSensorInterval = 5000 ;
45
+ long lLastWiFiCheck = 0 ;
46
+ long lWiFiInterval = 5000 ;
41
47
42
48
// Setup all components and connect to WiFi.
43
49
void setup () {
@@ -87,10 +93,10 @@ void setup() {
87
93
oSDFile.close ();
88
94
89
95
// Process/Convert strings from config-file.
90
- int iSSIDLen = sSSID .length ();
96
+ iSSIDLen = sSSID .length ();
91
97
char aSSID[iSSIDLen];
92
98
sSSID .toCharArray (aSSID, iSSIDLen);
93
- int iPSKLen = sPSK .length ();
99
+ iPSKLen = sPSK .length ();
94
100
char aPSK[iPSKLen];
95
101
sPSK .toCharArray (aPSK, iPSKLen);
96
102
@@ -119,6 +125,10 @@ void setup() {
119
125
// If SD-Card is not enabled, use settings from config.h and secrets.h
120
126
char aSSID[] = SECRET_SSID;
121
127
char aPSK[] = SECRET_PASS;
128
+ sSSID = SECRET_SSID;
129
+ sPSK = SECRET_PASS;
130
+ iSSIDLen = sSSID .length ();
131
+ iPSKLen = sPSK .length ();
122
132
display.print (F (" SSID: " ));
123
133
display.println (SECRET_SSID);
124
134
#endif
@@ -166,6 +176,12 @@ void setup() {
166
176
void loop () {
167
177
lNow = millis ();
168
178
179
+ // Check WiFi status after timeout.
180
+ if (lNow >= lLastWiFiCheck + lWiFiInterval) {
181
+ checkWiFi ();
182
+ lLastWiFiCheck = lNow;
183
+ }
184
+
169
185
// Update sensor data after refresh-timeout.
170
186
if (lNow >= lLastSensorUpdate + lSensorInterval || lLastSensorUpdate == 0 ) {
171
187
refreshSensorValues ();
@@ -234,6 +250,26 @@ void loop() {
234
250
}
235
251
}
236
252
253
+ // Check WiFi Status and Reconnect if necessary.
254
+ void checkWiFi () {
255
+ iWiFiStatus = WiFi.status ();
256
+ if (iWiFiStatus != WL_CONNECTED) {
257
+ display.fillRect (0 ,0 ,128 ,7 ,SSD1306_BLACK);
258
+ display.setCursor (0 , 0 );
259
+ display.setTextSize (1 );
260
+ display.print (F (" Reconnecting..." ));
261
+ display.display ();
262
+
263
+ char aSSID[iSSIDLen];
264
+ sSSID .toCharArray (aSSID, iSSIDLen);
265
+
266
+ char aPSK[iPSKLen];
267
+ sPSK .toCharArray (aPSK, iPSKLen);
268
+
269
+ iWiFiStatus = WiFi.begin (aSSID, aPSK);
270
+ }
271
+ }
272
+
237
273
// Wipe Screen
238
274
void blackoutScreen () {
239
275
display.fillRect (0 ,0 ,128 ,64 ,SSD1306_BLACK);
@@ -243,13 +279,46 @@ void blackoutScreen() {
243
279
// Print WiFi Status on Display.
244
280
void printWiFiStatus () {
245
281
display.setTextSize (1 );
246
- display.setCursor (0 ,0 ); // Start at top-left corner
247
- display.println (SECRET_SSID);
248
- display.print (" IP: " );
249
- display.println (WIFI_IP);
250
- display.print (" Signal: " );
251
- display.print (WiFi.RSSI ());
252
- display.println (" dBm" );
282
+ display.setCursor (0 ,0 );
283
+
284
+ if (iWiFiStatus == WL_CONNECTED) {
285
+ display.print (F (" IP: " ));
286
+ display.println (WIFI_IP);
287
+ }
288
+ else
289
+ {
290
+ display.print (F (" DISCONNECTED (" ));
291
+ display.print (iWiFiStatus);
292
+ display.print (F (" )" ));
293
+ }
294
+
295
+ display.setCursor (0 ,8 );
296
+ iWiFiSignal = WiFi.RSSI ();
297
+
298
+ // Print Signal-Status as Signal-Bar if WIFI_SIGNAL_BAR is defined.
299
+ #ifdef WIFI_SIGNAL_BAR
300
+ if (iWiFiSignal <= -80 ||iWiFiSignal == 0 ) {
301
+ // No signal, so nothing to show except an error...
302
+ display.drawBitmap (111 , 29 , icWarning, 16 , 16 , 1 );
303
+ }
304
+ else if (iWiFiSignal <= -70 ) {
305
+ display.drawBitmap (111 , 27 , icWIFI1, 16 , 16 , 1 );
306
+ }
307
+ else if (iWiFiSignal <= -60 ) {
308
+ display.drawBitmap (111 , 27 , icWIFI2, 16 , 16 , 1 );
309
+ }
310
+ else if (iWiFiSignal <= -50 ) {
311
+ display.drawBitmap (111 , 27 , icWIFI3, 16 , 16 , 1 );
312
+ }
313
+ else {
314
+ display.drawBitmap (111 , 27 , icWIFI4, 16 , 16 , 1 );
315
+ }
316
+ #else
317
+ // Print Signal-Status as Text if WIFI_SIGNAL_BAR is commented out.
318
+ display.print (F (" Signal: " ));
319
+ display.print (iWiFiSignal);
320
+ display.println (F (" dBm" ));
321
+ #endif
253
322
}
254
323
255
324
// Refresh Sensor-Values from DHT sensor.
@@ -279,23 +348,26 @@ void refreshSensorValues() {
279
348
}
280
349
281
350
// Print Sensor Values on Display.
282
- void printSensorValues () {
351
+ void printSensorValues () {
352
+ display.drawBitmap (0 , 30 , icTemperature, 16 , 16 , 1 );
353
+ display.drawBitmap (0 , 46 , icHumidity, 16 , 16 , 1 );
354
+
283
355
display.setTextSize (2 );
284
- display.setCursor (0 , 34 );
356
+ display.setCursor (18 , 30 );
285
357
286
358
if (bHasTemp) {
287
359
display.print (fRealTemp );
288
360
}
289
361
else {
290
362
display.print (F (" EE" ));
291
363
}
292
- display.println (" *C" );
293
-
364
+
365
+ display.setCursor (18 , 46 );
366
+
294
367
if (bHasHumid) {
295
368
display.print (fRealHumid );
296
369
}
297
370
else {
298
371
display.print (F (" EE" ));
299
372
}
300
- display.println (" %" );
301
373
}
0 commit comments