# 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).