В этом примере рассматривается подключение OLED дисплея на контроллере SH1106 к ESP32 и программирование его в среде Ардуино.
Схема подключения OLED дисплея на контроллере SH1106 к ESP32:

Соединяем таким образом:
[ESP32 3.3V – OLED VCC]
[ESP32 GND – OLED GND]
[ESP32 IO12– OLED SDA]
[ESP32 IO14 – OLED SCL]
Внимание: если во время прошивки ESP32 вы увидите md5 error, то отключите питание дислплея от вывода ESP32 "3.3V", а после прошивки подключите обратно (в программе для этого сделана задержка в две секунды ( delay(2000) ) в функции setup(), чтобы успеть подключить обратно) или можно использовать внешнее питсание для дисплея.
Контроллер SH1106 имеет адрес 0x3C.
Программа
Для взаимодействия с контроллером SH1106OLED по шине I2C мы будем использовать библиотеку ssh1106-oled. Эта библиотека зависима от библиотеки Adafruit-GFX так что ее тоже нужно скачать и установить. С помощью этих двух библиотек можно не только выводить текст на дисплей, но и некоторую графику.
Библиотеки можно скачать отсюда:
Распакованные папки скопируйте в папку библиотек Ардуино:
C:/Users/[YOUR_USER_NAME]/Documents/Arduino/libraries
Библиотека поддерживает следующие классы и интерфейсы:
-
Adafruit_SH1106 display(sda, scl): создает экземпляр объекта OLED screen с указанными пинами I2C
-
begin(uint8_t switchvcc = SH1106_SWITCHCAPVCC, uint8_t i2caddr = SH1106_I2C_ADDRESS, bool reset=true): инициализация OLED, с помощью флага SH1106_SWITCHCAPVCC мы соединяем вывод OLED VCC с выводом ESP 3.3V, адрес I2C OLED в нашем случае 0x3C
-
display(): выводит буфер дисплея на дисплей
-
width(): возвращает ширину дисплея
-
height(): возвращает высоту дисплея
-
println(text): выводит текст на дисплей
-
setCursor(x,y): устанавливает курсор в позицию (x, y)
-
drawCircle(): выводит окружность на дисплей
Более подробно все фунцкии расписаны в файле “Adafruit_GFX.h”
Создадим в Arduino проект и вставим следующий код:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SH1106.h>
#define OLED_SDA 12
#define OLED_SCL 14
Adafruit_SH1106 display(12, 14);
void setup() {
Serial.begin(115200);
delay(2000);
/* initialize OLED with I2C address 0x3C */
display.begin(SH1106_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
}
void loop() {
/* set text size, color, cursor position,
set buffer with Hello world and show off*/
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Hello, world!");
display.display();
delay(2000);
display.clearDisplay();
}
После компилирования и прошивки должно получитсья следующее:
