#include <Arduino.h>
#include <time.h>
#include <U8g2lib.h>
#ifdef U8X8_HAVE_HW_SPI
#include <SPI.h>
#endif
#ifdef U8X8_HAVE_HW_I2C
#include <Wire.h>
#endif
static const unsigned char PROGMEM logo_bmp[] = {
B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000
};
static const unsigned char PROGMEM logo_pow[] = {
B00000000, B11000000,
B00000001, B11000000,
B00000001, B11000000,
B00000011, B11100000,
B11110011, B11100000,
B11111110, B11111000,
B01111110, B11111111,
B00110011, B10011111,
B00011111, B11111100,
B00001101, B01110000,
B00011011, B10100000,
B00111111, B11100000,
B00111111, B11110000,
B01111100, B11110000,
B01110000, B01110000,
B00000000, B00110000
};
uint8_t icon[] PROGMEM = {
B00010000,B00000000,
B00001000,B00000000,
B10001010,B00000000,
B01010001,B00000000,
B10000010,B00000000,
B00000000,B00000000,
B11111111,B00000000,
B11011111,B10000000,
B10111111,B01000000,
B10111111,B01000000,
B11111111,B10000000,
B11111111,B00000000,
B01111110,B00000000,
B00111100,B00000000
};
// U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ SCL, /* data=*/ SDA, /* reset=*/ U8X8_PIN_NONE); // All Boards without Reset of the Display
U8G2_SSD1306_128X64_NONAME_F_HW_I2C u8g2(U8G2_R0, /* reset=*/ U8X8_PIN_NONE);
#define BTN_PIN 5
void setup() {
// put your setup code here, to run once:
pinMode(BTN_PIN, INPUT_PULLUP);
Serial.begin(115200);
Serial.println("Hello, ESP32!");
u8g2.begin();
u8g2.enableUTF8Print();
u8g2.setFont(u8g2_font_helvB10_tr);
}
bool powersave = false;
bool lastPowersave = false;
uint32_t _lastDisplayUpdate = 0;
uint32_t _previousMillis = 0;
void button_loop() {
if (digitalRead(BTN_PIN) == LOW) {
_previousMillis = millis();
}
}
void display_loop() {
if ((millis() - _lastDisplayUpdate) > 1000) { //refresh display every 1 s
u8g2.clearBuffer();
u8g2.drawBitmap(50, 20, 2, 14, icon);
u8g2.setCursor(0, u8g2.getMaxCharHeight());
u8g2.print("Hello, SSD1306!");
if (millis() - _previousMillis >= 30000) { // power save every 5 s
powersave = true;
} else {
powersave = false;
}
if (powersave != lastPowersave) {
if (powersave) {
Serial.println("Entering PowerSave mode");
}
u8g2.setPowerSave(powersave);
lastPowersave = powersave;
}
u8g2.setCursor(0, u8g2.getMaxCharHeight()*4);
u8g2.print(millis() - _previousMillis);
u8g2.sendBuffer();
_lastDisplayUpdate = millis();
}
}
void loop() {
// put your main code here, to run repeatedly:
display_loop();
button_loop();
delay(100);
}