|
@@ -10,283 +10,324 @@
|
|
#include "max7219.h"
|
|
#include "max7219.h"
|
|
#include "webserver.h"
|
|
#include "webserver.h"
|
|
|
|
|
|
-DHT dht (DHT_PIN, DHT22);
|
|
|
|
|
|
+DHT dht(DHT_PIN, DHT22);
|
|
|
|
|
|
Timer procTimer, procRTimer;
|
|
Timer procTimer, procRTimer;
|
|
Timer displayTimer, tmpTimer;
|
|
Timer displayTimer, tmpTimer;
|
|
|
|
+Timer showHighTimer, showLowTimer;
|
|
|
|
|
|
// Sensors values
|
|
// Sensors values
|
|
float SensorT, SensorH, SensorHI, SensorCR;
|
|
float SensorT, SensorH, SensorHI, SensorCR;
|
|
String StrCF;
|
|
String StrCF;
|
|
// Time values
|
|
// Time values
|
|
time_t Time, NTPLastUpdate;
|
|
time_t Time, NTPLastUpdate;
|
|
|
|
+DateTime dt;
|
|
|
|
|
|
-void process ();
|
|
|
|
-void connectOk ();
|
|
|
|
-void connectFail ();
|
|
|
|
-void showTime ();
|
|
|
|
|
|
+void process(void);
|
|
|
|
+void connectOk(void);
|
|
|
|
+void connectFail(void);
|
|
|
|
+void showWatch(void);
|
|
|
|
+void showTime(void);
|
|
|
|
+void showTemperature(void);
|
|
|
|
+void showHumidity(void);
|
|
|
|
|
|
// NTP Client
|
|
// NTP Client
|
|
void
|
|
void
|
|
-onNtpReceive (NtpClient& client, time_t timestamp);
|
|
|
|
-NtpClient ntpClient ("ntps1-0.cs.tu-berlin.de", 300, onNtpReceive);
|
|
|
|
|
|
+onNtpReceive(NtpClient& client, time_t timestamp);
|
|
|
|
+NtpClient ntpClient("ntps1-0.cs.tu-berlin.de", 300, onNtpReceive);
|
|
|
|
|
|
-void
|
|
|
|
-init ()
|
|
|
|
|
|
+void init()
|
|
{
|
|
{
|
|
- spiffs_mount (); // Mount file system, in order to work with files
|
|
|
|
|
|
+ spiffs_mount(); // Mount file system, in order to work with files
|
|
|
|
|
|
- Serial.begin (SERIAL_BAUD_RATE); // 115200 by default
|
|
|
|
- Serial.systemDebugOutput (false); // Debug output to serial
|
|
|
|
- Serial.println ("Wall Segment Clock");
|
|
|
|
|
|
+ Serial.begin(SERIAL_BAUD_RATE); // 115200 by default
|
|
|
|
+ Serial.systemDebugOutput(false); // Debug output to serial
|
|
|
|
+ Serial.println("Wall Segment Clock");
|
|
|
|
|
|
- ActiveConfig = loadConfig ();
|
|
|
|
|
|
+ ActiveConfig = loadConfig();
|
|
|
|
|
|
- //wait for sensor startup
|
|
|
|
- delay (1000);
|
|
|
|
- // DHT sensor start
|
|
|
|
- dht.begin ();
|
|
|
|
|
|
+ // set timezone hourly difference to UTC
|
|
|
|
+ SystemClock.setTimeZone(ActiveConfig.AddTZ);
|
|
|
|
|
|
- // set timezone hourly difference to UTC
|
|
|
|
- SystemClock.setTimeZone (ActiveConfig.AddTZ);
|
|
|
|
|
|
+ WifiStation.config(ActiveConfig.NetworkSSID, ActiveConfig.NetworkPassword);
|
|
|
|
+ WifiStation.enable(true);
|
|
|
|
+ WifiAccessPoint.enable(false);
|
|
|
|
|
|
- WifiStation.config (ActiveConfig.NetworkSSID, ActiveConfig.NetworkPassword);
|
|
|
|
- WifiStation.enable (true);
|
|
|
|
- WifiAccessPoint.enable (false);
|
|
|
|
|
|
+ WifiStation.waitConnection(connectOk, 20, connectFail); // We recommend 20+ seconds for connection timeout at start
|
|
|
|
|
|
- WifiStation.waitConnection (connectOk, 20, connectFail); // We recommend 20+ seconds for connection timeout at start
|
|
|
|
|
|
+ // DHT sensor start
|
|
|
|
+ dht.begin();
|
|
|
|
|
|
- // опрос датчиков -- раз в минуту?
|
|
|
|
- procTimer.initializeMs (60000, process).start ();
|
|
|
|
- process ();
|
|
|
|
|
|
+ // опрос датчиков -- раз в минуту?
|
|
|
|
+ procTimer.initializeMs(60000, process).start();
|
|
|
|
+ process();
|
|
|
|
|
|
- // 7-segment output
|
|
|
|
- MAX7219_Init ();
|
|
|
|
- tmpTimer.initializeMs(10, MAX7219_FillMinus).startOnce();
|
|
|
|
|
|
+ // 7-segment output
|
|
|
|
+ MAX7219_Init();
|
|
|
|
+ tmpTimer.initializeMs(10, MAX7219_FillMinus).startOnce();
|
|
|
|
|
|
- // обновление экрана два раза в секунду
|
|
|
|
- displayTimer.initializeMs (500, showTime).start ();
|
|
|
|
|
|
+ // обновление экрана два раза в секунду
|
|
|
|
+ displayTimer.initializeMs(500, showWatch).start();
|
|
}
|
|
}
|
|
|
|
|
|
-void
|
|
|
|
-showTime ()
|
|
|
|
|
|
+void showWatch()
|
|
|
|
+{
|
|
|
|
+ static uint8_t oldHour, oldMinute, old_si;
|
|
|
|
+ static time_t oldTime;
|
|
|
|
+
|
|
|
|
+ Time = SystemClock.now();
|
|
|
|
+
|
|
|
|
+ dt.setTime(Time);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * теперь в dt у нас следующее:
|
|
|
|
+ * int8_t Hour;
|
|
|
|
+ * int8_t Minute;
|
|
|
|
+ * int8_t Second;
|
|
|
|
+ * int16_t Milliseconds;
|
|
|
|
+ * int8_t Day;
|
|
|
|
+ * int8_t DayofWeek; -- Sunday is day 0
|
|
|
|
+ * int8_t Month; // Jan is month 0
|
|
|
|
+ * int16_t Year; // Full Year numer
|
|
|
|
+ */
|
|
|
|
+ uint8_t si = dt.Second / 5;
|
|
|
|
+ /*
|
|
|
|
+ * 0 - Temp
|
|
|
|
+ * 1 - Humidity
|
|
|
|
+ * 2 - Temp
|
|
|
|
+ * 3 - Humidity
|
|
|
|
+ * 4 - Temp
|
|
|
|
+ * 5 - Humidity
|
|
|
|
+ * 6 - Temp
|
|
|
|
+ * 7 - Humidity
|
|
|
|
+ * 8 - Temp
|
|
|
|
+ * 9 - Humidity
|
|
|
|
+ * 10 - Temp
|
|
|
|
+ * 11 - Humidity
|
|
|
|
+ */
|
|
|
|
+ if (oldTime == Time)
|
|
|
|
+ {
|
|
|
|
+ // time the same, output blank for [HH MM]
|
|
|
|
+ if (si != 5 || si != 11)
|
|
|
|
+ {
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT2, SYM_BLANK);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ oldTime = Time;
|
|
|
|
+
|
|
|
|
+ if (oldMinute != dt.Minute)
|
|
|
|
+ {
|
|
|
|
+ oldMinute = dt.Minute;
|
|
|
|
+
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT3, dt.Minute / 10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT4, dt.Minute % 10);
|
|
|
|
+
|
|
|
|
+ if (oldHour != dt.Hour)
|
|
|
|
+ {
|
|
|
|
+ oldHour = dt.Hour;
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT0, dt.Hour / 10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT1, dt.Hour % 10);
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT2, SYM_Minus);
|
|
|
|
+
|
|
|
|
+ if (old_si != si)
|
|
|
|
+ {
|
|
|
|
+ old_si = si;
|
|
|
|
+
|
|
|
|
+ switch (si)
|
|
|
|
+ {
|
|
|
|
+ case 0:
|
|
|
|
+ showLowTimer.initializeMs(10, showTemperature).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ case 1:
|
|
|
|
+ showLowTimer.initializeMs(10, showHumidity).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ case 2:
|
|
|
|
+ showLowTimer.initializeMs(10, showTemperature).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ case 3:
|
|
|
|
+ showLowTimer.initializeMs(10, showHumidity).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ case 4:
|
|
|
|
+ showLowTimer.initializeMs(10, showTemperature).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ case 5:
|
|
|
|
+ showLowTimer.initializeMs(10, showHumidity).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ case 6:
|
|
|
|
+ showLowTimer.initializeMs(10, showTemperature).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ case 7:
|
|
|
|
+ showLowTimer.initializeMs(10, showHumidity).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ case 8:
|
|
|
|
+ showLowTimer.initializeMs(10, showTemperature).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ case 9:
|
|
|
|
+ showLowTimer.initializeMs(10, showHumidity).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ case 10:
|
|
|
|
+ showLowTimer.initializeMs(10, showTemperature).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ case 11:
|
|
|
|
+ showLowTimer.initializeMs(10, showHumidity).startOnce();
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Выводим текущее время [HH MM] на верхние индикаторы
|
|
|
|
+ */
|
|
|
|
+void showTime(void)
|
|
|
|
+{
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT0, dt.Hour / 10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT1, dt.Hour % 10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT3, dt.Minute / 10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT4, dt.Minute % 10);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Выводим температуру на нижние индикаторы
|
|
|
|
+ */
|
|
|
|
+void showTemperature(void)
|
|
|
|
+{
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT5, (int) (SensorT) / 10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT6, (int) (SensorT) % 10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT7, SYM_Temp);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+/*
|
|
|
|
+ * Выводим влажность на нижние индикаторы
|
|
|
|
+ */
|
|
|
|
+void showHumidity(void)
|
|
{
|
|
{
|
|
- static int8_t oldHour, oldMinute, pos = 1;
|
|
|
|
- static time_t oldTime;
|
|
|
|
- DateTime dt;
|
|
|
|
-
|
|
|
|
- Time = SystemClock.now ();
|
|
|
|
-
|
|
|
|
- dt.setTime (Time);
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- * теперь в dt у нас следующее:
|
|
|
|
- * int8_t Hour;
|
|
|
|
- * int8_t Minute;
|
|
|
|
- * int8_t Second;
|
|
|
|
- * int16_t Milliseconds;
|
|
|
|
- * int8_t Day;
|
|
|
|
- * int8_t DayofWeek; -- Sunday is day 0
|
|
|
|
- * int8_t Month; // Jan is month 0
|
|
|
|
- * int16_t Year; // Full Year numer
|
|
|
|
- */
|
|
|
|
- int8_t si = dt.Second / 5;
|
|
|
|
- if (oldTime != Time)
|
|
|
|
- {
|
|
|
|
- oldTime = Time;
|
|
|
|
-
|
|
|
|
- if (pos > 8)
|
|
|
|
- {
|
|
|
|
- pos = 1;
|
|
|
|
- }
|
|
|
|
- MAX7219_writeData (pos, pos);
|
|
|
|
- pos++;
|
|
|
|
-
|
|
|
|
- /*
|
|
|
|
- switch (si)
|
|
|
|
- {
|
|
|
|
- case 0:
|
|
|
|
- case 2:
|
|
|
|
- case 4:
|
|
|
|
- case 6:
|
|
|
|
- case 8:
|
|
|
|
- case 10:
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT5, (int)(SensorT)/10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT6, (int)(SensorT)%10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT7, SYM_Temp);
|
|
|
|
- break;
|
|
|
|
- case 1:
|
|
|
|
- case 3:
|
|
|
|
- case 7:
|
|
|
|
- case 9:
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT5, (int)(SensorH)/10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT6, (int)(SensorH)%10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT7, SYM_H);
|
|
|
|
- break;
|
|
|
|
- case 5:
|
|
|
|
- case 11:
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT5, SYM_BLANK);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT6, dt.DayofWeek/10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT7, dt.DayofWeek%10);
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- */
|
|
|
|
- /*
|
|
|
|
- if (oldMinute != dt.Minute)
|
|
|
|
- {
|
|
|
|
- oldMinute = dt.Minute;
|
|
|
|
- if (oldHour != dt.Hour)
|
|
|
|
- {
|
|
|
|
- oldHour = dt.Hour;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- if (si != 5 || si != 11)
|
|
|
|
- {
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT0, dt.Hour/10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT1, dt.Hour%10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT2, SYM_Minus);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT3, dt.Minute/10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT4, dt.Minute%10);
|
|
|
|
- }
|
|
|
|
- else if (si == 5 || si == 11)
|
|
|
|
- {
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT0, dt.Day/10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT1, dt.Day%10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT2, SYM_Minus);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT3, dt.Month/10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT4, dt.Month%10);
|
|
|
|
- }
|
|
|
|
- */
|
|
|
|
- /*
|
|
|
|
- if ((si & 1) == 0)
|
|
|
|
- {
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT5, (int)(SensorT)/10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT6, (int)(SensorT)%10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT7, SYM_Temp);
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT5, (int)(SensorH)/10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT6, (int)(SensorH)%10);
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT7, SYM_H);
|
|
|
|
- }
|
|
|
|
- */
|
|
|
|
- }
|
|
|
|
- /*
|
|
|
|
- else // time the same, output blank for "hh mm"
|
|
|
|
- {
|
|
|
|
- if (si != 5 || si != 11)
|
|
|
|
- {
|
|
|
|
- MAX7219_writeData(MAX7219_DIGIT2, SYM_BLANK );
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- */
|
|
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT5, (int) (SensorH) / 10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT6, (int) (SensorH) % 10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT7, SYM_H);
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+/*
|
|
|
|
+ * Выводим дату на верхние индикаторы [DD MM]
|
|
|
|
+ */
|
|
|
|
+/*
|
|
|
|
+ void showDate(void)
|
|
|
|
+ {
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT0, dt.Day/10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT1, dt.Day%10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT2, SYM_Minus);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT3, dt.Month/10);
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT4, dt.Month%10);
|
|
|
|
+
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT6, (uint8_t)(dt.DayofWeek / 10));
|
|
|
|
+ MAX7219_writeData(MAX7219_DIGIT7, (uint8_t)(dt.DayofWeek % 10));
|
|
|
|
+ }
|
|
|
|
+ */
|
|
|
|
+
|
|
/*
|
|
/*
|
|
* Читаем данные с DHT22, в случае неудачи -- данные остануться старыми.
|
|
* Читаем данные с DHT22, в случае неудачи -- данные остануться старыми.
|
|
* меня это полностью устраивает.
|
|
* меня это полностью устраивает.
|
|
*/
|
|
*/
|
|
-void
|
|
|
|
-process ()
|
|
|
|
|
|
+void process()
|
|
{
|
|
{
|
|
- TempAndHumidity th;
|
|
|
|
- ComfortState cf;
|
|
|
|
- static int8_t status;
|
|
|
|
-
|
|
|
|
- if (dht.readTempAndHumidity (th))
|
|
|
|
- {
|
|
|
|
- status = 0;
|
|
|
|
- SensorT = th.temp;
|
|
|
|
- SensorH = th.humid;
|
|
|
|
- SensorHI = dht.getHeatIndex ();
|
|
|
|
- SensorCR = dht.getComfortRatio (cf);
|
|
|
|
-
|
|
|
|
- switch (cf)
|
|
|
|
- {
|
|
|
|
- case Comfort_OK:
|
|
|
|
- StrCF = "OK";
|
|
|
|
- break;
|
|
|
|
- case Comfort_TooHot:
|
|
|
|
- StrCF = "Too Hot";
|
|
|
|
- break;
|
|
|
|
- case Comfort_TooCold:
|
|
|
|
- StrCF = "Too Cold";
|
|
|
|
- break;
|
|
|
|
- case Comfort_TooDry:
|
|
|
|
- StrCF = "Too Dry";
|
|
|
|
- break;
|
|
|
|
- case Comfort_TooHumid:
|
|
|
|
- StrCF = "Too Humid";
|
|
|
|
- break;
|
|
|
|
- case Comfort_HotAndHumid:
|
|
|
|
- StrCF = "Hot And Humid";
|
|
|
|
- break;
|
|
|
|
- case Comfort_HotAndDry:
|
|
|
|
- StrCF = "Hot And Dry";
|
|
|
|
- break;
|
|
|
|
- case Comfort_ColdAndHumid:
|
|
|
|
- StrCF = "Cold And Humid";
|
|
|
|
- break;
|
|
|
|
- case Comfort_ColdAndDry:
|
|
|
|
- StrCF = "Cold And Dry";
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- StrCF = "Unknown";
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- else
|
|
|
|
- {
|
|
|
|
- /*
|
|
|
|
- * В случае, если от датчика ничего не получили, запустим повторный опрос через
|
|
|
|
- * 10 секунд, но не более 5 раз подряд.
|
|
|
|
- */
|
|
|
|
- if (status < 6)
|
|
|
|
- {
|
|
|
|
- status++;
|
|
|
|
- procRTimer.initializeMs (10000, process).startOnce ();
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
+ TempAndHumidity th;
|
|
|
|
+ ComfortState cf;
|
|
|
|
+ static int8_t status;
|
|
|
|
+
|
|
|
|
+ if (dht.readTempAndHumidity(th))
|
|
|
|
+ {
|
|
|
|
+ status = 0;
|
|
|
|
+ SensorT = th.temp;
|
|
|
|
+ SensorH = th.humid;
|
|
|
|
+ SensorHI = dht.getHeatIndex();
|
|
|
|
+ SensorCR = dht.getComfortRatio(cf);
|
|
|
|
+
|
|
|
|
+ switch (cf)
|
|
|
|
+ {
|
|
|
|
+ case Comfort_OK:
|
|
|
|
+ StrCF = "OK";
|
|
|
|
+ break;
|
|
|
|
+ case Comfort_TooHot:
|
|
|
|
+ StrCF = "Too Hot";
|
|
|
|
+ break;
|
|
|
|
+ case Comfort_TooCold:
|
|
|
|
+ StrCF = "Too Cold";
|
|
|
|
+ break;
|
|
|
|
+ case Comfort_TooDry:
|
|
|
|
+ StrCF = "Too Dry";
|
|
|
|
+ break;
|
|
|
|
+ case Comfort_TooHumid:
|
|
|
|
+ StrCF = "Too Humid";
|
|
|
|
+ break;
|
|
|
|
+ case Comfort_HotAndHumid:
|
|
|
|
+ StrCF = "Hot And Humid";
|
|
|
|
+ break;
|
|
|
|
+ case Comfort_HotAndDry:
|
|
|
|
+ StrCF = "Hot And Dry";
|
|
|
|
+ break;
|
|
|
|
+ case Comfort_ColdAndHumid:
|
|
|
|
+ StrCF = "Cold And Humid";
|
|
|
|
+ break;
|
|
|
|
+ case Comfort_ColdAndDry:
|
|
|
|
+ StrCF = "Cold And Dry";
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ StrCF = "Unknown";
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ else
|
|
|
|
+ {
|
|
|
|
+ /*
|
|
|
|
+ * В случае, если от датчика ничего не получили, запустим повторный опрос через
|
|
|
|
+ * 10 секунд, но не более 5 раз подряд.
|
|
|
|
+ */
|
|
|
|
+ if (status < 6)
|
|
|
|
+ {
|
|
|
|
+ status++;
|
|
|
|
+ procRTimer.initializeMs(10000, process).startOnce();
|
|
|
|
+ }
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
|
|
-void
|
|
|
|
-connectOk ()
|
|
|
|
|
|
+void connectOk()
|
|
{
|
|
{
|
|
- WifiAccessPoint.enable (false);
|
|
|
|
- Serial.print ("I'm connecteed. IP: ");
|
|
|
|
- Serial.println (WifiStation.getIP ().toString ());
|
|
|
|
|
|
+ WifiAccessPoint.enable(false);
|
|
|
|
+ Serial.print("I'm connecteed. IP: ");
|
|
|
|
+ Serial.println(WifiStation.getIP().toString());
|
|
|
|
|
|
- startWebServer ();
|
|
|
|
|
|
+ startWebServer();
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
* в случае неудачи подключения поднимаем точку доступа без авторизации
|
|
* в случае неудачи подключения поднимаем точку доступа без авторизации
|
|
*/
|
|
*/
|
|
-void
|
|
|
|
-connectFail ()
|
|
|
|
|
|
+void connectFail()
|
|
{
|
|
{
|
|
- WifiAccessPoint.config ("MeteoConfig", "", AUTH_OPEN);
|
|
|
|
- WifiAccessPoint.enable (true);
|
|
|
|
- // Stop main screen output
|
|
|
|
- procTimer.stop ();
|
|
|
|
- displayTimer.stop ();
|
|
|
|
|
|
+ WifiAccessPoint.config("MeteoConfig", "", AUTH_OPEN);
|
|
|
|
+ WifiAccessPoint.enable(true);
|
|
|
|
+// Stop main screen output
|
|
|
|
+ procTimer.stop();
|
|
|
|
+ displayTimer.stop();
|
|
|
|
|
|
- Serial.println ("WiFi MeteoConfig");
|
|
|
|
- Serial.println (WifiAccessPoint.getIP ());
|
|
|
|
|
|
+ Serial.println("WiFi MeteoConfig");
|
|
|
|
+ Serial.println(WifiAccessPoint.getIP());
|
|
|
|
|
|
- startWebServer ();
|
|
|
|
- WifiStation.waitConnection (connectOk); // Wait connection
|
|
|
|
|
|
+ startWebServer();
|
|
|
|
+ WifiStation.waitConnection(connectOk); // Wait connection
|
|
}
|
|
}
|
|
|
|
|
|
/*
|
|
/*
|
|
* NTP Client
|
|
* NTP Client
|
|
*/
|
|
*/
|
|
-void
|
|
|
|
-onNtpReceive (NtpClient& client, time_t timestamp)
|
|
|
|
|
|
+void onNtpReceive(NtpClient& client, time_t timestamp)
|
|
{
|
|
{
|
|
- SystemClock.setTime (timestamp, eTZ_UTC);
|
|
|
|
- NTPLastUpdate = SystemClock.now ();
|
|
|
|
- Serial.println ("*** Time synchronized OK! ***"); // DEBUG
|
|
|
|
|
|
+ SystemClock.setTime(timestamp, eTZ_UTC);
|
|
|
|
+ NTPLastUpdate = SystemClock.now();
|
|
|
|
+ Serial.println("*** Time synchronized OK! ***"); // DEBUG
|
|
}
|
|
}
|