Основная идея заключается в том, чтобы программная часть, отвечающая за сбор информации, выполнялась на ПК, напр. в 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-порта, задав скорость 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-конвертером.
Пример отображения строки
@3CPU @066@3C
Дисплей SDD1306 и микроконтроллер ATtiny13 были выбраны для проекта поскольку нашлись в запасах. Покупать ATtiny13 сейчас, чтобы повторить проект, в виду высоких текущих цен на AVR, — особого смысла нет. За чуть больший ценник можно взять уже ESP8266 с большими ресурсами, за счет которых удастся реализовать не только поддержку нижнего регистра букв, но и даже кириллицу с выводом на несколько экранов, которые также можно заменить на 2+ дюймовые TFT для лучшей читаемости. С другой стороны, число деталей получилось минимальным, что тоже неплохо.
Страница проекта — https://github.com/little-brother/attiny13-serial-display.
Комментарии (37)
Zara6502
28.06.2024 07:32году в 2002, так как я в этом вообще ничего не понимаю, обратился к паре знающих человек чтобы сделать из светодиодов (например советских АЛ) матрицу и выводить на неё информацию например с COM порта, на что они покрутили пальцем у виска, типа "зачем тебе это". Как показало время - крутили они правильно что у себя.
CitizenOfDreams
28.06.2024 07:32+3В 2002 году это делалось точно так же, как в этом проекте. Только вместо оледов были ЖК-экраны на HD44780, вместо ATtiny13 - ATtiny12, а вместо Ардвины - суровый атмеловский ассемблер.
Только BC548 был все тот же, самодельщики уже больше 50 лет перерисовывают друг у друга схемы на нем.
Zara6502
28.06.2024 07:32ну сейчас я это уже знаю и сам, но тогда обращался к выпускниками новосибирского НЭТИ, которые электроникой занимались.
vladkorotnev
28.06.2024 07:32HD44780 вообще в лпт порт втыкались напрямую даже, безо всяких микроконтроллеров, главное чтобы софт умел с ним работать
nextbystander
28.06.2024 07:32+3Нужно отметить, что не смотря на популярность и десятилетия использования, такую схему стоит применять только для любительских конструкций. В ней переход база-эмиттер пробивается обратным напряжением при напряжении на базе ниже минус 6 вольт.
В линии TX по стандарту RS-232 может быть +-25 вольт, хотя в PC было раньше не больше +-12 В, а сейчас чаще всего +- 6 В.
Бывают конструкции, где транзистор в таком режиме используется как маломощный стабилитрон, но это не рекомендованный производителем режим работы.
Для соответствия стандарту стоит добавить диод параллельно R2, анодом к земле.
BReal
28.06.2024 07:32+1я бы с удовольствием почитал такую же статью про ESP8266. а еще, про какое-нибудь прикручивание вебхука с отправкой инфы на дисплей...
Mizar91
28.06.2024 07:32Ну да, монитора нет, а COM-порт есть! Все так и будет!
little-brother Автор
28.06.2024 07:32+2А почему нет? NAS, сервера, базовые одноплатники как Orange Pi Zero и возможно некоторые Wi-Fi роутеры с OpenWRT. Сценарии не самые распространенные, но бывают. Себе я для NAS, построенном на mini-ITX плате, это сделал.
Mizar91
28.06.2024 07:32+1У всего этого есть USB, COM теперь днем с огнем не найти, логичнее было бы построить систему для USB
little-brother Автор
28.06.2024 07:32+2Лично я не знаю как отправить данные из консоли в USB без написания своего драйвера, что порождает написание кучи кода под разные ОС. Зачем усложнять задачу?
Если COM нет, то его не проблема добавить через USB-UART. Кроме того, даже если на материнке нет COM-порта на задней панели, то это не значит что его вовсе нет - иногда на плате есть его 10-пиновая колодка.
VT100
28.06.2024 07:32КМК, COM- порт до сих пор есть на desktop ПК. Просто выводят его теперь не на панель, а на "гребёнку".
aamonster
28.06.2024 07:32Одноплатники и роутеры ладно (у них, опять же, порт будет на 3.3V, переходник не нужен – правда, велик шанс, что можно дисплей прямо на GPIO подключить, без вашей схемы), а на PC сейчас скорей будет только USB, так что ваш девайс имеет смысл сразу клепать на atmega32u4 или любом другом мк с поддержкой USB. Или вообще не париться и связать по bluetooth/wifi со смартфоном.
little-brother Автор
28.06.2024 07:32+1Идея не в том, чтобы как то отправить данные наружу, а так, чтобы это можно было сделать без дополнительного ПО на хосте (за исключением драйвера для USB-UART, если COM-порта нет). Нет никакой команды (во всяком случае я не знаю), чтобы отправить строку на конкретный USB-порт и он передался как строка. Аналогично с GPIO. А вот COM-порт именно для этого и разрабатывался и поэтому, получив значение той же температуры в shell-скрипте - в Windows через WMI, а в Linux через что угодно, надо просто его прокинуть дальше вызовом echo. То есть вся программная часть хоста - это скрипт, не требующий особых навыков программирования. В шутке " Кажется, изобретён мини-терминал... " только доля шутки :)
Насчет того, что COM-портов - нет, как я уже писал ранее, это скорее заблуждение. Их нет только на самых бюджетных материнках, где в погоне за дешевизной выкинуто всё лишнее и оставлено два слота памяти (специально проверил у Gigabyte и MSI).
aamonster
28.06.2024 07:32+2Я вам специально назвал девайс, который не требует дополнительного ПО.
Прямо в Arduino IDE есть скетч VCP (virtual com port) – т.е. получаем то же, что у вас сделано, только без лишних переходников.
Для поиграться – можете купить себе Arduino Micro, это просто atmega32u4 с обвязкой. Ровно то, что надо для таких дисплейчиков, как у вас.
little-brother Автор
28.06.2024 07:32Да есть у меня и такая Arduino и Digispark на ATtiny85. Понятно, что можно сделать и на них, чтобы избежать использования USB-UART переходника, но в таком случае делать обычный вывод строки слишком просто - тогда надо и поддержку нескольких дисплеев, внешних термометров (в этом случае хост отправляет плейсхолдер) и еще чего-нибудь.
P.S. Про Virtual com port не знал, да и как то не задумывался о таком ибо сразу ориентировался на физический порт. Спасибо за наводку.
aamonster
28.06.2024 07:32Да пожалуйста.
Digispark прекрасен своим минимализмом, но чисто софтовая реализация USB, которая в нём применена, imho менее стабильна (если я правильно помню, там даже кварца нет?) и более геморройна, чем аппаратная в atmega32u4, так что micro imho оптимальный вариант, если не готовы переходить на более современные контроллеры (тот же blue pill на простом stm32 куда круче при той же цене, но порог вхождения выше).
sansar
28.06.2024 07:32+1раз 20 пытался attiny в usb работать(естественно главная цель - чтоб от xp до ubuntu без танцев с дровами) и ниразу оно на 3х тачках не работало. mega32 решала проблему, но не вписывалась в бюджет. Последний раз bluepill тупо не лез по размеру и подвернулась ch5xx. так и работает hid клавой для ввода пар логин/пароль. последние 6 копий - микруха и 4 кнопки и type-c, даже на конденсаторы забил. кроссплатформенность - как хотел и даже nvr/dvr почти все принимают.
aamonster
28.06.2024 07:32VUSB (или как там теперь – LUFA?) – это для смелых и сильных, кто умеет и любит такты считать. Кроме как для доказательства собственной крутизны не имеет смысла.
svosin
28.06.2024 07:32+1Если есть свободный VGA-порт, то можно вообще пропустить пляски с микроконтроллером и приткнуться к i2c в нём, если ОС позволяет. Плюс i2c может быть доступен сам по себе, но это от системы зависит.
chapt
28.06.2024 07:32А почему вы pullup-ы на i2c шину не ставите?
little-brother Автор
28.06.2024 07:32У SSD1306 они уже есть.
chapt
28.06.2024 07:32https://www.olimex.com/Products/Modules/LCD/MOD-OLED-128x64/resources/SSD1306.pdf
8.1.5 MCU I 2 C Interface
The I 2 C communication interface consists of slave address bit SA0, I2 C-bus data signal SDA (SDA OUT/D2 for output and SDAIN/D1 for input) and I 2 C-bus clock signal SCL (D0 ). Both the data and clock signals must be connected to pull-up resistors.little-brother Автор
28.06.2024 07:32Я документацию не смотрел, а просто поверил информации от разработчика библиотеки для ATttiny13. Проверять резона не было, т.к. вроде всё нормально и так работает.
Насколько могу судить Olimex - это другой модуль на SSD1306, и ему да, нужна подтяжка.
Jury_78
28.06.2024 07:32Если у компьютера нет не только монитора, но и даже видео-выхода
Может есть Wifi или по проводу связь и роутер, то проще организовать простой web сервер.
dlinyj
28.06.2024 07:32Прикольный проект, мне понравился. Программу на си называть сетчем такое себе. Вообще я бы makefile написал и собирал бы avr-gcc. Но тут дело ваше. Прикольно получилось
dlinyj
28.06.2024 07:32+1Из моих рекомендаций, сделать как в Дисплеях покупателя - управление ESC-последовательностями. Тогда можно прям из консоли пулять данные и они будут выводиться. Пример у меня в двух статьях:
Создание собственных драйверов под Linux
Wifi-радио с тёплым ламповым дисплеем. Часть 1. Дисплей
TheyLive
28.06.2024 07:32В вашем ролике видно, что экран мерцает. Существуют ли немерцающие "Дисплеи покупателя"?
(Я думал, что все VFD не мерцают).
VT100
28.06.2024 07:32+1Дело в динамической индикации. IRL мерцание можно заметить только грызя сушки.
dlinyj
28.06.2024 07:32Дисплей не мерцает. Это динамическая индикация. В статье подробно разобрано почему она такая.
little-brother Автор
28.06.2024 07:32makefile и avr-gcc не использовал, т.к. сам любитель и переходить на Atmel Studio смысла пока не вижу. Если была бы нужда реализовать поддержку нескольких дисплеев на одном микроконтроллере, то да, пришлось бы перейти, т.к. с Arduino IDE уже уперся по памяти в потолок.
ESC-последовательности, как мне кажется, для данного проекта избыточны, т.к. дисплей однострочный. Если бы требовалось выводить несколько строк и/или графику, то да, имело смысл. А так старался сделать палку-веревку: для переключения режима была выбрана собачка, т.к. проблем с её выводом в консоли - нет, в отличии от ^ или |.
dlinyj
28.06.2024 07:32Вы автор и сделали как вам было удобно. Извините, что я со своим уставом :)
avr Studio Видел в последний раз ещё в институте в 2000-х. Не, я всё по классике, в консоли, как учили :))).
aamonster
28.06.2024 07:32+1Советую всё же перейти при случае, если не привязаны совсем жёстко к инфраструктуре ардуино :-)
Arduino IDE – это боль. Что-то из начала 90-х, в ней много лет даже подсветки синтаксиса не было...
sansar
28.06.2024 07:32+1ch522 лучше подходит. всё в один корпус влезает и не требует танцев с бубном с драйверами и настройкам и всё за шапку сухарей
Soorin
Кажется, изобретён мини-терминал...