В этом примере рассматривается подключение 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(); }
После компилирования и прошивки должно получитсья следующее: