Last active
January 8, 2024 16:42
-
-
Save tuldok89/6e71a63c56da6fc6c01d6de4b8b19c31 to your computer and use it in GitHub Desktop.
ESP8266 Clock
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <Arduino.h> | |
#include <SPI.h> | |
#include <ESP8266WiFi.h> | |
#include <MD_Parola.h> | |
#include <MD_ParolaExt.h> | |
#include <MD_MAX72xx.h> | |
#include <ESP8266TimerInterrupt.h> | |
#include <WiFiUdp.h> | |
#include <NTPClient.h> | |
#include <time.h> | |
#define HARDWARE_TYPE MD_MAX72XX::FC16_HW | |
#define MAX_DEVICES 8 | |
#define CS0 SS | |
#define CS1 16 | |
ESP8266TimerInterrupt timer; | |
MD_ParolaExt* line1; | |
MD_ParolaExt* line2; | |
WiFiUDP ntpUdp; | |
NTPClient* timeClient; | |
const char* wifiSsid = "Tuldok-House"; | |
const char* wifiPass = "HelloWorld1234"; | |
const char* timezone = "PST-8"; | |
void timerTick(); | |
void connectWiFi(); | |
void initTime(); | |
void initHwSpi(); | |
void displayInit(); | |
void setup() | |
{ | |
Serial.begin(2000000, SERIAL_8N1); | |
connectWiFi(); | |
initTime(); | |
initHwSpi(); | |
displayInit(); | |
timer.attachInterruptInterval(1000, &timerTick); | |
} | |
void loop() { | |
timeClient->update(); | |
struct timeval tvx; | |
tvx.tv_sec = timeClient->getEpochTime(); | |
tvx.tv_usec = 0; | |
settimeofday(&tvx, NULL); | |
delay(500); | |
} | |
void connectWiFi() | |
{ | |
WiFi.begin(wifiSsid, wifiPass); | |
while(WiFi.status() != WL_CONNECTED) | |
{ | |
Serial.print("."); | |
delay(500); | |
} | |
Serial.println("WiFi connected."); | |
} | |
void IRAM_ATTR timerTick() | |
{ | |
struct tm timeinfo; | |
getLocalTime(&timeinfo); | |
line1->setTextAlignment(PA_CENTER); | |
line1->printExt(&timeinfo, "%m/%d/%Y"); | |
line2->setTextAlignment(PA_CENTER); | |
line2->printExt(&timeinfo, "%I:%M:%S %P"); | |
} | |
void initTime() | |
{ | |
timeClient = new NTPClient(ntpUdp, "pool.ntp.org", 0, 60000); | |
setenv("TZ", timezone, 1); | |
tzset(); | |
} | |
void displayInit() | |
{ | |
line1 = new MD_ParolaExt(HARDWARE_TYPE, SPI, CS0, MAX_DEVICES); | |
line2 = new MD_ParolaExt(HARDWARE_TYPE, SPI, CS1, MAX_DEVICES); | |
line1->begin(); | |
line2->begin(); | |
line1->setIntensity(15); | |
line2->setIntensity(15); | |
line1->displayClear(); | |
line2->displayClear(); | |
} | |
void initHwSpi() | |
{ | |
SPI.setFrequency(10000000); | |
SPI.begin(); | |
pinMode(CS0, OUTPUT); | |
pinMode(CS1, OUTPUT); | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#pragma once | |
#include <MD_Parola.h> | |
class MD_ParolaExt : public MD_Parola | |
{ | |
public: | |
MD_ParolaExt(MD_MAX72XX::moduleType_t mod, SPIClass &spi, uint8_t csPin, uint8_t numDevices = 1); | |
size_t printExt(struct tm* timeinfo, const char* format = NULL); | |
virtual ~MD_ParolaExt() = default; | |
}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <MD_Parola.h> | |
#include "MD_ParolaExt.h" | |
size_t MD_ParolaExt::printExt(tm *timeinfo, const char *format) | |
{ | |
const char* f = format; | |
if (!f) | |
{ | |
f = "%c"; | |
} | |
char buf[64]; | |
size_t written = strftime(buf, 64, f, timeinfo); | |
if (written == 0) { | |
return written; | |
} | |
return MD_Parola::print(buf); | |
} | |
MD_ParolaExt::MD_ParolaExt(MD_MAX72XX::moduleType_t mod, SPIClass &spi, uint8_t csPin, uint8_t numDevices) : MD_Parola(mod, spi, csPin, numDevices) | |
{ | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment