Найти в Дзене
Заметки кота

ESP32+SH1106(SSD1306)+EC11+Кнопки

Рассмотрим примеры использования оборудования. Имеем дело с экраном SH1106(SSD1306) разрешение 128х64. Пример работы с экраном на базе библиотеки Adafruit_SH110x. Программа будет изображать на экране разные фигуры, в конце будет анимация с падающими фигурами звезд. Исходный код на базе примера из использованной библиотеки: Должно получиться примерно следующее: Важное замечание! Пример работает только если эту прошивку заливать сразу после прошивки с использованием библиотеки U8G2, не делая перезагрузки по питанию. Если прошить предложенным выше вариантом прошивки и перезагрузить устройство по питанию, то на экране ничего не будет. С причиной не разобрался. На данный момент считаю что библиотека Adafruit имеет проблемы при работе с рассматриваемым экраном. Пример работы с экраном на базе библиотеки u8g2. Простой вывод текста на экран. Исходный код примера: Рассматриваемая библиотека хорошо работает через драйвер SSD1306, с драйвером SH1106 в моем случае есть проблемы - сдвиг адресации
Оглавление

Рассмотрим примеры использования оборудования.

ESP32-WROOM
ESP32-WROOM
SH1106(SSD1306)+EC11+Кнопки
SH1106(SSD1306)+EC11+Кнопки

Имеем дело с экраном SH1106(SSD1306) разрешение 128х64.

ESP32+SH1106 (библиотека от Adafruit)

Пример работы с экраном на базе библиотеки Adafruit_SH110x.

GitHub - adafruit/Adafruit_SH110x: Arduino library for SH110x based monochrome OLEDs

Программа будет изображать на экране разные фигуры, в конце будет анимация с падающими фигурами звезд.

Исходный код на базе примера из использованной библиотеки:

19_07_2025__SH1106_Adafruit.ino

Должно получиться примерно следующее:

Важное замечание! Пример работает только если эту прошивку заливать сразу после прошивки с использованием библиотеки U8G2, не делая перезагрузки по питанию. Если прошить предложенным выше вариантом прошивки и перезагрузить устройство по питанию, то на экране ничего не будет. С причиной не разобрался. На данный момент считаю что библиотека Adafruit имеет проблемы при работе с рассматриваемым экраном.

ESP32+SSD1306(SH1106) (библиотека U8G2)

Пример работы с экраном на базе библиотеки u8g2.

GitHub - olikraus/u8g2: U8glib library for monochrome displays, version 2

Простой вывод текста на экран.

Исходный код примера:

19_07_2025__SH1106_U8g2.ino

Рассматриваемая библиотека хорошо работает через драйвер SSD1306, с драйвером SH1106 в моем случае есть проблемы - сдвиг адресации картинки на два пикселя вправо, через драйвер SSD1306 все в порядке. В вашем случае может быть наоборот.

-3

ESP32+EC11 (библиотека AiEsp32RotaryEncoder)

Используемая библиотека AiEsp32RotaryEncoder:

GitHub - igorantolic/ai-esp32-rotary-encoder: Easy implement rotary encoder to your application using microcontroler like ESP32

Исходный код прошивки:

20_07_2025__ESP32_EC11_AiEsp32RotaryEncoder.ino

Результат использования:

-4

ESP32+кнопки (библиотека ESP32_Button)

Используемая библиотека ESP32_Button:

GitHub - esp-arduino-libs/ESP32_Button: Arduino library of driving button for the ESP SoCs

Исходный код прошивки:

20_07_2025__ESP32_ESP32_Button.ino

Результат использования:

-5

ESP32+SSD1306(SH1106)+EC11+Кнопки

Объединим функционал и заиспользуем весь потенциал в простом примере, где будем двигать надпись на экране: енкодером - влево/вправо, кнопками - вверх/вниз, нажатие на енкодер - изменяем размер текста.

Исходный код прошивки:

20_07_2025__ESP32_SH1106_EC11_Buttons.ino

Результат:

Можете заметить, что при уходе надписи за правый край экрана, в левой части появляются артефакты, это связано с тем, что используется драйвер на разрешение 128х64 точек, в то время как имеющаяся реализация экрана имеет разрешение 126х64, соответствующего драйвера не было найден, поэтому использовал вариант на 128х64.