Arduino: универсальный дисплейный шилд
Для работы над книгами и проектами мне приходится подключать различные дисплеи к платам Arduino. Обычно это один из трех дисплеев:
- TFT 240×320
- TFT 128×160
- OLED 128×64
Чтобы сэкономить время на сборку макетов и не вспоминать каждый раз схему подключения, я изготовил универсальный дисплейный шилд для Arduino Uno R3:
Для подключения к Arduino Uno R3 применяются сквозные разъемы (Stackable Header), которые можно заказать на Aliexpress:
Благодаря сквозным разъемам, даже при установленном дисплее сохраняется полный доступ ко всем выводам платы Arduino.
Постарайтесь приобрести сквозные разъемы с максимально толстой и жесткой штыревой частью. Мне достались не очень хорошие разъемы с тонкими штырьками. Пришлось слегка изогнуть их, чтобы обеспечить надежный контакт с платой Arduino.
С обратной стороны платы находятся четыре резистора сопротивлением 1,5 кОм для согласования пятивольтовой логики Arduino с трехвольтовой логикой дисплеев. Рекомендую использовать резисторы именно этого номинала, чтобы надежно работали разные дисплеи. С резисторами меньшего номинала не у всех дисплеев будет срабатывать сброс чипа, а с резисторами номиналом больше 2 кОм может ненадежно работать шина SPI.
Для дисплея TFT 240×320 нужен гасящий резистор 15-30 ом в цепи подсветки, подключенной к линии питания +3,3 вольт. Подсветка дисплея TFT 128×160 подключается напрямую к линии +5 вольт. Сброс TFT дисплеев подключен к линии сброса Arduino и не занимает лишний вывод GPIO.
Теперь для отладки проекта с разными дисплеями достаточно установить поверх Arduino Uno R3 дисплейный шилд и вставить в разъем один из дисплеев:
Оба дисплея TFT идеально вписываются в расстояние между линейками контактов Arduino и не мешают подключать соединительные провода. На шилде очень много свободного места. Во второй версии шилда хочу добавить модуль FLASH памяти, на котором можно развернуть имитацию файловой системы и компактный слот для карты памяти MicroSD. Дисплеи TFT оборудованы слотом для SD карт, но вставленная в него крупногабаритная карта памяти загораживает один из разъемов Arduino Uno. Да и вообще, формфактор SD уже изрядно устарел.
Изменения в стандартных скетчах
Для оптимизации разводки платы незначительно изменена нумерация выводов GPIO, к которым подключены выводы дисплеев RES, CS и DC.
Для скетчей с дисплеем 240×320 на чипе ILI9341 раскладка выводов выглядит так:
#include "SPI.h" #include "Adafruit_GFX.h" #include "Adafruit_ILI9341.h" // Use THIS pins for universal display shield #define TFT_DC 10 #define TFT_CS 9 Adafruit_ILI9341 tft = Adafruit_ILI9341(TFT_CS, TFT_DC);
Для дисплея 128×160 на чипе ST7735 добавляется определение вывода RST:
#include <Adafruit_GFX.h> // Core graphics library #include <Adafruit_ST7735.h> // Hardware-specific library #include <SPI.h> // For the breakout, you can use any 2 or 3 pins // These pins will also work for the 1.8" TFT shield #define TFT_CS 9 #define TFT_DC 10 #define TFT_RST 0 // Display reset connected to Arduino Uno RESET Adafruit_ST7735 tft = Adafruit_ST7735(TFT_CS, TFT_DC, TFT_RST);
Схема, печатная плата и примеры скетчей
Архив с рабочими библиотеками дисплеев и тестовыми примерами скетчей.