В самодельных проектах может потребоваться вывод информации на экран. Моя цель - сделать самодельный измеритель концентрации CO2 в воздухе. Он должен сигналить о повышенной концентрации углекислого газа в воздухе и показывать текущую концентрацию углекислого газа в воздухе. Я не стал ограничивать себя в применяемом оборудовании и, для начала, захотел сделать устройство на контроллере micro:bit. Теперь я вижу, что это была не лучшая идея. Самая большая проблема в том, что датчик концентрации углекислого газа S8 имеет рабочее напряжение 5 В, а рабочее напряжение micro:bit - 3,3 В. Значит нужно использовать преобразователь логических уровней, что усложняет схему. Но начал я именно с micro:bit. Я нашёл недорогой экран на 1.8 дюйма производства компании Waveshare и опробовал его.
Экран достаточно большой и яркий. Управлять им легко. Драйвер экрана имеет собственную видеопамять, поэтому не требуется тратить память micro:bit для вывода на этот экран. Он работает с рабочим напряжением micro:bit - 3.3 В и не требует внешнего источника тока. Это всё плюсы. Минусы перевешивают. Основной минус в том, что экран занимает большую часть пинов micro:bit. Для общения с внешним миром остаются выводы питания VCC/GND и три пина для SPI интерфейса. Кроме того, код для работы с экраном есть только на JavaScript. Чтобы писать программу на python, например, потребуется сперва написать собственный драйвер этого дисплея. Думаю, нет смысла заморачиваться.
Писать программы с выводом на экран довольно просто. Переходим по адресу проекта. Выбираем нужный язык программирования, Blocks
или JavaScript
. Программа ниже приведена именно на JavaScript
. Подключаем модуль для работы с экраном: Advanced --> Add package
. В появившееся окно вставляем адрес драйвера экрана. В среде разработки появится новый блок LCD1IN8
. Все команды для работы с экраном можно перетаскивать оттуда. Приведу минимальную программу для работы с экраном. Она ничего не делает, только демонстрирует возможности видеовывода.
LCD1IN8.LCD_Init()
LCD1IN8.LCD_Clear()
LCD1IN8.LCD_SetBL(123)
LCD1IN8.DrawPoint(24, 28, LCD1IN8.Get_Color(LCD_COLOR.GREEN), DOT_PIXEL.DOT_PIXEL_2)
LCD1IN8.DrawLine(0, 0, 51, 32, LCD1IN8.Get_Color(LCD_COLOR.RED), DOT_PIXEL.DOT_PIXEL_1, LINE_STYLE.LINE_SOLID)
LCD1IN8.DisString(60, 60, "Hello world", LCD1IN8.Get_Color(LCD_COLOR.BLUE))
LCD1IN8.LCD_Display()
basic.forever(() => {
})
Вывод. Я купил экран спонтанно, не прочитав его характеристик. Этот экран оставляет слишком мало пинов для использования в реальных проектах.