Скачайте и установите Adafruit SH1106 и Adafruit-GFX-Library в папку libraries (arduino-1.xx.xx\libraries)

Основные функции для работы с дисплеем

  • begin(SH1106_SWITCHCAPVCC, 0x3C) — Инициализация дисплея
  • clearDisplay() — очистить кадр.
  • display() — отрисовать кадр (выводит изображение на дисплей).
  • setTextSize(i) — установить размер текста(i-число).
  • setTextColor(color) — установить цвет текста (BLACK, WHITE).
  • print(s) — написать текст, число и т.д.(s-число, строка и т.д.).
  • println(s) — тоже самое что и print(s), но переводит курсор на новую строку (замена Enter на клавиатуре).
  • setRotation(i) — поворот дисплея на 90,180,270,360 градусов(i — число от 0 до 3)
  • drawBitmap (x, y, *bitmap, w, h, color) — рисует картинку(bitmap) в координатах x;y, ширины w, высоты h, цветом color.
  • drawPixel(x,y,color) закрасить пиксель в координатах x;y выбранным цветом (WHITE, BLACK).

При использовании print и println как правило данные записываются в RAM память. Что бы принудительно записать данные в FLASH память используйте макрос F().
Например:

display.println F("Hello, world!");

Простой вывод текста на дисплей

  1. #include <Wire.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Adafruit_SH1106.h>
  4.  
  5. #define OLED_RESET 4
  6. Adafruit_SH1106 display(OLED_RESET);//Создаём объект дисплей
  7.  
  8. void setup()
  9. {
  10.   display.begin(SH1106_SWITCHCAPVCC, 0x3C);//Инициализация дисплея
  11.   display.clearDisplay();//Очистка буфера
  12.   display.display();//Очистка буфера
  13.   display.setCursor(0,0);//Устанавливаем курсор в левый-верхний угол
  14.   display.setTextSize(1);//Установка размера шрифта
  15.   display.setTextColor(WHITE);//Установка цвета текста
  16.   display.println("Hello, world!");//Пишем на дисплей     
  17.   display.display();//Отображаем то что написали
  18. }

Пример динамического изменения кадров

  1. #include <Wire.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Adafruit_SH1106.h>
  4.  
  5. #define OLED_RESET 4
  6. Adafruit_SH1106 display(OLED_RESET);//Создаём объект дисплей
  7. long counter = 0;//Переменная счётчик
  8. void setup()
  9. {
  10.   display.begin(SH1106_SWITCHCAPVCC, 0x3C);//Инициализация дисплея
  11.   display.clearDisplay();//Очистка буфера
  12.   display.display();//Очистка буфера
  13.   display.setTextSize(1);//Установка размера шрифта
  14.   display.setTextColor(WHITE);//Установка цвета текста  
  15. }
  16. void loop()
  17. {
  18.  display.clearDisplay();//Начинаем заново рисовать кадр
  19.  display.setCursor(0,0);//Устанавливаем курсор в левый-верхний угол
  20.  display.print("Frame: ");//Пишем на кадре
  21.  display.println(counter);//Пишем на кадре   
  22.  display.display();//Выводим кадр на дисплей
  23.  counter++;
  24. }

Мы добавили счётчик кадров и выводим его каждый раз.

Пример использования дисплея и I2C сканера.

  1. #include <Wire.h>
  2. #include <Adafruit_GFX.h>
  3. #include <Adafruit_SH1106.h>
  4.  
  5. #define OLED_RESET 4
  6. Adafruit_SH1106 display(OLED_RESET);//Создаём объект дисплей
  7.  
  8. void setup()
  9. {
  10.   display.begin(SH1106_SWITCHCAPVCC, 0x3C);//Инициализация дисплея
  11.   display.clearDisplay();//Очистка дисплея
  12.   display.display();
  13.   display.setTextSize(1);//Установка размера шрифта
  14.   display.setTextColor(WHITE);//Установка цвета текста
  15. }
  16.  
  17. void loop()
  18. {
  19.   byte error, address;//Переменные для хранения ошибок и подсчёта адресов
  20.   int nDevices;//Переменная для подсчёта количества устройств
  21.   display.setCursor(0, 0);//Устанавливаем курсор в начало
  22.   display.println("Scanning...");//Начинаем сканирование
  23.   nDevices = 0;
  24.   for (address = 1; address < 127; address++ )
  25.   {
  26.     Wire.beginTransmission(address);
  27.     error = Wire.endTransmission();
  28.  
  29.     if (error == 0)
  30.     {
  31.       display.print("I2C device found at address 0x");
  32.       if (address < 16)
  33.         display.print("0");
  34.       display.print(address, HEX);
  35.       nDevices++;
  36.     }
  37.     else if (error == 4)
  38.     {
  39.       display.print("Unknown error at address 0x");
  40.       if (address < 16)
  41.         display.print("0");
  42.       display.println(address, HEX);
  43.     }
  44.   }
  45.   if (nDevices == 0)
  46.     display.println("No I2C devices found");
  47.   else
  48.     display.println("done");
  49.   display.display();
  50.   delay(5000);           // Ждём 5 секунд перед следующим сканированием
  51.   display.clearDisplay();
  52. }