#include #include "LedControl.h" #include "RTClib.h" // RTC library #include //https://github.com/esp8266/Arduino #include #include "WiFiManager.h" //https://github.com/tzapu/WiFiManager #include #include #include #include /* Now we need a LedControl to work with. ***** These pin numbers will probably not work with your hardware ***** pin 12 is connected to the DataIn pin 11 is connected to the CLK pin 10 is connected to LOAD We have only a single MAX72XX. */ int iteration = 0; // initialize RTC library RTC_DS1307 rtc; DateTime now; #define SCREEN_WIDTH 128 // OLED display width, in pixels #define SCREEN_HEIGHT 64 // OLED display height, in pixels // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins) #define OLED_RESET D8-1 // Reset pin # (or -1 if sharing Arduino reset pin) Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET); // Max7219 PINs: #define MAX_CLK D5 #define MAX_CS D3 #define MAX_DIN D7 LedControl lc = LedControl(MAX_DIN, MAX_CLK, MAX_CS, 1); /* we always wait a bit between updates of the display */ unsigned long delaytime = 500; void configModeCallback(WiFiManager *myWiFiManager); void setup() { Serial.begin(115200); //WiFiManager //Local intialization. Once its business is done, there is no need to keep it around WiFiManager wifiManager; //reset settings - for testing //wifiManager.resetSettings(); //set callback that gets called when connecting to previous WiFi fails, and enters Access Point mode wifiManager.setAPCallback(configModeCallback); //fetches ssid and pass and tries to connect //if it does not connect it starts an access point with the specified name //here "AutoConnectAP" //and goes into a blocking loop awaiting configuration if (!wifiManager.autoConnect()) { Serial.println("failed to connect and hit timeout"); //reset and try again, or maybe put it to deep sleep ESP.reset(); delay(1000); } //if you get here you have connected to the WiFi Serial.println("connected...yeey :)"); /* The MAX72XX is in power-saving mode on startup, we have to do a wakeup call */ lc.shutdown(0, false); /* Set the brightness to a medium values */ lc.setIntensity(0, 15); lc.clearDisplay(0); /* and clear the display */ Serial.println("starting"); delay(3000); // wait for console opening //rtc.begin(); if (! rtc.begin()) { Serial.println("Couldn't find RTC"); //while (1); return; } rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); // SSD1306_SWITCHCAPVCC = generate display voltage from 3.3V internally if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) { Serial.println(F("SSD1306 allocation failed")); return; } // Show initial display buffer contents on the screen -- // the library initializes this with an Adafruit splash screen. display.display(); } void configModeCallback(WiFiManager *myWiFiManager) { Serial.println("Entered config mode"); Serial.println(WiFi.softAPIP()); //if you used auto generated SSID, print it Serial.println(myWiFiManager->getConfigPortalSSID()); } void printNumber(int v) { int ones; int tens; int hundreds; boolean negative; if(v < -999 || v > 999) return; if(v<0) { negative=true; v=v*-1; } ones=v%10; v=v/10; tens=v%10; v=v/10; hundreds=v; if(negative) { //print character '-' in the leftmost column lc.setChar(0,3,'-',false); } else { //print a blank in the sign column lc.setChar(0,3,' ',false); } //Now print the number digit by digit lc.setDigit(0,2,(byte)hundreds,false); lc.setDigit(0,1,(byte)tens,false); lc.setDigit(0,0,(byte)ones,false); } void loop() { DateTime now = rtc.now(); Serial.print(now.year(), DEC); Serial.print('/'); Serial.print(now.month(), DEC); Serial.print('/'); Serial.print(now.day(), DEC); Serial.print(" ("); Serial.print(") "); Serial.print(now.hour(), DEC); Serial.print(':'); Serial.print(now.minute(), DEC); Serial.print(':'); Serial.print(now.second(), DEC); Serial.println(); Serial.print(" since midnight 1/1/1970 = "); Serial.print(now.unixtime()); Serial.print("s = "); Serial.print(now.unixtime() / 86400L); Serial.println("d"); // calculate a date which is 7 days and 30 seconds into the future DateTime future (now + TimeSpan(7,12,30,6)); Serial.print(" now + 7d + 30s: "); Serial.print(future.year(), DEC); Serial.print('/'); Serial.print(future.month(), DEC); Serial.print('/'); Serial.print(future.day(), DEC); Serial.print(' '); Serial.print(future.hour(), DEC); Serial.print(':'); Serial.print(future.minute(), DEC); Serial.print(':'); Serial.print(future.second(), DEC); Serial.println(); Serial.println(); display.clearDisplay(); display.setTextSize(1); // Normal 1:1 pixel scale display.setTextColor(WHITE); // Draw white text display.setCursor(0, 0); // Start at top-left corner display.cp437(true); // Use full 256 char 'Code Page 437' font char buffer[20]; sprintf(buffer, "%02d:%02d:%02d %02d/%02d/%02d", now.hour(), now.minute(), now.second(), now.day(), now.month(), now.year()); display.write(buffer); display.display(); lc.setDigit(0,3,now.hour()/10,false); lc.setDigit(0,2,now.hour()%10,false); lc.setDigit(0,1,now.minute()/10,false); lc.setDigit(0,0,now.minute()%10,false); /* lc.setDigit(0,0,3,false); lc.setDigit(0,1,2,false); lc.setDigit(0,2,1,false); lc.setDigit(0,3,0,false); */ delay(1000); }