diff --git a/archetypes/post.md b/archetypes/post.md index a485518..f00bf55 100644 --- a/archetypes/post.md +++ b/archetypes/post.md @@ -10,7 +10,6 @@ hidemeta: false comments: false description: "Desc Text." canonicalURL: "https://canonical.url/to/page" -disableHLJS: true # to disable highlightjs disableShare: false disableHLJS: false hideSummary: false diff --git a/content/projects/How I sped up Yocto setup with Docker.md b/content/projects/How I sped up Yocto setup with Docker.md index d4cc1b1..eadc903 100644 --- a/content/projects/How I sped up Yocto setup with Docker.md +++ b/content/projects/How I sped up Yocto setup with Docker.md @@ -10,7 +10,6 @@ hidemeta: false comments: false description: "Enhancing given environments to avoid extra work." canonicalURL: "https://canonical.url/to/page" -disableHLJS: true # to disable highlightjs disableShare: false disableHLJS: false hideSummary: false diff --git a/content/projects/esp32-display/index.md b/content/projects/esp32-display/index.md new file mode 100644 index 0000000..6aa7bc1 --- /dev/null +++ b/content/projects/esp32-display/index.md @@ -0,0 +1,52 @@ +--- +title: "Esp32 OLED Counter Display" +date: 2025-11-10T19:10:33+02:00 +tags: [] +author: "Elias Ahokas" +showToc: true +TocOpen: false +draft: false +hidemeta: false +comments: false +description: "Desc Text." +canonicalURL: "https://canonical.url/to/page" +disableShare: false +disableHLJS: false +hideSummary: false +searchHidden: false +ShowReadingTime: true +ShowBreadCrumbs: true +ShowPostNavLinks: true +ShowWordCount: true +ShowRssButtonInSectionTermList: true +UseHugoToc: true +cover: + image: "" + alt: "" + caption: "" + relative: false + hidden: true + +--- + +![Project working](photo_2025-11-10_15-36-01.jpg) + +Integrating LVGL embedded graphics library with SSD1306 OLED display on ESP32. + +[Source code](https://git.sirian.me/sirian/oled-counter-esp32/src/branch/main) + +## Project goal + +Get LVGL working on a 128x64 monochrome OLED display connected to ESP32 with I2C. Quick googling resulted only in outdated libraries. This implementation uses the latest libraries to ensure future proofing. + +## Main challenge + +LVGL outputs pixels in a linear framebuffer format but the display uses page addressing where the screen is divided into 8 horizontal pages of 128x8 pixels. Required implementing a custom flush callback to convert between these formats. + +## Implementation + +- Custom I2C driver for SSD1306 using ESP-IDF's master driver API +- Multi-threaded FreeRTOS architecture separating rendering, display updates and application logic +- Pixel format conversion algorithm for transforming LVGL's I1 framebuffer to SSD1306 page format +- Queue based page transmission system for non blocking I2C operations +- Semaphore protected flush pipeline ensuring thread safe rendering \ No newline at end of file diff --git a/content/projects/esp32-display/photo_2025-11-10_15-36-01.jpg b/content/projects/esp32-display/photo_2025-11-10_15-36-01.jpg new file mode 100644 index 0000000..d7e516f Binary files /dev/null and b/content/projects/esp32-display/photo_2025-11-10_15-36-01.jpg differ diff --git a/content/projects/hello_portfolio.md b/content/projects/hello_portfolio.md index 1a1ca85..ba58481 100644 --- a/content/projects/hello_portfolio.md +++ b/content/projects/hello_portfolio.md @@ -10,7 +10,6 @@ hidemeta: false comments: false description: "Desc Text." canonicalURL: "https://canonical.url/to/page" -disableHLJS: true # to disable highlightjs disableShare: false disableHLJS: false hideSummary: false