Плата принимает по USB-CDC строки "T=67.0;L=34" от агента на ПК и рисует крупную цифру, загрузку и график за последнюю минуту на экране 72x40. Пины дисплея (SDA=5, SCL=6) определены сканером, а не по шелкографии: подписи GPIO8/GPIO9 на плате - это дефолтные Wire-пины чипа. Агент читает сенсоры через LibreHardwareMonitorLib. С версии 0.9.5 она требует отдельно установленный драйвер PawnIO: без него загрузка CPU читается, а температуры пусты даже под администратором. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
CPU Temp — индикатор температуры процессора на ESP32-C3
Плата ESP32-C3 со встроенным OLED 0.42″ (72×40) стоит на столе и показывает температуру процессора компьютера: крупная цифра, загрузка CPU рядом и график за последнюю минуту.
LibreHardwareMonitorLib.dll ──> PowerShell-агент ──COM (USB CDC)──> ESP32-C3 ──I2C──> OLED 72×40
(через драйвер PawnIO) раз в секунду "T=67.0;L=34" U8g2
Плата ничего не измеряет сама: она принимает готовые строки и рисует их. Всё чтение железа происходит на ПК.
Состав
| Путь | Что это |
|---|---|
CPU_temp.ino |
основной скетч: тайм-аут свежести данных, частота перерисовки |
link.h / link.cpp |
неблокирующее чтение строки из Serial и её разбор |
ui.h / ui.cpp |
отрисовка через U8g2 и кольцевой буфер истории |
tools/i2c_scan/ |
одноразовый скетч: поиск пинов встроенного дисплея |
agent/ |
агент для ПК, см. agent/README.md |
docs/ |
спецификация и план реализации |
Железо
| Параметр | Значение |
|---|---|
| Плата | ESP32-C3 (QFN32), ревизия v0.4, встроенный OLED 0.42″ |
| Флеш | 4 МБ |
| Дисплей | SSD1306 72×40, I2C, адрес 0x3C, SDA = GPIO5, SCL = GPIO6 |
| Подключение к ПК | нативный USB, VID_303A&PID_1001 |
Пины дисплея определены сканером tools/i2c_scan, а не по шелкографии: подписи
GPIO8/GPIO9 на плате относятся к дефолтным Wire-пинам чипа, а не к разводке
экрана.
Сборка и заливка
arduino-cli compile -b esp32:esp32:esp32c3:CDCOnBoot=cdc,FlashSize=4M,PartitionScheme=default .
arduino-cli upload -p COM4 -b esp32:esp32:esp32c3:CDCOnBoot=cdc,FlashSize=4M,PartitionScheme=default .
CDCOnBoot=cdc обязателен: по умолчанию в ядре стоит Disabled, и тогда
Serial уходит в аппаратный UART вместо USB, а данные до платы не доходят.
Перед заливкой остановить агента — он держит тот же COM-порт:
Stop-ScheduledTask -TaskName 'CPU Temp Agent'
Протокол
Одна строка в секунду, \n в конце:
T=67.0;L=34
T — температура CPU Package в °C, L — общая загрузка CPU в процентах.
Неизвестные ключи прошивка игнорирует, поэтому протокол можно расширять
(например, G= для GPU), не трогая старую прошивку.
Если валидная строка не приходила дольше 5 секунд, на экране появляется
NO DATA, и история перестаёт пополняться — чтобы пауза связи не выглядела
как падение температуры.
Экран
Шкала графика фиксированная, 30–90 °C. Автомасштаб сознательно не используется: при нём шум ±1 °C в простое рисовался бы горами и создавал ложную тревогу.
Требования к ПК
Windows, LibreHardwareMonitor и драйвер PawnIO — порядок установки и разбор подводных камней в agent/README.md.