feat(cpu_temp): индикатор температуры CPU на ESP32-C3 с OLED
Плата принимает по 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>
This commit is contained in:
1 parent
ed4dad0a52
commit
59848698ff
12 files changed
+1473
No files matched your search
@@ -0,0 +1,79 @@
|
||||
# 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](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](agent/README.md).
|
||||
Reference in new issue
Block a user