Привет! Будучи любителем - энтузиастом электроники, я уверен, что всё что мы делаем – радиоэлектронные игрушки – самоделки, или большие проекты, все это от любопытства и лени. Любопытство стремится понять и постичь необъятное, не познанное, разобраться, как оно там работает, чего делает, как двигается. А лень изобретает, чтобы такого придумать, чтобы не вставать, не подходить, не поднимать, не запачкаться или еще чего ни будь важное.
Так как видеть информацию, это лучше, чем разбираться чего там сейчас должно произойти в нашем устройстве, или уже произошло, или происходит, мы обязательно захотим получить эту самую полезную информацию от наших микроконтроллеров, датчиков, или прочих устройств. А получать, я во всяком случае, хочу какие-либо сообщения, вроде вопросов, предупреждений, напоминаний, смайликов, звездочек, сердечек и тому подобное.
Для тех, у кого тоже возникло подобное желание, - вот краткое руководство по подключению и проверке маленьких и не дорогих дисплеев OLED.
Далее речь пойдет об одной из широко доступных для радиолюбителей моделях OLED дисплеев, управляемых чипом SSD1306, с размером экрана 0,96-дюймов и разрешением 128*64 или 128*32 точки. Эти дисплеи идеально подходят для не больших радиолюбительских конструкций и самоделок.
Шаг 1: Основные понятия
Подключать мы его будем к Arduino UNO / NANO, ну и программировать, соответственном мы его будем тоже через Arduino.
- OLED это Organic Light-Emitting Diode, т.е., полупроводниковый прибор из органических соединений, который начинает излучать свет при прохождении через него электрического тока.
- ARDUINO - это платформа для обучения и построения систем автоматики и робототехники.
- ArduinoIDE - среда разработки. Это бесплатная программа для программирования Arduino.
- I2C – Inter-Integrated Circuits, межмикросхемная линия связи.
- Скетч, он же, код, он же программа - терминология Arduino.
Следуйте инструкциям, чтобы понять, как правильно подключить и настроить OLED дисплей к Arduino и как отобразить собственное сообщение на его дисплее.
Делаем все по шагам.
Шаг 2: Комплектующие
Нам потребуются всего четыре вещи:
- 1. Сам OLED дисплей 0,96” (можно купить на Aliexpress или Ebay, - долго, но дешево!).
- 2. Arduino UNO / Nano (там же где дисплей).
- 3. Соединительные провода (там же).
- 4. Компьютер или ноутбук с установленной ArduinoIDE.
Вообще покупка деталей для различных проектов на Aliexpress и Ebay очень прикольная штука, пока занимаешься одним проектом, детали к другому уже на подходе. Главное не забыть сделать заказ.
Шаг 3: Подключение дисплея
Управление дисплеем осуществляет чип SSD1306, который поддерживает пять протоколов связи и один из которых I2C. Данные по этому протоколу передаются всего по двум проводам, а чем меньше проводов в корпусе, тем лучше, так что нам он вполне подходит. Но! Встречаются модули с протоколом SPI и даже с переключением протоколов, так что будьте внимательны при покупке данного модуля.
Используемые выводы:
OLED дисплей - SCL/SCK (clock) и SDA (data), «Плюс» питания (VCC) и «Минус» питания (GND).
Используемые выводы:
Arduino UNO - SCL/SCK на A5 и SSD на A4, «Плюс» питания (+5V) и «Минус» питания (GND).
Подсоединяем дисплей к Arduino:
- Vcc - 5V
- GND - GND
- SDA - A4
- SCL - A5
Шаг 4: Сканер I2C
Каждое устройство на шине I2C имеет шестнадцатеричный адрес, поменять нельзя, он вшит намертво, каждый ответственный производитель должен где-то на корпусе или в инструкции указать его. Бывают модули с переключателями и перемычками, которыми можно изменить адрес, но… если устройства дешевые, до безобразия, то производитель может и не удосужиться заниматься такой мелочью, поэтому его придется определять самостоятельно.
Всего на шине может использоваться до 127 адресов - 119 для устройств и 8 адресов служебных. Общение ведется по этим адресам. Есть главный, он же Master, а есть ведомый, он же Slave, - Мастера запрашивают, ведомые отвечают, все просто.
Поскольку на нашем OLED-дисплей используется протокол связи I2C, а адрес может быть и не указан, мы сами попробуем узнать этот самый адрес.
Это можно сделать, загрузив коротенький скетч на свою плату Arduino с подключенным OLED. НО!
Не торопитесь сразу заливать скетч в Arduino! Давайте для начала загрузим «драйвера», т.е. подключим библиотеки, а для этого сразу перейдем к «Шагу №5», а затем вернемся и продолжим.
Шаг 4: Продолжение:
Скачать КОД Finder_I2C_Hex_Address.ino, загрузить в Arduino.
Открыть «Монитор порта», выставить скорость 9600 и если все правильно подключено, программа покажет адрес устройства, в моем случаи OLED с адресом 0x3F.
Шаг 5: Загрузка и подключение библиотек
Для того чтобы все правильно заработало, а вам не пришлось изобретать велосипед, нужно подключить пару библиотек в среду ArduinoIDE, а именно: ADAFRUIT GFX и ADAFRUIT SSD1306, они необходимы для того чтобы Arduino смогла самостоятельно общаться с OLED дисплеем.
Вы можете подключить эти библиотеки, выполнив следующие шаги.
- 1. В ArduinoIDE идем в меню Скетч / Sketch.
- 2. Выбираем «Включить библиотеки» / Include Libraries.
- 3.Выбираем «Управление библиотеками» / Managed Libraries.
- 4. Находим ADAFRUIT GFX и устанавливаем их.
- 5. Находим ADAFRUIT SSD1306 и устанавливаем их.
Со свежими версиями библиотек, дисплей у меня работал криво, может конечно это обусловлено кривизной рук, но после того, как я установил самые первые версии этих библиотек, все стало показываться ровненько и красиво. В памяти почему-то всплывают строчки Пушкина:
...и опыт, сын ошибок трудных,
и гений, парадоксов друг.
Другой способ установки библиотек – найти, скачать и установить эти библиотеки самостоятельно.
Для примера Github:
https://github.com/adafruit/Adafruit-GFX-Library
https://github.com/adafruit/Adafruit_SSD1306
Это те же Adafruit – библиотеки, но подобные библиотеки легко ищутся в поисковиках, по запросу OLED I2C. Многие энтузиасты пишут библиотеки «под себя», а затем выкладывают их в паутину. Какую библиотеку использовать, - решать вам.
Для того чтобы дисплей отображал русские буквы, тоже нужны специальные библиотеки, но это уже отдельная тема для отдельной статьи.
После того как библиотеки установлены, можно вернуться к выполнению 4-го шага, и узнать наконец шестнадцатеричный адрес вашего дисплея.
Шаг 6: Тестирование дисплея
Чтобы проверить, работает ли все так, как ожидалось, запустите пример для проверки из ArduinoIDE.
Для этого:
Перейти ФАЙЛ> ПРИМЕРЫ> SSD 1306> Выбрать 128x64 i2c
Если вы получите «Ошибку», попробуйте выбрать SSD 1306> 128x32 i2c.
Если снова «Ошибка» попробуйте изменит адрес I2C в строке 61, демонстрационного кода, и замените его адресом вашего дисплея, который вы определили на шаге №4.
Если снова ошибка, можно попробовать отредактировать файл Adafruit_SSD1306.h, он находится в папке с библиотеками Arduino.
Откройте файл Adafruit_SSD1306.h в текстовом редакторе и найдите строки:
//#define SSD1306_128_64
#define SSD1306_128_32
// #define SSD1306_96_16
Раскомментируйте строчку:
#define SSD1306_128_64.
Должно получиться так:
#define SSD1306_128_64
//#define SSD1306_128_32
// #define SSD1306_96_16
Если снова ошибка – необходимо проверить правильность соединений.
После окончания загрузки вы увидите тестовую анимацию на экране, это означает, что вы успешно настроили свой OLED дисплей.
Когда вы вдоволь насладитесь сей анимацией, можете переходить к следующему шагу.
Шаг 7: Пишем свое собственное сообщение
Для написания собственного сообщения, сначала создадим новый скетч в среде программирования ArduinoIDE.
В заголовке мы подключаем 4 библиотеки:
#include <SPI.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
Затем пишем протокол сброса:
#define OLED_RESET 4
Adafruit_SSD1306 display(OLED_RESET);
В VOID SETUP указываем шестнадцатеричный адрес нашего дисплея 0x3C, который мы узнали на «Шаге №4».
Затем, инициализируем дисплей и очищаем его:
display.begin(SSD1306_SWITCHCAPVCC, 0x3C);
display.clearDisplay();
Далее в VOID LOOP пишем основной код, то есть наше сообщение, которое хотим отобразить на дисплее.
Для этого описываем размер текста, цвет текста, позицию курсора, и наконец, выводим сообщение с помощью команды println:
display.setTextSize(2);
display.setTextColor(WHITE);
display.setCursor(0,0);
display.println("Well done!");
display.display();
В конце не забудьте написать display.display, чтобы изображение вывелось на экран, иначе получите пустоту.
Если вы все сделали правильно, то на дисплеи появится сообщение.
Здесь КОД Starting_with_Arduino_OLED.ino нашей программы:
code.zip
[946 b] (cкачиваний: 5126)