From 2fce12e1e7840e1148132feab86558938aedbcc4 Mon Sep 17 00:00:00 2001 From: doccaz Date: Fri, 30 Jan 2026 18:19:48 -0300 Subject: [PATCH 1/5] first working version --- usermods/OLED_72x40/UsermodOLED72x40.h | 140 +++++++++++++++++++++++++ wled00/const.h | 1 + wled00/usermods_list.cpp | 8 ++ 3 files changed, 149 insertions(+) create mode 100644 usermods/OLED_72x40/UsermodOLED72x40.h diff --git a/usermods/OLED_72x40/UsermodOLED72x40.h b/usermods/OLED_72x40/UsermodOLED72x40.h new file mode 100644 index 0000000000..b905b5b276 --- /dev/null +++ b/usermods/OLED_72x40/UsermodOLED72x40.h @@ -0,0 +1,140 @@ +#pragma once + +#include "wled.h" +#include +#include + +#define OLED_SDA 5 +#define OLED_SCL 6 +#define LED_PIN 8 + +class UsermodOLED72x40 : public Usermod { + private: + U8G2_SSD1306_128X64_NONAME_F_HW_I2C* u8g2 = nullptr; + bool enabled = true; + bool initDone = false; + unsigned long lastUpdate = 0; + + // Final calibrated offsets for AlexYeryomin 0.42" OLED + int xOff = 28; + int yOff = 24; + + // Visualizer / UI state + byte vValues[72]; + unsigned long screenTimeoutMS = 60000; // Turn off after 60s + unsigned long lastInteraction = 0; + bool displayOff = false; + + public: + void setup() { + pinMode(LED_PIN, OUTPUT); // Built-in LED + Wire.begin(OLED_SDA, OLED_SCL); + u8g2 = new U8G2_SSD1306_128X64_NONAME_F_HW_I2C(U8G2_R0, U8X8_PIN_NONE); + + if (u8g2->begin()) { + u8g2->setContrast(255); + memset(vValues, 0, sizeof(vValues)); + initDone = true; + } + } + + void loop() { + // Hardware Blink Heartbeat + static unsigned long ledTimer = 0; + if (millis() - ledTimer > 500) { + ledTimer = millis(); + digitalWrite(8, !digitalRead(8)); + } + + if (!enabled || !initDone || strip.isUpdating()) return; + + // Burn-in protection: Sleep screen after inactivity + if (millis() - lastInteraction > screenTimeoutMS) { + if (!displayOff) { + u8g2->setPowerSave(1); + displayOff = true; + } + return; + } + + if (millis() - lastUpdate > 100) { + lastUpdate = millis(); + + // Update Sparkline + for (int i = 0; i < 71; i++) vValues[i] = vValues[i+1]; + vValues[71] = map(bri, 0, 255, 0, 15); + + if (displayOff) { + u8g2->setPowerSave(0); + displayOff = false; + } + + u8g2->clearBuffer(); + + // 1. Top Bar: Mode Name (using calibrated offsets) + u8g2->setFont(u8g2_font_5x7_tf); + char lineBuffer[17]; + extractModeName(effectCurrent, JSON_mode_names, lineBuffer, 16); + u8g2->drawStr(xOff, yOff + 7, lineBuffer); + u8g2->drawHLine(xOff, yOff + 9, 72); + + // 2. Middle: Visualizer + for (int i = 0; i < 71; i++) { + u8g2->drawLine(xOff + i, yOff + 26, xOff + i, yOff + 26 - vValues[i]); + } + + // 3. Bottom: IP & Bri + u8g2->setFont(u8g2_font_4x6_tf); + u8g2->setCursor(xOff, yOff + 38); + if (Network.isConnected()) { + u8g2->print(Network.localIP()[3]); // Just last octet to save space + u8g2->print(" | "); + } + u8g2->print(map(bri, 0, 255, 0, 100)); + u8g2->print("%"); + + // Sync indicator + if (receiveNotificationBrightness || receiveNotificationColor) { + u8g2->drawStr(xOff + 66, yOff + 38, "S"); + } + + u8g2->sendBuffer(); + } + } + + // Reset sleep timer when WLED state changes + void onStateChange(uint8_t mode) { + lastInteraction = millis(); + } + + void addToConfig(JsonObject& root) { + JsonObject top = root.createNestedObject(F("OLED_72x40")); + top[F("enabled")] = enabled; + top["pin"] = 7; // Force Button 2 to GPIO 7 (example) + top["help"] = "Button 2 wakes & cycles display"; + top["x-offset"] = 28; // Your calibrated X + top["y-offset"] = 24; // Your calibrated Y + top["sleepTimeout"] = 30; // 30 seconds default + } + + bool readFromConfig(JsonObject& root) { + JsonObject top = root[F("OLED_72x40")]; + enabled = top[F("enabled")] | enabled; + xOff = top["x-offset"] | xOff; + yOff = top["y-offset"] | yOff; + screenTimeoutMS = (top["sleepTimeout"] | (screenTimeoutMS / 1000)) * 1000; + return !top.isNull(); + } + + // void handleButton(uint8_t b) { + // if (b == 1) { // Index 1 is the second button + // // 2. If screen was off, wake it up + // if (displayOff) { + // u8g2->setPowerSave(0); + // displayOff = false; + // } + // } + // } + + uint16_t getId() { return USERMOD_ID_OLED_72x40; } +}; \ No newline at end of file diff --git a/wled00/const.h b/wled00/const.h index ff152beb62..ae44eee4b6 100644 --- a/wled00/const.h +++ b/wled00/const.h @@ -203,6 +203,7 @@ #define USERMOD_ID_LD2410 52 //Usermod "usermod_ld2410.h" #define USERMOD_ID_POV_DISPLAY 53 //Usermod "usermod_pov_display.h" #define USERMOD_ID_PIXELS_DICE_TRAY 54 //Usermod "pixels_dice_tray.h" +#define USERMOD_ID_OLED_72x40 55 //Usermod "OLED_72x40.h" //Access point behavior #define AP_BEHAVIOR_BOOT_NO_CONN 0 //Open AP when no connection after boot diff --git a/wled00/usermods_list.cpp b/wled00/usermods_list.cpp index 36bd122a51..9107f91774 100644 --- a/wled00/usermods_list.cpp +++ b/wled00/usermods_list.cpp @@ -182,6 +182,10 @@ #include "../usermods/Internal_Temperature_v2/usermod_internal_temperature.h" #endif +#ifdef USERMOD_OLED_72x40 +#include "../usermods/OLED_72x40/UsermodOLED72x40.h" +#endif + #if defined(WLED_USE_SD_MMC) || defined(WLED_USE_SD_SPI) // This include of SD.h and SD_MMC.h must happen here, else they won't be // resolved correctly (when included in mod's header only) @@ -470,4 +474,8 @@ void registerUsermods() #ifdef USERMOD_POV_DISPLAY UsermodManager::add(new PovDisplayUsermod()); #endif + + #ifdef USERMOD_OLED_72x40 + UsermodManager::add(new UsermodOLED72x40()); + #endif } From 87a5bc18f7723510fb1b3067066daf85bdd97d3e Mon Sep 17 00:00:00 2001 From: doccaz Date: Sat, 31 Jan 2026 16:45:02 -0300 Subject: [PATCH 2/5] working version with Akemi logo and default button assignment --- usermods/OLED_72x40/UsermodOLED72x40.h | 191 ++++++++++++++++--------- 1 file changed, 120 insertions(+), 71 deletions(-) diff --git a/usermods/OLED_72x40/UsermodOLED72x40.h b/usermods/OLED_72x40/UsermodOLED72x40.h index b905b5b276..2743cea8f5 100644 --- a/usermods/OLED_72x40/UsermodOLED72x40.h +++ b/usermods/OLED_72x40/UsermodOLED72x40.h @@ -8,133 +8,182 @@ #define OLED_SCL 6 #define LED_PIN 8 +// 128x40 bitmap generated by LCD Matrix Studio +const unsigned char akemi_logo [] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x7E, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x3C, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1C, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x18, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x3C, 0x60, 0x00, 0x38, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x0C, 0x00, 0x80, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, + 0x02, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0xC3, 0xE0, 0x00, 0x01, 0x00, 0x43, 0xC3, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE7, 0xE0, 0x00, 0x01, 0x02, 0x46, 0x43, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, + 0x01, 0x02, 0x44, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x1F, 0xFF, 0xE0, 0x01, 0x01, 0x02, 0x45, 0xC9, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x1F, 0xFF, 0xE0, 0x1C, 0x01, 0x32, 0x47, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x10, + 0x01, 0x12, 0x42, 0x0D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, + 0x30, 0x00, 0x00, 0x30, 0x01, 0xD2, 0x4B, 0x07, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0C, 0x2E, 0xE7, 0x70, 0x30, 0x00, 0xDE, 0x79, 0xE0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0xE7, 0x60, 0x60, + 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x06, 0xC6, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x08, 0xC6, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x10, 0xC6, 0x08, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xE0, 0xC6, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; + + class UsermodOLED72x40 : public Usermod { private: U8G2_SSD1306_128X64_NONAME_F_HW_I2C* u8g2 = nullptr; - bool enabled = true; - bool initDone = false; - unsigned long lastUpdate = 0; - - // Final calibrated offsets for AlexYeryomin 0.42" OLED - int xOff = 28; - int yOff = 24; - - // Visualizer / UI state - byte vValues[72]; - unsigned long screenTimeoutMS = 60000; // Turn off after 60s - unsigned long lastInteraction = 0; - bool displayOff = false; + bool enabled = true, initDone = false, displayOff = false; + unsigned long lastUpdate = 0, lastInteraction = 0; + unsigned long screenTimeoutMS = 60000; + int xOff = 28, yOff = 24; + byte vValues[72]; + bool flipDisplay = false; public: void setup() { - pinMode(LED_PIN, OUTPUT); // Built-in LED + pinMode(LED_PIN, OUTPUT); Wire.begin(OLED_SDA, OLED_SCL); u8g2 = new U8G2_SSD1306_128X64_NONAME_F_HW_I2C(U8G2_R0, U8X8_PIN_NONE); if (u8g2->begin()) { u8g2->setContrast(255); + u8g2->setFlipMode(flipDisplay ? 1 : 0); memset(vValues, 0, sizeof(vValues)); + u8g2->clearBuffer(); + u8g2->drawBitmap(0, yOff, 16, 40, akemi_logo); + u8g2->setFont(u8g2_font_4x6_tf); + u8g2->setCursor(xOff + 12, yOff + 38); + if (Network.isConnected()) u8g2->print(Network.localIP()); else u8g2->print(cmDNS); + u8g2->sendBuffer(); + delay(5000); + lastInteraction = millis(); initDone = true; } } void loop() { - // Hardware Blink Heartbeat + // 1. LED HEARTBEAT (Always runs) static unsigned long ledTimer = 0; - if (millis() - ledTimer > 500) { - ledTimer = millis(); - digitalWrite(8, !digitalRead(8)); + if (!Network.isConnected()) { + if (millis() - ledTimer > 200) { ledTimer = millis(); digitalWrite(LED_PIN, !digitalRead(LED_PIN)); } + } else { + float pulse = (sin(millis() / 2000.0 * PI) + 1) * 127.5; + analogWrite(LED_PIN, (int)pulse); } - if (!enabled || !initDone || strip.isUpdating()) return; + if (!enabled || !initDone) return; - // Burn-in protection: Sleep screen after inactivity - if (millis() - lastInteraction > screenTimeoutMS) { - if (!displayOff) { - u8g2->setPowerSave(1); - displayOff = true; - } - return; + // 2. TIMEOUT LOGIC (Moved before the strip updating guard) + if (screenTimeoutMS > 0 && (millis() - lastInteraction > screenTimeoutMS)) { + if (!displayOff) { u8g2->setPowerSave(1); displayOff = true; } + return; } + // 3. DRAWING LOGIC (Bypassed if screen is blanked) + if (strip.isUpdating()) return; + if (millis() - lastUpdate > 100) { lastUpdate = millis(); - - // Update Sparkline - for (int i = 0; i < 71; i++) vValues[i] = vValues[i+1]; - vValues[71] = map(bri, 0, 255, 0, 15); - - if (displayOff) { - u8g2->setPowerSave(0); - displayOff = false; - } + if (displayOff) { u8g2->setPowerSave(0); displayOff = false; } u8g2->clearBuffer(); - - // 1. Top Bar: Mode Name (using calibrated offsets) u8g2->setFont(u8g2_font_5x7_tf); char lineBuffer[17]; extractModeName(effectCurrent, JSON_mode_names, lineBuffer, 16); u8g2->drawStr(xOff, yOff + 7, lineBuffer); u8g2->drawHLine(xOff, yOff + 9, 72); - // 2. Middle: Visualizer - for (int i = 0; i < 71; i++) { - u8g2->drawLine(xOff + i, yOff + 26, xOff + i, yOff + 26 - vValues[i]); - } + for (int i = 0; i < 71; i++) vValues[i] = vValues[i+1]; + vValues[71] = map(bri, 0, 255, 0, 15); + for (int i = 0; i < 71; i++) u8g2->drawLine(xOff + i, yOff + 26, xOff + i, yOff + 26 - vValues[i]); - // 3. Bottom: IP & Bri u8g2->setFont(u8g2_font_4x6_tf); u8g2->setCursor(xOff, yOff + 38); - if (Network.isConnected()) { - u8g2->print(Network.localIP()[3]); // Just last octet to save space - u8g2->print(" | "); - } - u8g2->print(map(bri, 0, 255, 0, 100)); - u8g2->print("%"); - - // Sync indicator - if (receiveNotificationBrightness || receiveNotificationColor) { - u8g2->drawStr(xOff + 66, yOff + 38, "S"); - } - + u8g2->print("S:"); u8g2->print(map(effectSpeed, 0, 255, 0, 99)); u8g2->print("% "); + u8g2->print("I:"); u8g2->print(map(effectIntensity, 0, 255, 0, 99)); u8g2->print("% "); + u8g2->print("B:"); u8g2->print(map(bri, 0, 255, 0, 100)); u8g2->print("%"); u8g2->sendBuffer(); } } - // Reset sleep timer when WLED state changes void onStateChange(uint8_t mode) { lastInteraction = millis(); + lastUpdate = 0; + if (displayOff && u8g2) { u8g2->setPowerSave(0); displayOff = false; } + } + + bool handleButton(uint8_t b) { + lastInteraction = millis(); + if (displayOff && u8g2) { u8g2->setPowerSave(0); displayOff = false; } + return false; } void addToConfig(JsonObject& root) { JsonObject top = root.createNestedObject(F("OLED_72x40")); top[F("enabled")] = enabled; - top["pin"] = 7; // Force Button 2 to GPIO 7 (example) - top["help"] = "Button 2 wakes & cycles display"; - top["x-offset"] = 28; // Your calibrated X - top["y-offset"] = 24; // Your calibrated Y - top["sleepTimeout"] = 30; // 30 seconds default + top[F("flipDisplay")] = flipDisplay; // Registration for UI + top["bootButtonPin"] = 9; + top["x-offset"] = xOff; + top["y-offset"] = yOff; + top["sleepTimeout"] = screenTimeoutMS / 1000; } bool readFromConfig(JsonObject& root) { JsonObject top = root[F("OLED_72x40")]; + if (top.isNull()) return false; + enabled = top[F("enabled")] | enabled; + flipDisplay = top[F("flipDisplay")] | flipDisplay; // Read setting from UI xOff = top["x-offset"] | xOff; yOff = top["y-offset"] | yOff; screenTimeoutMS = (top["sleepTimeout"] | (screenTimeoutMS / 1000)) * 1000; - return !top.isNull(); - } - // void handleButton(uint8_t b) { - // if (b == 1) { // Index 1 is the second button - // // 2. If screen was off, wake it up - // if (displayOff) { - // u8g2->setPowerSave(0); - // displayOff = false; - // } - // } - // } + if (initDone && u8g2) u8g2->setFlipMode(flipDisplay ? 1 : 0); + + if (btnPin[0] == -1 || btnPin[0] != 9) { + btnPin[0] = 9; + buttonType[0] = BTN_TYPE_PUSH; + } + return true; + } uint16_t getId() { return USERMOD_ID_OLED_72x40; } }; \ No newline at end of file From b4c517ba4e26e2901f06d957b274797895338eeb Mon Sep 17 00:00:00 2001 From: doccaz Date: Sat, 31 Jan 2026 22:07:07 -0300 Subject: [PATCH 3/5] FlipDisplay now working for dashboard and bootsplash! --- akemi-logo.txt | 58 ++++++++++++++ usermods/OLED_72x40/UsermodOLED72x40.h | 105 ++++++++++++++++++------- 2 files changed, 133 insertions(+), 30 deletions(-) create mode 100644 akemi-logo.txt diff --git a/akemi-logo.txt b/akemi-logo.txt new file mode 100644 index 0000000000..d9bf823f46 --- /dev/null +++ b/akemi-logo.txt @@ -0,0 +1,58 @@ +// 128x40 bitmap generated by LCD Matrix Studio +const unsigned char bitmap [] PROGMEM = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x06, 0x7E, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x3C, 0x60, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1C, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1C, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x18, 0x20, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1E, 0x3C, 0x60, 0x00, 0x38, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x0C, 0x00, 0x80, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, + 0x02, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x1F, 0xC3, 0xE0, 0x00, 0x01, 0x00, 0x43, 0xC3, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE7, 0xE0, 0x00, 0x01, 0x02, 0x46, 0x43, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, + 0x01, 0x02, 0x44, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, + 0x1F, 0xFF, 0xE0, 0x01, 0x01, 0x02, 0x45, 0xC9, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x1F, 0xFF, 0xE0, 0x1C, 0x01, 0x32, 0x47, 0x09, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x10, + 0x01, 0x12, 0x42, 0x0D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, + 0x30, 0x00, 0x00, 0x30, 0x01, 0xD2, 0x4B, 0x07, 0xE0, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x0C, 0x2E, 0xE7, 0x70, 0x30, 0x00, 0xDE, 0x79, 0xE0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0xE7, 0x60, 0x60, + 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, + 0x06, 0xC6, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x03, 0x08, 0xC6, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x10, 0xC6, 0x08, 0xC0, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0xE0, 0xC6, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00 +}; + diff --git a/usermods/OLED_72x40/UsermodOLED72x40.h b/usermods/OLED_72x40/UsermodOLED72x40.h index 2743cea8f5..38ab547bd0 100644 --- a/usermods/OLED_72x40/UsermodOLED72x40.h +++ b/usermods/OLED_72x40/UsermodOLED72x40.h @@ -81,6 +81,8 @@ class UsermodOLED72x40 : public Usermod { void setup() { pinMode(LED_PIN, OUTPUT); Wire.begin(OLED_SDA, OLED_SCL); + WiFi.setTxPower(WIFI_POWER_8_5dBm); + // Wire.setClock(100000); // Set to 100kHz (Standard Mode) to avoid frequent connection issues u8g2 = new U8G2_SSD1306_128X64_NONAME_F_HW_I2C(U8G2_R0, U8X8_PIN_NONE); if (u8g2->begin()) { @@ -88,10 +90,26 @@ class UsermodOLED72x40 : public Usermod { u8g2->setFlipMode(flipDisplay ? 1 : 0); memset(vValues, 0, sizeof(vValues)); u8g2->clearBuffer(); - u8g2->drawBitmap(0, yOff, 16, 40, akemi_logo); + + // FIXED X-OFFSET FOR SPLASH + // Since akemi_logo is 128px wide (16 bytes), we don't shift X. + // We only shift Y to align the 40px height within the 64px buffer. + int splashX = 0; + int splashY = flipDisplay ? (64 - 40 - yOff) : yOff; + + // Draw the 128x40 bitmap + u8g2->drawBitmap(splashX, splashY, 16, 40, akemi_logo); + + // The IP address/mDNS text still needs the relative shift to stay + // centered under the logo area + int textX = flipDisplay ? (128 - 72 - xOff) : xOff; + u8g2->setFont(u8g2_font_4x6_tf); - u8g2->setCursor(xOff + 12, yOff + 38); - if (Network.isConnected()) u8g2->print(Network.localIP()); else u8g2->print(cmDNS); + u8g2->setCursor(textX + 12, splashY + 38); + + if (Network.isConnected()) u8g2->print(Network.localIP()); + else u8g2->print(cmDNS); + u8g2->sendBuffer(); delay(5000); lastInteraction = millis(); @@ -121,26 +139,36 @@ class UsermodOLED72x40 : public Usermod { if (strip.isUpdating()) return; if (millis() - lastUpdate > 100) { - lastUpdate = millis(); - if (displayOff) { u8g2->setPowerSave(0); displayOff = false; } - - u8g2->clearBuffer(); - u8g2->setFont(u8g2_font_5x7_tf); - char lineBuffer[17]; - extractModeName(effectCurrent, JSON_mode_names, lineBuffer, 16); - u8g2->drawStr(xOff, yOff + 7, lineBuffer); - u8g2->drawHLine(xOff, yOff + 9, 72); - - for (int i = 0; i < 71; i++) vValues[i] = vValues[i+1]; - vValues[71] = map(bri, 0, 255, 0, 15); - for (int i = 0; i < 71; i++) u8g2->drawLine(xOff + i, yOff + 26, xOff + i, yOff + 26 - vValues[i]); - - u8g2->setFont(u8g2_font_4x6_tf); - u8g2->setCursor(xOff, yOff + 38); - u8g2->print("S:"); u8g2->print(map(effectSpeed, 0, 255, 0, 99)); u8g2->print("% "); - u8g2->print("I:"); u8g2->print(map(effectIntensity, 0, 255, 0, 99)); u8g2->print("% "); - u8g2->print("B:"); u8g2->print(map(bri, 0, 255, 0, 100)); u8g2->print("%"); - u8g2->sendBuffer(); + lastUpdate = millis(); + if (displayOff) { u8g2->setPowerSave(0); displayOff = false; } + + u8g2->clearBuffer(); + + // ADJUST OFFSETS BASED ON FLIP + // Normal: xOff=28, yOff=24 + // Flipped: We need to shift the content to the opposite side of the 128x64 buffer + int currentX = flipDisplay ? (128 - 72 - xOff) : xOff; + int currentY = flipDisplay ? (64 - 40 - yOff) : yOff; + + u8g2->setFont(u8g2_font_5x7_tf); + char lineBuffer[17]; + extractModeName(effectCurrent, JSON_mode_names, lineBuffer, 16); + u8g2->drawStr(currentX, currentY + 7, lineBuffer); + u8g2->drawHLine(currentX, currentY + 9, 72); + + for (int i = 0; i < 71; i++) vValues[i] = vValues[i+1]; + vValues[71] = map(bri, 0, 255, 0, 15); + for (int i = 0; i < 71; i++) { + u8g2->drawLine(currentX + i, currentY + 26, currentX + i, currentY + 26 - vValues[i]); + } + + u8g2->setFont(u8g2_font_4x6_tf); + u8g2->setCursor(currentX, currentY + 38); + u8g2->print("S:"); u8g2->print(map(effectSpeed, 0, 255, 0, 99)); u8g2->print("% "); + u8g2->print("I:"); u8g2->print(map(effectIntensity, 0, 255, 0, 99)); u8g2->print("% "); + u8g2->print("B:"); u8g2->print(map(bri, 0, 255, 0, 100)); u8g2->print("%"); + + u8g2->sendBuffer(); } } @@ -156,6 +184,18 @@ class UsermodOLED72x40 : public Usermod { return false; } + void appendConfigData(JsonArray &config) { + JsonObject top = config.createNestedObject(); + top[F("usermod")] = F("OLED_72x40"); + + // This creates the UI elements in the Usermod settings page + config.createNestedObject()[F("OLED_72x40:enabled")]; + config.createNestedObject()[F("OLED_72x40:flipDisplay")]; + config.createNestedObject()[F("OLED_72x40:x-offset")]; + config.createNestedObject()[F("OLED_72x40:y-offset")]; + config.createNestedObject()[F("OLED_72x40:sleepTimeout")]; + config.createNestedObject()[F("OLED_72x40:bootButtonPin")]; + } void addToConfig(JsonObject& root) { JsonObject top = root.createNestedObject(F("OLED_72x40")); top[F("enabled")] = enabled; @@ -166,20 +206,25 @@ class UsermodOLED72x40 : public Usermod { top["sleepTimeout"] = screenTimeoutMS / 1000; } - bool readFromConfig(JsonObject& root) { + bool readFromConfig(JsonObject& root) { JsonObject top = root[F("OLED_72x40")]; if (top.isNull()) return false; enabled = top[F("enabled")] | enabled; - flipDisplay = top[F("flipDisplay")] | flipDisplay; // Read setting from UI - xOff = top["x-offset"] | xOff; - yOff = top["y-offset"] | yOff; - screenTimeoutMS = (top["sleepTimeout"] | (screenTimeoutMS / 1000)) * 1000; + flipDisplay = top[F("flipDisplay")] | flipDisplay; + xOff = top[F("x-offset")] | 28; + yOff = top[F("y-offset")] | 24; + + // Guard against 0 or negative timeout values + unsigned long timeoutSec = top[F("sleepTimeout")] | 60; + screenTimeoutMS = timeoutSec * 1000; if (initDone && u8g2) u8g2->setFlipMode(flipDisplay ? 1 : 0); - if (btnPin[0] == -1 || btnPin[0] != 9) { - btnPin[0] = 9; + // Apply the button pin 9 default logic + int pin = top[F("bootButtonPin")] | 9; + if (btnPin[0] == -1 || btnPin[0] != pin) { + btnPin[0] = pin; buttonType[0] = BTN_TYPE_PUSH; } return true; From 83765874956f916dae975259d20f2b4b30d99ce3 Mon Sep 17 00:00:00 2001 From: doccaz Date: Sat, 31 Jan 2026 22:07:42 -0300 Subject: [PATCH 4/5] removing extra file --- akemi-logo.txt | 58 -------------------------------------------------- 1 file changed, 58 deletions(-) delete mode 100644 akemi-logo.txt diff --git a/akemi-logo.txt b/akemi-logo.txt deleted file mode 100644 index d9bf823f46..0000000000 --- a/akemi-logo.txt +++ /dev/null @@ -1,58 +0,0 @@ -// 128x40 bitmap generated by LCD Matrix Studio -const unsigned char bitmap [] PROGMEM = { - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x01, 0xFC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x03, 0xFF, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0xFF, 0xC0, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x07, 0xFF, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x06, 0x7E, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1E, 0x3C, 0x60, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1C, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1C, 0x18, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1C, 0x18, 0x20, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1E, 0x3C, 0x60, 0x00, 0x38, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, 0x0C, 0x00, 0x80, 0x01, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, - 0x02, 0x00, 0xC0, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x1F, 0xC3, 0xE0, 0x00, 0x01, 0x00, 0x43, 0xC3, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x1F, 0xE7, 0xE0, 0x00, 0x01, 0x02, 0x46, 0x43, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1F, 0xFF, 0xE0, 0x00, - 0x01, 0x02, 0x44, 0x4F, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, - 0x1F, 0xFF, 0xE0, 0x01, 0x01, 0x02, 0x45, 0xC9, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x38, 0x1F, 0xFF, 0xE0, 0x1C, 0x01, 0x32, 0x47, 0x09, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x20, 0x00, 0x00, 0x10, - 0x01, 0x12, 0x42, 0x0D, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0C, - 0x30, 0x00, 0x00, 0x30, 0x01, 0xD2, 0x4B, 0x07, 0xE0, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x0C, 0x2E, 0xE7, 0x70, 0x30, 0x00, 0xDE, 0x79, 0xE0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0xE7, 0x60, 0x60, - 0x00, 0x7C, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, - 0x06, 0xC6, 0x60, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x03, 0x08, 0xC6, 0x30, 0xC0, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x10, 0xC6, 0x08, 0xC0, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, - 0xE0, 0xC6, 0x0F, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0xE0, 0xC6, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC6, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0xC6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xC0, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, - 0x00, 0x00, 0x00, 0x00 -}; - From d805f8e15d9c4ab200a160ba052c9211cf97eef4 Mon Sep 17 00:00:00 2001 From: doccaz Date: Sun, 1 Feb 2026 13:10:16 -0300 Subject: [PATCH 5/5] Adding README --- usermods/OLED_72x40/README.md | 72 ++++++++++++++++++++ usermods/OLED_72x40/esp32-c3-super-mini.png | Bin 0 -> 84000 bytes 2 files changed, 72 insertions(+) create mode 100644 usermods/OLED_72x40/README.md create mode 100644 usermods/OLED_72x40/esp32-c3-super-mini.png diff --git a/usermods/OLED_72x40/README.md b/usermods/OLED_72x40/README.md new file mode 100644 index 0000000000..8058830c16 --- /dev/null +++ b/usermods/OLED_72x40/README.md @@ -0,0 +1,72 @@ +# WLED Usermod: OLED 72x40 (SSD1306) + +A custom WLED usermod designed for the **ESP32-C3 Super Mini** development board featuring an integrated **0.42-inch OLED display** (72x40 pixels). + +## 📱 About This Device + +This specific board is a compact IoT platform based on the **ESP32-C3FN4/FH4** with built-in 4MB Flash, Wi-Fi, and Bluetooth 5.0. It is widely used for teeny-tiny projects like telemetry displays, altitude trackers, or localized status monitors. + +![ESP32-C3 Super Mini](esp32-c3-super-mini.png) +*Image source: AlexYeryomin/ESP32C3-OLED-72x40* + +### Technical Specifications + +* **Controller:** ESP32-C3 +* **OLED Resolution:** 72x40 pixels (Effective area) +* **Driver:** SSD1306 (requires 128x64 driver initialization with specific offsets to avoid clipping) +* **I2C Pins:** SDA (GPIO 5), SCL (GPIO 6) +* **Onboard LED:** GPIO 8 (used for heartbeat status) +* **Function Button:** GPIO 9 (normally used for Bootloader mode), assigned to toggling brightness between 0% and current value. + +--- + +## 🛠 Features & Functions + +### 1. Adaptive Dashboard + +The usermod displays a real-time WLED status dashboard including: + +* **Effect Name:** Shows the current WLED mode/effect. +* **Brightness Visualizer:** A horizontal scrolling graph showing brightness (`bri`) levels over time. +* **System Stats:** Quick view of Speed (S), Intensity (I), and Brightness (B) percentages. + +### 2. Smart Coordinate Mapping (Flipping Support) + +Because this 72x40 display uses a 128x64 driver, normal library rotations can cause the image to "fall off" the physical glass. This usermod includes **Dynamic Offset Calculation**: + +* **Normal Mode:** Centers the 72x40 UI in the top-left area. +* **Flipped Mode:** Automatically shifts coordinates to the bottom-right of the 128x64 memory buffer so the UI remains perfectly centered and visible when rotated 180°. + +### 3. LED Heartbeat & Network Status + +The onboard **GPIO 8** LED provides visual feedback of the device's connectivity: + +* **Blinking:** The device is disconnected from the network. +* **Pulsing (Sinusoidal):** The device is successfully connected to WiFi. + +### 4. Splash Screen & Info + +Upon boot, the display shows the **Akemi Logo** and current **mDNS name or IP Address** for 5 seconds to help you locate the device on your network. + +### 5. Configurable Sleep Timer + +To prevent OLED burn-in, the screen automatically blanks after a period of inactivity (default: 60 seconds). It wakes up instantly when: + +* The physical button is pressed. +* Settings are changed via the WLED Web UI or API. + +--- + +## ⚙️ Configuration + +The following settings are available directly in the **WLED Usermod Settings** page (v0.15.3+): + +* **Enabled:** Toggle the OLED on/off. +* **Flip Display:** Rotates the UI 180° and adjusts internal offsets. +* **X/Y-Offset:** Fine-tune the UI position on your specific glass. +* **Sleep Timeout:** Set how many seconds to wait before the screen turns off. + +## 🔗 References & Inspiration + +* [AlexYeryomin/ESP32C3-OLED-72x40](https://github.com/AlexYeryomin/ESP32C3-OLED-72x40) - Driver implementation and original Micropython demo. +* [Kevin's Blog: ESP32-C3 0.42 OLED](https://emalliab.wordpress.com/2025/02/12/esp32-c3-0-42-oled/) - Deep dive into coordinate offsets and hardware constraints. \ No newline at end of file diff --git a/usermods/OLED_72x40/esp32-c3-super-mini.png b/usermods/OLED_72x40/esp32-c3-super-mini.png new file mode 100644 index 0000000000000000000000000000000000000000..ce1cd2ae82aa75b8e2bcd08e9f0812b02924408e GIT binary patch literal 84000 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 M07*qoM6N<$f??hDmH+?% literal 0 HcmV?d00001