INFOBoard/src/main.cpp

111 lines
2.2 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 temp;
Ticker task;
// 128 * 64 display
SSD1306Wire display(0x3c, 4, 5);
OLEDDisplayUi ui(&display);
void initSystem();
void initWiFi();
void configModeCallback(WiFiManager *config);
void initOLED();
void blink();
void setup() {
initSystem();
initWiFi();
initNtp();
initOLED();
initData();
temp.detach();
digitalWrite(LED_BUILTIN, LOW);
}
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 initSystem() {
Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
temp.attach(1, blink);
}
void blink() {
int state = digitalRead(LED_BUILTIN);
digitalWrite(LED_BUILTIN, !state);
}
void initWiFi() {
WiFiManager manager;
manager.setDebugOutput(true);
manager.setRemoveDuplicateAPs(true);
manager.setMinimumSignalQuality(40);
manager.setAPCallback(configModeCallback);
manager.setAPStaticIPConfig(
IPAddress(10, 1, 1, 1),
IPAddress(10, 0, 1, 1),
IPAddress(255, 255, 255, 0)
);
manager.setSTAStaticIPConfig(
IPAddress(192, 168, 43, 141),
IPAddress(192,168,0,1),
IPAddress(255, 255, 255, 0)
);
if( !manager.autoConnect("Info Board", "cj160217") ) {
ESP.reset();
delay(1000);
}
localIP = WiFi.localIP().toString();
}
void configModeCallback(WiFiManager *config) {
temp.attach(0.1, blink);
}
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();
}