2016-12-31 00:38:51 +01:00
/*
* Main sketch
*/
2017-12-14 00:12:02 +01:00
/*
* @ title WLED project sketch
2018-09-04 15:51:38 +02:00
* @ version 0.8 .0 - a
2017-12-14 00:12:02 +01:00
* @ author Christian Schwinne
*/
2016-12-31 00:38:51 +01:00
2018-06-24 01:20:15 +02:00
//ESP8266-01 got too little storage space to work with all features of WLED. To use it, you must use ESP8266 Arduino Core v2.3.0 and the setting 512K(64K SPIFFS).
//Uncomment the following line to disable some features (currently Mobile UI) to compile for ESP8266-01
//#define WLED_FLASH_512K_MODE
2016-09-11 23:07:18 +02:00
# include <Arduino.h>
2018-01-09 23:13:29 +01:00
# ifdef ARDUINO_ARCH_ESP32
# include <WiFi.h>
# include <ESPmDNS.h>
# include "src/dependencies/webserver/WebServer.h"
2018-02-28 00:27:10 +01:00
# include <HTTPClient.h>
2018-01-09 23:13:29 +01:00
# else
2016-09-11 23:07:18 +02:00
# include <ESP8266WiFi.h>
2018-01-09 23:13:29 +01:00
# include <ESP8266mDNS.h>
2016-09-11 23:07:18 +02:00
# include <ESP8266WebServer.h>
2018-02-28 00:27:10 +01:00
# include <ESP8266HTTPClient.h>
2018-01-09 23:13:29 +01:00
# endif
2016-09-11 23:07:18 +02:00
# include <EEPROM.h>
2018-01-14 00:53:16 +01:00
# include <ArduinoOTA.h>
2016-11-27 22:37:51 +01:00
# include <WiFiUDP.h>
2018-03-14 11:41:24 +01:00
# include <DNSServer.h>
2018-01-15 00:20:23 +01:00
# include "src/dependencies/webserver/ESP8266HTTPUpdateServer.h"
2017-12-11 23:59:12 +01:00
# include "src/dependencies/time/Time.h"
# include "src/dependencies/time/TimeLib.h"
# include "src/dependencies/timezone/Timezone.h"
2017-02-01 21:25:09 +01:00
# include "htmls00.h"
# include "htmls01.h"
2018-02-20 22:29:48 +01:00
# include "htmls02.h"
2017-12-11 23:59:12 +01:00
# include "WS2812FX.h"
2018-07-16 11:50:09 +02:00
# include "src/dependencies/blynk/BlynkSimpleEsp.h"
2018-08-11 22:57:13 +02:00
# include "src/dependencies/e131/E131.h"
2016-09-11 23:07:18 +02:00
2017-03-20 19:56:07 +01:00
//version in format yymmddb (b = daily build)
2018-09-11 00:20:12 +02:00
# define VERSION 1809103
2018-09-04 15:51:38 +02:00
char versionString [ ] = " 0.8.0-a " ;
2017-03-20 19:56:07 +01:00
2017-12-16 00:04:04 +01:00
//AP and OTA default passwords (change them!)
2018-07-21 23:21:07 +02:00
char apPass [ 65 ] = " wled1234 " ;
char otaPass [ 33 ] = " wledota " ;
2017-05-08 21:00:06 +02:00
2018-01-27 23:28:20 +01:00
//spiffs FS only useful for debug (only ESP8266)
2017-12-16 00:04:04 +01:00
//#define USEFS
2017-01-15 00:24:28 +01:00
2018-03-06 23:47:08 +01:00
//to toggle usb serial debug (un)comment following line(s)
2018-01-09 14:21:37 +01:00
//#define DEBUG
2017-11-28 00:21:29 +01:00
2016-12-11 20:11:14 +01:00
//Hardware-settings (only changeble via code)
2018-09-04 15:51:38 +02:00
//strip pin changeable in NpbWrapper.h. Only change for ESP32
2018-03-14 13:16:28 +01:00
byte buttonPin = 0 ; //needs pull-up
byte auxPin = 15 ; //use e.g. for external relay
byte auxDefaultState = 0 ; //0: input 1: high 2: low
byte auxTriggeredState = 0 ; //0: input 1: high 2: low
2016-12-29 00:03:58 +01:00
2016-10-25 22:11:04 +02:00
//Default CONFIG
2018-07-21 23:21:07 +02:00
char serverDescription [ 33 ] = " WLED Light " ;
2018-03-14 13:16:28 +01:00
byte currentTheme = 0 ;
2018-05-22 21:11:19 +02:00
byte uiConfiguration = 0 ; //0: auto 1: classic 2: mobile
2018-07-21 23:21:07 +02:00
char clientSSID [ 33 ] = " Your_Network " ;
char clientPass [ 65 ] = " " ;
char cmDNS [ 33 ] = " led " ;
2018-04-15 15:27:54 +02:00
uint16_t ledCount = 10 ; //lowered to prevent accidental overcurrent
2018-07-21 23:21:07 +02:00
char apSSID [ 65 ] = " " ; //AP off by default (unless setup)
2018-03-14 13:16:28 +01:00
byte apChannel = 1 ;
byte apHide = 0 ;
byte apWaitTimeSecs = 32 ;
bool recoveryAPDisabled = false ;
IPAddress staticIP ( 0 , 0 , 0 , 0 ) ;
IPAddress staticGateway ( 0 , 0 , 0 , 0 ) ;
IPAddress staticSubnet ( 255 , 255 , 255 , 0 ) ;
IPAddress staticDNS ( 8 , 8 , 8 , 8 ) ; //only for NTP
2018-05-31 19:26:16 +02:00
bool useHSB = true , useHSBDefault = true , useRGBW = false , autoRGBtoRGBW = false ;
2018-02-20 22:29:48 +01:00
bool turnOnAtBoot = true ;
2018-06-24 01:20:15 +02:00
bool initLedsLast = false , skipFirstLed = false ;
2018-03-14 13:16:28 +01:00
byte bootPreset = 0 ;
byte colS [ ] { 255 , 159 , 0 } ;
byte colSecS [ ] { 0 , 0 , 0 } ;
byte whiteS = 0 ;
byte whiteSecS = 0 ;
byte briS = 127 ;
byte nightlightTargetBri = 0 ;
2018-02-20 22:29:48 +01:00
bool fadeTransition = true ;
2018-05-10 19:55:58 +02:00
bool disableSecTransition = true ;
2018-04-11 23:50:35 +02:00
uint16_t transitionDelay = 1200 , transitionDelayDefault = transitionDelay ;
2018-03-06 23:47:08 +01:00
bool reverseMode = false ;
2018-02-23 01:33:32 +01:00
bool otaLock = false , wifiLock = false ;
2018-02-20 22:29:48 +01:00
bool aOtaEnabled = true ;
bool buttonEnabled = true ;
2018-03-06 23:47:08 +01:00
bool notifyDirect = true , notifyButton = true , notifyDirectDefault = true , alexaNotify = false , macroNotify = false , notifyTwice = false ;
2018-02-23 01:33:32 +01:00
bool receiveNotifications = true , receiveNotificationBrightness = true , receiveNotificationColor = true , receiveNotificationEffects = true ;
2018-03-14 13:16:28 +01:00
byte briMultiplier = 100 ;
byte nightlightDelayMins = 60 ;
2018-02-20 22:29:48 +01:00
bool nightlightFade = true ;
2018-05-18 23:24:47 +02:00
uint16_t udpPort = 21324 , udpRgbPort = 19446 ;
2018-03-14 13:16:28 +01:00
byte effectDefault = 0 ;
byte effectSpeedDefault = 75 ;
byte effectIntensityDefault = 128 ;
2018-09-04 15:51:38 +02:00
byte effectPaletteDefault = 0 ;
2017-02-07 14:24:42 +01:00
//NTP stuff
2018-03-14 13:16:28 +01:00
bool ntpEnabled = false ;
2018-07-21 23:21:07 +02:00
char ntpServerName [ ] = " 0.wled.pool.ntp.org " ;
2017-02-07 14:24:42 +01:00
2017-02-21 23:59:47 +01:00
//alexa
2018-03-14 13:16:28 +01:00
bool alexaEnabled = true ;
2018-07-21 23:21:07 +02:00
char alexaInvocationName [ 33 ] = " Light " ;
2018-03-14 00:25:54 +01:00
2018-03-14 13:16:28 +01:00
byte macroBoot = 0 , macroNl = 0 ;
byte macroAlexaOn = 0 , macroAlexaOff = 0 ;
byte macroButton = 0 , macroCountdown = 0 , macroLongPress = 0 ;
2017-12-28 00:37:13 +01:00
unsigned long countdownTime = 1514764800L ;
2017-02-21 23:59:47 +01:00
2018-02-28 00:27:10 +01:00
//hue
bool huePollingEnabled = false , hueAttempt = false ;
uint16_t huePollIntervalMs = 2500 ;
2018-07-21 23:21:07 +02:00
char hueApiKey [ 65 ] = " api " ;
2018-03-14 13:16:28 +01:00
byte huePollLightId = 1 ;
2018-02-28 00:27:10 +01:00
IPAddress hueIP = ( 0 , 0 , 0 , 0 ) ;
bool notifyHue = true ;
bool hueApplyOnOff = true , hueApplyBri = true , hueApplyColor = true ;
2018-04-24 12:03:25 +02:00
uint16_t userVar0 = 0 , userVar1 = 0 ;
2016-10-25 22:11:04 +02:00
//Internal vars
2018-09-08 20:26:04 +02:00
byte col [ ] { 255 , 159 , 0 } ;
2018-03-14 13:16:28 +01:00
byte colOld [ ] { 0 , 0 , 0 } ;
byte colT [ ] { 0 , 0 , 0 } ;
byte colIT [ ] { 0 , 0 , 0 } ;
byte colSec [ ] { 0 , 0 , 0 } ;
2018-05-10 19:55:58 +02:00
byte colSecT [ ] { 0 , 0 , 0 } ;
byte colSecOld [ ] { 0 , 0 , 0 } ;
2018-03-14 13:16:28 +01:00
byte colSecIT [ ] { 0 , 0 , 0 } ;
2018-07-16 11:50:09 +02:00
byte white = 0 , whiteOld , whiteT , whiteIT ;
byte whiteSec = 0 , whiteSecOld , whiteSecT , whiteSecIT ;
2018-03-14 13:16:28 +01:00
byte lastRandomIndex = 0 ;
2018-03-15 13:03:50 +01:00
uint16_t transitionDelayTemp = transitionDelay ;
2017-02-07 16:02:27 +01:00
unsigned long transitionStartTime ;
unsigned long nightlightStartTime ;
2018-03-14 13:16:28 +01:00
float tperLast = 0 ;
2018-09-08 20:26:04 +02:00
byte bri = 127 ;
2018-03-14 13:16:28 +01:00
byte briOld = 0 ;
byte briT = 0 ;
byte briIT = 0 ;
byte briLast = 127 ;
bool transitionActive = false ;
bool buttonPressedBefore = false ;
unsigned long buttonPressedTime = 0 ;
unsigned long notificationSentTime = 0 ;
byte notificationSentCallMode = 0 ;
2018-03-06 23:47:08 +01:00
bool notificationTwoRequired = false ;
2018-03-14 13:16:28 +01:00
bool nightlightActive = false ;
bool nightlightActiveOld = false ;
2018-05-18 23:24:47 +02:00
uint32_t nightlightDelayMs = 10 ;
byte briNlT = 0 ;
2018-03-14 13:16:28 +01:00
byte effectCurrent = 0 ;
byte effectSpeed = 75 ;
byte effectIntensity = 128 ;
2018-09-04 15:51:38 +02:00
byte effectPalette = 0 ;
2018-03-14 13:16:28 +01:00
bool onlyAP = false ;
2018-05-18 23:24:47 +02:00
bool udpConnected = false , udpRgbConnected = false ;
2018-07-21 23:21:07 +02:00
char cssCol [ 9 ] [ 5 ] = { " " , " " , " " , " " , " " , " " } ;
char cssFont [ 33 ] = " Verdana " ;
2018-02-20 22:29:48 +01:00
String cssColorString = " " ;
2017-02-07 14:24:42 +01:00
//NTP stuff
2018-03-14 13:16:28 +01:00
bool ntpConnected = false ;
byte currentTimezone = 0 ;
2018-05-18 23:24:47 +02:00
time_t local = 0 ;
2018-03-06 23:47:08 +01:00
int utcOffsetSecs = 0 ;
2017-02-07 14:24:42 +01:00
2018-03-15 12:04:14 +01:00
//hue
2018-07-21 23:21:07 +02:00
char hueError [ 25 ] = " Inactive " ;
2018-03-15 12:04:14 +01:00
uint16_t hueFailCount = 0 ;
float hueXLast = 0 , hueYLast = 0 ;
uint16_t hueHueLast = 0 , hueCtLast = 0 ;
byte hueSatLast = 0 , hueBriLast = 0 ;
long hueLastRequestSent = 0 ;
uint32_t huePollIntervalMsTemp = huePollIntervalMs ;
2018-07-16 11:50:09 +02:00
//blynk
2018-07-21 23:21:07 +02:00
char blynkApiKey [ 36 ] = " " ;
2018-07-16 11:50:09 +02:00
bool blynkEnabled = false ;
2018-08-11 22:57:13 +02:00
//e1.31
bool e131Enabled = true ;
byte e131Universe = 1 ;
bool e131Multicast = false ;
2017-02-07 14:24:42 +01:00
//overlay stuff
2018-03-14 13:16:28 +01:00
byte overlayDefault = 0 ;
byte overlayCurrent = 0 ;
byte overlayMin = 0 , overlayMax = ledCount - 1 ;
byte analogClock12pixel = 0 ;
bool analogClockSecondsTrail = false ;
bool analogClock5MinuteMarks = false ;
byte overlaySpeed = 200 ;
unsigned long overlayRefreshMs = 200 ;
2017-02-07 16:02:27 +01:00
unsigned long overlayRefreshedTime ;
2016-12-31 17:36:07 +01:00
int overlayArr [ 6 ] ;
2018-03-06 23:47:08 +01:00
uint16_t overlayDur [ 6 ] ;
uint16_t overlayPauseDur [ 6 ] ;
2016-12-31 21:10:33 +01:00
int nixieClockI = - 1 ;
2018-03-14 13:16:28 +01:00
bool nixiePause ;
byte countdownYear = 19 , countdownMonth = 1 , countdownDay = 1 , countdownHour = 0 , countdownMin = 0 , countdownSec = 0 ; //year is actual year -2000
2017-12-28 00:37:13 +01:00
bool countdownOverTriggered = true ;
2018-03-06 23:47:08 +01:00
//cronixie
2018-07-21 23:21:07 +02:00
char cronixieDisplay [ ] = " HHMMSS " ;
2018-03-06 23:47:08 +01:00
byte dP [ ] { 0 , 0 , 0 , 0 , 0 , 0 } ;
bool useAMPM = false ;
bool cronixieBacklight = true ;
2018-03-14 00:25:54 +01:00
bool countdownMode = false ;
2018-03-06 23:47:08 +01:00
bool cronixieInit = false ;
2017-09-18 10:20:04 +02:00
2018-04-11 23:50:35 +02:00
bool presetCyclingEnabled = false ;
byte presetCycleMin = 1 , presetCycleMax = 5 ;
uint16_t presetCycleTime = 1250 ;
unsigned long presetCycledTime = 0 ; byte presetCycCurr = presetCycleMin ;
2018-05-10 19:55:58 +02:00
bool presetApplyBri = true , presetApplyCol = true , presetApplyFx = true ;
2018-06-24 01:20:15 +02:00
bool saveCurrPresetCycConf = false ;
2018-08-11 22:57:13 +02:00
uint16_t arlsTimeoutMillis = 2500 ;
2018-03-14 13:16:28 +01:00
bool arlsTimeout = false ;
2018-05-10 19:55:58 +02:00
bool receiveDirect = true , enableRealtimeUI = false ;
2018-08-11 22:57:13 +02:00
bool arlsDisableGammaCorrection = true , arlsForceMaxBri = false ;
2018-06-24 01:20:15 +02:00
IPAddress realtimeIP = ( 0 , 0 , 0 , 0 ) ;
2018-05-18 23:24:47 +02:00
unsigned long arlsTimeoutTime = 0 ;
2018-03-14 13:16:28 +01:00
byte auxTime = 0 ;
2018-05-18 23:24:47 +02:00
unsigned long auxStartTime = 0 ;
bool auxActive = false , auxActiveBefore = false ;
2018-03-14 13:16:28 +01:00
bool showWelcomePage = false ;
2016-10-25 22:11:04 +02:00
2018-03-14 13:16:28 +01:00
bool useGammaCorrectionBri = false ;
bool useGammaCorrectionRGB = true ;
2018-08-11 22:57:13 +02:00
int arlsOffset = 0 ;
2017-09-18 10:20:04 +02:00
2018-02-20 22:29:48 +01:00
//alexa udp
2018-01-07 22:52:48 +01:00
WiFiUDP UDP ;
IPAddress ipMulti ( 239 , 255 , 255 , 250 ) ;
unsigned int portMulti = 1900 ;
String escapedMac ;
2017-02-21 23:59:47 +01:00
2018-03-14 11:41:24 +01:00
//dns server
DNSServer dnsServer ;
bool dnsActive = false ;
2018-07-20 19:35:31 +02:00
//string temp buffer
# define OMAX 1750
char obuf [ OMAX ] ;
uint16_t olen = 0 ;
2018-01-09 23:13:29 +01:00
# ifdef ARDUINO_ARCH_ESP32
WebServer server ( 80 ) ;
# else
2016-09-11 23:07:18 +02:00
ESP8266WebServer server ( 80 ) ;
2018-01-09 23:13:29 +01:00
# endif
2018-08-11 22:57:13 +02:00
E131 e131 ;
2018-02-28 00:27:10 +01:00
HTTPClient hueClient ;
2018-01-15 00:20:23 +01:00
ESP8266HTTPUpdateServer httpUpdater ;
2018-05-18 23:24:47 +02:00
WiFiUDP notifierUdp , rgbUdp ;
2017-02-07 16:02:27 +01:00
WiFiUDP ntpUdp ;
2018-03-15 12:04:14 +01:00
IPAddress ntpServerIP ;
unsigned int ntpLocalPort = 2390 ;
2018-07-22 14:55:10 +02:00
# define NTP_PACKET_SIZE 48
2018-03-15 12:04:14 +01:00
unsigned long ntpLastSyncTime = 999000000L ;
unsigned long ntpPacketSentTime = 999000000L ;
2016-09-21 23:23:18 +02:00
2018-04-13 00:28:29 +02:00
WS2812FX strip = WS2812FX ( ) ;
2016-12-14 23:40:47 +01:00
2017-12-16 00:04:04 +01:00
# ifdef DEBUG
# define DEBUG_PRINT(x) Serial.print (x)
# define DEBUG_PRINTLN(x) Serial.println (x)
# define DEBUG_PRINTF(x) Serial.printf (x)
# else
# define DEBUG_PRINT(x)
# define DEBUG_PRINTLN(x)
# define DEBUG_PRINTF(x)
# endif
2017-05-15 12:24:59 +02:00
# ifdef USEFS
2017-12-16 00:04:04 +01:00
# include <FS.h>;
2016-09-11 23:07:18 +02:00
File fsUploadFile ;
2017-05-15 12:24:59 +02:00
# endif
2016-09-11 23:07:18 +02:00
2017-01-15 00:24:28 +01:00
# ifdef DEBUG
2017-03-20 19:56:07 +01:00
long debugTime = 0 ;
2017-01-15 00:24:28 +01:00
int lastWifiState = 3 ;
long wifiStateChangedTime = 0 ;
# endif
2018-03-14 13:16:28 +01:00
const byte gamma8 [ ] = {
2017-02-01 19:25:36 +01:00
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 ,
0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 ,
1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 2 , 2 , 2 ,
2 , 3 , 3 , 3 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 4 , 5 , 5 , 5 ,
5 , 6 , 6 , 6 , 6 , 7 , 7 , 7 , 7 , 8 , 8 , 8 , 9 , 9 , 9 , 10 ,
10 , 10 , 11 , 11 , 11 , 12 , 12 , 13 , 13 , 13 , 14 , 14 , 15 , 15 , 16 , 16 ,
17 , 17 , 18 , 18 , 19 , 19 , 20 , 20 , 21 , 21 , 22 , 22 , 23 , 24 , 24 , 25 ,
25 , 26 , 27 , 27 , 28 , 29 , 29 , 30 , 31 , 32 , 32 , 33 , 34 , 35 , 35 , 36 ,
37 , 38 , 39 , 39 , 40 , 41 , 42 , 43 , 44 , 45 , 46 , 47 , 48 , 49 , 50 , 50 ,
51 , 52 , 54 , 55 , 56 , 57 , 58 , 59 , 60 , 61 , 62 , 63 , 64 , 66 , 67 , 68 ,
69 , 70 , 72 , 73 , 74 , 75 , 77 , 78 , 79 , 81 , 82 , 83 , 85 , 86 , 87 , 89 ,
90 , 92 , 93 , 95 , 96 , 98 , 99 , 101 , 102 , 104 , 105 , 107 , 109 , 110 , 112 , 114 ,
115 , 117 , 119 , 120 , 122 , 124 , 126 , 127 , 129 , 131 , 133 , 135 , 137 , 138 , 140 , 142 ,
144 , 146 , 148 , 150 , 152 , 154 , 156 , 158 , 160 , 162 , 164 , 167 , 169 , 171 , 173 , 175 ,
177 , 180 , 182 , 184 , 186 , 189 , 191 , 193 , 196 , 198 , 200 , 203 , 205 , 208 , 210 , 213 ,
215 , 218 , 220 , 223 , 225 , 228 , 231 , 233 , 236 , 239 , 241 , 244 , 247 , 249 , 252 , 255 } ;
2018-02-20 22:29:48 +01:00
String txd = " Please disable OTA Lock in security settings! " ;
2018-02-23 01:33:32 +01:00
void serveMessage ( int , String , String , int = 255 ) ;
2018-02-20 22:29:48 +01:00
2016-09-11 23:07:18 +02:00
void reset ( )
{
2018-03-14 13:16:28 +01:00
briT = 0 ;
2016-10-25 22:11:04 +02:00
setAllLeds ( ) ;
2017-01-15 00:24:28 +01:00
DEBUG_PRINTLN ( " MODULE RESET " ) ;
2018-01-09 23:13:29 +01:00
ESP . restart ( ) ;
2016-09-11 23:07:18 +02:00
}
2018-07-20 19:35:31 +02:00
bool oappend ( char * txt ) //append new c string to temp buffer efficiently
{
uint16_t len = strlen ( txt ) ;
if ( olen + len > = OMAX ) return false ; //buffer full
strcpy ( obuf + olen , txt ) ;
olen + = len ;
return true ;
}
bool oappendi ( int i ) //append new number to temp buffer efficiently
{
char s [ 11 ] ;
sprintf ( s , " %ld " , i ) ;
return oappend ( s ) ;
}
2016-09-11 23:07:18 +02:00
void setup ( ) {
2016-11-19 19:39:17 +01:00
wledInit ( ) ;
2016-09-11 23:07:18 +02:00
}
void loop ( ) {
2017-12-19 16:12:51 +01:00
server . handleClient ( ) ;
2018-04-11 23:50:35 +02:00
handleSerial ( ) ;
2016-11-27 22:37:51 +01:00
handleNotifications ( ) ;
2016-10-25 22:11:04 +02:00
handleTransitions ( ) ;
2018-02-25 14:46:11 +01:00
userLoop ( ) ;
2017-05-15 12:24:59 +02:00
yield ( ) ;
2016-10-30 20:04:39 +01:00
handleButton ( ) ;
2016-12-29 00:03:58 +01:00
handleNetworkTime ( ) ;
2018-05-10 19:55:58 +02:00
if ( aOtaEnabled ) ArduinoOTA . handle ( ) ;
2017-02-21 23:59:47 +01:00
handleAlexa ( ) ;
2018-03-06 23:47:08 +01:00
handleOverlays ( ) ;
2018-04-11 23:50:35 +02:00
if ( ! arlsTimeout ) //block stuff if WARLS/Adalight is enabled
2017-12-14 11:28:15 +01:00
{
2018-03-14 11:41:24 +01:00
if ( dnsActive ) dnsServer . processNextRequest ( ) ;
2018-02-28 00:27:10 +01:00
handleHue ( ) ;
2017-12-19 16:12:51 +01:00
handleNightlight ( ) ;
2018-07-16 11:50:09 +02:00
handleBlynk ( ) ;
2018-03-14 13:16:28 +01:00
if ( briT ) strip . service ( ) ; //do not update strip if off, prevents flicker on ESP32
2017-12-14 11:28:15 +01:00
}
2018-01-14 00:53:16 +01:00
2017-01-15 00:24:28 +01:00
//DEBUG
# ifdef DEBUG
2017-03-20 19:56:07 +01:00
if ( millis ( ) - debugTime > 5000 )
2017-01-15 00:24:28 +01:00
{
DEBUG_PRINTLN ( " ---MODULE DEBUG INFO--- " ) ;
DEBUG_PRINT ( " Runtime: " ) ; DEBUG_PRINTLN ( millis ( ) ) ;
DEBUG_PRINT ( " Unix time: " ) ; DEBUG_PRINTLN ( now ( ) ) ;
2017-02-07 13:00:33 +01:00
DEBUG_PRINT ( " Free heap: " ) ; DEBUG_PRINTLN ( ESP . getFreeHeap ( ) ) ;
2017-01-15 00:24:28 +01:00
DEBUG_PRINT ( " Wifi state: " ) ; DEBUG_PRINTLN ( WiFi . status ( ) ) ;
if ( WiFi . status ( ) ! = lastWifiState )
{
wifiStateChangedTime = millis ( ) ;
}
lastWifiState = WiFi . status ( ) ;
DEBUG_PRINT ( " Wifi state: " ) ; DEBUG_PRINTLN ( wifiStateChangedTime ) ;
2017-02-07 16:02:27 +01:00
DEBUG_PRINT ( " NTP last sync: " ) ; DEBUG_PRINTLN ( ntpLastSyncTime ) ;
2017-03-20 19:56:07 +01:00
DEBUG_PRINT ( " Client IP: " ) ; DEBUG_PRINTLN ( WiFi . localIP ( ) ) ;
debugTime = millis ( ) ;
2017-01-15 00:24:28 +01:00
}
# endif
2016-09-11 23:07:18 +02:00
}