Экран для вывода данных через COM-порт
Если у компьютера нет не только монитора, но и даже видео-выхода, а показания датчиков хотелось бы видеть, то решением может быть отправлять данные в виде строки в COM-порт, который будет слушать микроконтроллер и отображать приходящую строку на своём дисплее. Под катом простейшая реализация этого на микроконтроллере ATtiny13 и 0,96'-экране SSD1306 с разрешением 128×32.
Основная идея заключается в том, чтобы программная часть, отвечающая за сбор информации, выполнялась на ПК, напр. в bat или sh-скрипте, и потом собранные данные выводились штатными средствами ОС, напр. на COM-экранчик, примерно вот так
Получить температуру процессора
Отправить данные в COM-порт
Подохдать 5с
Получить температуру диска
Отправить данные в COM-порт
Подохдать 5с
Получить системное время
Отправить данные в COM-порт
Подохдать 5с
Вернуться в начало
Для прошивки микроконтроллера я использую китайский клон Arduino Pro mini, USB-UART-конвертер на CP2102 и Arduino IDE 1.8.19 с установленным MicroCore. Как именно прошивать, можно узнать на ютубе поискав «как прошить attiny13», из публикации на Хабре или из справки ниже.
- Подключаем Arduino через USB-UART-конвертер.
- Качаем Arduino IDE. Я использовал 1.8.16, чтобы работать в Windows 7.
- Идем
File > Examples > 11. ArduinoISP > ArduinoISP
. ВTools > Board
выбираем вашу плату (у меня это Arduino Pro or Pro Mini), в качестве программатора выбираемAVRISP-mkII
и загружаем скетч ISP на Arduino. - Далее устанавливаем между ногами RST и GND конденсатор на 10uF и провода от ножек 10, 11, 12 и 13. Должно получиться как то так.
- Далее надо установить 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. - Необходимо выставить
Clock 9.6MHz
,Bootloader: No
и программаторArduino as ISP
- Всё готово. Можно заливать скетчи в ATtiny13.
Прошиваемый скетч — здесь.
Схема подключения экрана и микроконтроллера. Требуется питание 3.3В, напр. от оранжевого провода блока питания, т.к. дисплей не рассчитан на 5В.
Микроконтроллер нельзя подключить к COM-порту напрямую, поскольку порт использует -/+12В,
и потому нужен переходник
За основу взята часть схемы, отвечающая за чтение данных из порта, из статьи отсюда.
Зеленый и синий провода подключены к COM-порту к пинам TX и GND соответственно, а белый в 24-пиновый ATX разъем на материнской плате к 3.3В.
Если COM-порта на компьютере нет или хочется избежать пайки, то можно воспользоваться USB-UART-конвертером на 3.3В. В этом случае питание и PB1-порт микроконтроллера надо соединить с питанием и TX-портом конвертера. Рекомендую заранее убедиться, что для чипа конвертера в используемой ОС есть нужный драйвер.
После подключения микроконтроллера к компьютеру, необходимо выполнить настройку COM-порта, задав скорость 115200 и для Linux добавив разрешения на запись. Это можно сделать в командной строке/терминале
mode COM3 BAUD=115200 PARITY=n DATA=8
echo HELLO > COM3
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 с выравниванием по верху, центру и низу соответственно. Для отключения экрана достаточно отправить пустое сообщение.
Пример отображения строки @3CPU @066@3C
Дисплей SDD1306 и микроконтроллер ATtiny13 были выбраны для проекта поскольку нашлись в запасах. Покупать ATtiny13 сейчас, чтобы повторить проект, в виду высоких текущих цен на AVR, — особого смысла нет. За чуть больший ценник можно взять уже ESP8266 с большими ресурсами, за счет которых удастся реализовать не только поддержку нижнего регистра букв, но и даже кириллицу с выводом на несколько экранов, которые также можно заменить на 2+ дюймовые TFT для лучшей читаемости. С другой стороны, число деталей получилось минимальным, что тоже неплохо.
Страница проекта — https://github.com/little-brother/attiny13-serial-display.