INFOBoard/src/main.cpp

124 lines
2.7 KiB
C++

#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <WiFiManager.h>
#include <font.h>
#include <image.h>
#include <SSD1306Wire.h>
#include <OLEDDisplayUi.h>
#include <utils.h>
#include <Ticker.h>
// Global arguments
Ticker task;
uint8_t minCount = 0;
SSD1306Wire display(0x3c, SDA, SCL); // 128 * 64 display
OLEDDisplayUi ui(&display);
void blink();
void initWiFi();
void configModeCallback(WiFiManager *config);
void initOLED();
void minCountCallBack();
void setup() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
task.attach(1, blink);
initOLED();
initWiFi();
initNtp();
task.detach();
digitalWrite(LED_BUILTIN, LOW);
minCountCallBack();
task.attach(60, minCountCallBack);
}
void loop() {
int remainingTimeBudget = ui.update();
if (remainingTimeBudget > 0) {
// You can do some work here
// Don't do stuff if you are below your
// time budget.
delay(remainingTimeBudget);
}
}
void blink() {
int state = digitalRead(LED_BUILTIN);
digitalWrite(LED_BUILTIN, !state);
}
void initWiFi() {
WiFiManager manager;
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.drawString(64, 32, "WiFi Connecting");
display.display();
manager.setDebugOutput(true);
manager.setRemoveDuplicateAPs(true);
manager.setMinimumSignalQuality(40);
manager.setAPCallback(configModeCallback);
manager.setAPStaticIPConfig(APStatic.ip, APStatic.gw, APStatic.sn);
manager.setSTAStaticIPConfig(STAStatic.ip, STAStatic.gw, STAStatic.sn);
if( !manager.autoConnect(WiFiSSID, WiFipswd) ) {
ESP.reset();
delay(1000);
}
Board.ip = WiFi.localIP();
}
void configModeCallback(WiFiManager *config) {
task.attach(0.1, blink);
display.clear();
oledTitle(&display, "Info Board", 0, 0);
display.setTextAlignment(TEXT_ALIGN_LEFT);
display.drawString(0, 16, "SSID : " + (String)WiFiSSID);
display.drawString(0, 30, " IP : " + APStatic.ip.toString());
display.display();
}
void initOLED() {
display.init();
display.setContrast(255);
display.setFont(Roboto_Mono_10);
ui.setTargetFPS(1);
ui.setActiveSymbol(Active_Symbol_Icon);
ui.setInactiveSymbol(Inactive_Symbol_Icon);
ui.setIndicatorPosition(RIGHT);
ui.setIndicatorDirection(LEFT_RIGHT);
ui.setFrameAnimation(SLIDE_UP);
ui.setFrames(frames, frameCount);
ui.setOverlays(overlays, overlaysCount);
ui.init();
display.flipScreenVertically();
}
void minCountCallBack() {
if( minCount%60 == 0 ) {
minCount = 0;
display.clear();
display.setTextAlignment(TEXT_ALIGN_CENTER);
display.drawString(64, 32, "Updating Data");
display.display();
getData();
}
minCount += 1;
}