123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- #include <SmingCore.h>
- ///////////////////////////////////////////////////////////////////
- // Set your SSID & Pass for initial configuration
- #include "configuration.h" // application configuration
- ///////////////////////////////////////////////////////////////////
- #include "webserver.h"
- #include "tm1650.h"
- #include "AHTxx.h"
- #include "led_spi.h"
- #include "gy49.h"
- Timer procTimer, procRTimer;
- Timer displayTimer, tmpTimer;
- Timer showHighTimer, showLowTimer;
- Timer brightTimer;
- // Sensors values
- ahtxx_t sensorData;
- float SensorT, SensorH, SensorHI, SensorCR;
- String StrCF;
- uint32_t SensorLux;
- // Time values
- time_t Time, NTPLastUpdate;
- DateTime dt;
- void GetData(void);
- void connectOk(const String& SSID, MacAddress bssid, uint8_t channel);
- void connectFail(const String& ssid, MacAddress bssid, WifiDisconnectReason reason);
- void gotIP(IpAddress ip, IpAddress netmask, IpAddress gateway);
- void showWatch(void);
- void showTime(void);
- void showTemperature(void);
- void showHumidity(void);
- void showError(void);
- void setBright(void);
- // NTP Client
- void onNtpReceive(NtpClient& client, time_t timestamp);
- NtpClient ntpClient("ntp.time.in.ua", 1500, onNtpReceive); // every 15 min
- void init(void) {
- 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");
- ActiveConfig = loadConfig();
- // set timezone hourly difference to UTC
- SystemClock.setTimeZone(ActiveConfig.AddTZ);
- WifiStation.config(ActiveConfig.NetworkSSID, ActiveConfig.NetworkPassword);
- WifiStation.enable(true);
- WifiAccessPoint.enable(false);
- WifiEvents.onStationConnect(connectOk);
- WifiEvents.onStationDisconnect(connectFail);
- WifiEvents.onStationGotIP(gotIP);
- // initialize I2C
- Wire.pins(4, 5);
- Wire.begin();
- // BIG digits
- LED_Init();
- // Low LED output
- TM1650_Init();
- brightTimer.initializeMs(1000, setBright).start();
- // refresh big led
- displayTimer.initializeMs(500, showWatch).start();
- // init sensors
- AHTxx_Init();
- GY49_Init();
- // polling sensors - once per two seconds
- procTimer.initializeMs(2000, GetData).start();
- }
- void showWatch(void) {
- static time_t oldTime;
- Time = SystemClock.now();
- dt.setTime(Time);
- /*
- * Now, in dt we have:
- * 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
- */
- if (oldTime == Time) {
- // Old Second
- LED_SemicolonOFF();
- } else {
- // New Second
- oldTime = Time;
- LED_ShowBin(dt.Hour, dt.Minute);
- // LED_ShowBin(dt.Minute, dt.Second);
- LED_SemicolonOn();
- if (dt.Second == 0x00) {
- Serial.printf("Time: %02d:%02d:00\r\n", dt.Hour, dt.Minute);
- }
- }
- }
- /*
- * Выводим текущее время [HH MM] на верхние индикаторы
- */
- void showTime(void) {
- static uint8_t oldHour = 0xFF, oldMinute = 0xFF;
- if (oldMinute != dt.Minute) {
- oldMinute = dt.Minute;
- // ...
-
- if (oldHour != dt.Hour) {
- oldHour = dt.Hour;
- // ...
- } // new hour
- } // new minute
- }
- /*
- * Show temperature, small indicators
- */
- void showTemperature(void) {
- uint8_t a, b;
- a = sensorData.Temperature / 100;
- b = (sensorData.Temperature % 100) / 10;
- TM1650_Out(a, b, 0, 0);
- TM1650_Out3(Sym_o);
- TM1650_Out4(Sym_C);
- }
- /*
- * Show humidity, small indicators
- */
- void showHumidity(void) {
- uint8_t a, b;
- a = sensorData.Humidity / 100;
- b = (sensorData.Humidity % 100) / 10;
- TM1650_Out(a, b, 0, 0);
- TM1650_Out3(Sym_Off);
- TM1650_Out4(Sym_H);
- }
- /*
- * Show error, small indicators
- */
- void showError(void) {
- TM1650_DotRes(Dig_2);
- TM1650_Out1(Sym_E);
- TM1650_Out2(Sym_r);
- TM1650_Out3(Sym_r);
- TM1650_Out4(Sym_Off);
- }
- /*
- * Выводим дату на верхние индикаторы [DD MM]
- */
- void showDate(void) {
- // ...
- }
- /*
- * Автоматическая регулировка яркости индикаторов
- * GY-49 (MAX44009)
- */
- void setBright(void) {
- // ...
- }
- /**
- * @brief Get data from Temperature/Humidity Sensor.
- */
- void GetData(void) {
- static bool st = false;
- AHTxx_GetData(&sensorData);
- if (sensorData.Error != St_OK) {
- Serial.println("Sensor: Data error!");
- return;
- }
- SensorT = (float)sensorData.Temperature / 10;
- SensorH = (float)sensorData.Humidity / 10;
- if (st) {
- st = !st;
- showTemperature();
- } else {
- st = !st;
- showHumidity();
- }
- Serial.printf("Humidity: %d.%d %%; Temperature: %d.%d *C\r\n", sensorData.Humidity/10, sensorData.Humidity%10, sensorData.Temperature/10, sensorData.Temperature%10);
- SensorLux = GY49_GetData();
- }
- void connectOk(const String& SSID, MacAddress bssid, uint8_t channel)
- {
- debugf("connected");
- WifiAccessPoint.enable(false);
- }
- void gotIP(IpAddress ip, IpAddress netmask, IpAddress gateway)
- {
- Serial.print("Got IP address: ");
- Serial.println(ip);
- // Restart main screen output
- procTimer.restart();
- displayTimer.restart();
- // start NTP Client there?
- startWebServer();
- }
- void connectFail(const String& ssid, MacAddress bssid, WifiDisconnectReason reason)
- {
- debugf("connection FAILED: %s", WifiEvents.getDisconnectReasonDesc(reason).c_str());
- WifiAccessPoint.config("ClockConfig", "", AUTH_OPEN);
- WifiAccessPoint.enable(true);
- // Stop main screen output
- procTimer.stop();
- displayTimer.stop();
- Serial.println("WiFi ClockConfig");
- Serial.println(WifiAccessPoint.getIP());
- startWebServer();
- WifiStation.disconnect();
- WifiStation.connect();
- }
- /**
- * @brief NTP Client
- */
- void onNtpReceive(NtpClient& client, time_t timestamp)
- {
- SystemClock.setTime(timestamp, eTZ_UTC);
- NTPLastUpdate = SystemClock.now();
- Serial.println("*** Time synchronized OK! ***"); // DEBUG
- }
|