Files
Arduino/CPU_temp/README.md
T
oskarvitaliiandClaude Opus 5 59848698ff 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>
2026-09-14 21:42:24 +07:00

80 lines
3.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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).