Экран для вывода данных через COM-порт

Если у компьютера нет не только монитора, но и даже видео-выхода, а показания датчиков хотелось бы видеть, то решением может быть отправлять данные в виде строки в COM-порт, который будет слушать микроконтроллер и отображать приходящую строку на своём дисплее. Под катом простейшая реализация этого на микроконтроллере ATtiny13 и 0,96'-экране SSD1306 с разрешением 128×32.

8o7rxcnfj2m_ruez_o26ujrwigs.jpeg

Основная идея заключается в том, чтобы программная часть, отвечающая за сбор информации, выполнялась на ПК, напр. в bat или sh-скрипте, и потом собранные данные выводились штатными средствами ОС, напр. на COM-экранчик, примерно вот так

Получить температуру процессора
Отправить данные в COM-порт
Подохдать 5с
Получить температуру диска
Отправить данные в COM-порт
Подохдать 5с
Получить системное время
Отправить данные в COM-порт
Подохдать 5с
Вернуться в начало

Для прошивки микроконтроллера я использую китайский клон Arduino Pro mini, USB-UART-конвертер на CP2102 и Arduino IDE 1.8.19 с установленным MicroCore. Как именно прошивать, можно узнать на ютубе поискав «как прошить attiny13», из публикации на Хабре или из справки ниже.

Прошивка ATtiny13 посредством Arduino вкратце
  1. Подключаем Arduino через USB-UART-конвертер.
  2. Качаем Arduino IDE. Я использовал 1.8.16, чтобы работать в Windows 7.
  3. Идем File > Examples > 11. ArduinoISP > ArduinoISP. В Tools > Board выбираем вашу плату (у меня это Arduino Pro or Pro Mini), в качестве программатора выбираем AVRISP-mkII и загружаем скетч ISP на Arduino.
  4. Далее устанавливаем между ногами RST и GND конденсатор на 10uF и провода от ножек 10, 11, 12 и 13. Должно получиться как то так.
  5. Далее надо установить MicroCore. Для этого открываем File > Preferences и для поля Additional Board Manager URLs указываем https://mcudude.github.io/MicroCore/package_MCUdude_MicroCore_index.json. Закрываем настройки кнопкой OK, открываем Tools > Boards Manager.... В поиске вбиваем MicroCore и устанавливаем его. Если все сделано правильно, то в Boards появится пункт MicroCore, содержащий ATtiny13.
  6. Необходимо выставить Clock 9.6MHz, Bootloader: No и программатор Arduino as ISP
  7. Всё готово. Можно заливать скетчи в ATtiny13.

Прошиваемый скетч — здесь.

9djs-2s_bfymemfljgkyo1w61rs.png
Схема подключения экрана и микроконтроллера. Требуется питание 3.3В, напр. от оранжевого провода блока питания, т.к. дисплей не рассчитан на 5В.

Микроконтроллер нельзя подключить к COM-порту напрямую, поскольку порт использует -/+12В,
и потому нужен переходник

pcenhwszvzida5mju2cmclvmmto.png
За основу взята часть схемы, отвечающая за чтение данных из порта, из статьи отсюда.

Результат на макетной плате
zzxxxkeikfnujt5ptwkmweogvpy.jpeg

Зеленый и синий провода подключены к COM-порту к пинам TX и GND соответственно, а белый в 24-пиновый ATX разъем на материнской плате к 3.3В.

Если COM-порта на компьютере нет или хочется избежать пайки, то можно воспользоваться USB-UART-конвертером на 3.3В. В этом случае питание и PB1-порт микроконтроллера надо соединить с питанием и TX-портом конвертера. Рекомендую заранее убедиться, что для чипа конвертера в используемой ОС есть нужный драйвер.

После подключения микроконтроллера к компьютеру, необходимо выполнить настройку COM-порта, задав скорость 115200 и для Linux добавив разрешения на запись. Это можно сделать в командной строке/терминале

Для Windows
mode COM3 BAUD=115200 PARITY=n DATA=8
echo HELLO > COM3
Для Linux
sudo chmod o+rw /dev/ttyS0
sudo stty -F /dev/ttyS0 115200

echo "HELLO" > /dev/ttyS0

Используйте ttyUSB0 вместо ttyS0, если подключение выполнено USB-UART-конвертером.

Поскольку экран маленький и на него помещается только 5 полноценных символов, что обычно не требуется, если надо показать напр. температуру, то в прошивку была добавлена возможность динамически изменять используемый размер шрифта, путем модификатора @N, где N: 0 — полноразмерный шрифт 20×32, используемый по умолчанию, 1 — узкий шрифт 10×32, как на КДПВ, 2, 3 и 4 — мелкий шрифт 10×16 с выравниванием по верху, центру и низу соответственно. Для отключения экрана достаточно отправить пустое сообщение.

fnuskthxdnnik7v_msvgsb0q6_i.jpeg
Пример отображения строки @3CPU @066@3C

Дисплей SDD1306 и микроконтроллер ATtiny13 были выбраны для проекта поскольку нашлись в запасах. Покупать ATtiny13 сейчас, чтобы повторить проект, в виду высоких текущих цен на AVR, — особого смысла нет. За чуть больший ценник можно взять уже ESP8266 с большими ресурсами, за счет которых удастся реализовать не только поддержку нижнего регистра букв, но и даже кириллицу с выводом на несколько экранов, которые также можно заменить на 2+ дюймовые TFT для лучшей читаемости. С другой стороны, число деталей получилось минимальным, что тоже неплохо.

Страница проекта — https://github.com/little-brother/attiny13-serial-display.

© Habrahabr.ru