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

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Прежде чем перейти к статье, хочу вам представить, экономическую онлайн игру Brave Knights, в которой вы можете играть и зарабатывать. Регистируйтесь, играйте и зарабатывайте!

Если у компьютера нет не только монитора, но и даже видео-выхода, а показания датчиков хотелось бы видеть, то решением может быть отправлять данные в виде строки в 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», из публикации на Хабре или из справки ниже.
Прошивка 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.

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


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

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


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


Зеленый и синий провода подключены к 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 — мелкий шрифт 10x16 с выравниванием по верху, центру и низу соответственно. Для отключения экрана достаточно отправить пустое сообщение.


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

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

Страница проекта — https://github.com/little-brother/attiny13-serial-display.
Источник: https://habr.com/ru/articles/824810/


Интересные статьи

Интересные статьи

Приветствую всех читателей! Меня зовут Николай Самсонов. Я являюсь руководителем платформы данных в команде Учи.ру. В своей работе часто сталкиваюсь с ситуацией, когда бизнесу нужны метрики и показате...
С необходимостью переноса данных из Oracle столкнулись многие российские компании: в июле 2022 года корпорация, создавшая этот продукт, ушла с российского рынка из-за санкций, как и множество других з...
Привет, Хабр! Меня зовут Станислав Чернышев, я автор книги «Основы Dart», телеграм-канала MADTeacher и доцент кафедры прикладной информатики в Санкт-Петербургском государственном университете аэрокосм...
Если вы полагаете, что фундаментальные исследования всегда скучны и с трудом находят применение на практике, то прочитайте эту статью. Старший научный сотрудник нашей лаборатории Сергей Муравьев, зан...
Привет, друзья! Хочу поделиться с вами решением интересной задачи: записать экран компьютера пользователя. Общие требования к реализации: запись должна состоять из видео и аудио у пользовате...