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:
oskarvitaliiandClaude Opus 5 committed 2026-09-14 21:42:24 +07:00
1 parent ed4dad0a52
commit 59848698ff
12 files changed
+1473

No files matched your search

+42
View File
@@ -0,0 +1,42 @@
// Одноразовый скетч: ищет, на какой паре пинов висит встроенный OLED.
// Шелкография подписывает GPIO8/GPIO9 (дефолтные Wire-пины ESP32-C3), но у плат
// этого семейства экран обычно разведён на GPIO5/GPIO6. Проверяем перебором.
#include <Wire.h>
struct PinPair { uint8_t sda; uint8_t scl; };
static const PinPair CANDIDATES[] = { {5, 6}, {6, 5}, {8, 9}, {9, 8} };
static void scanPair(uint8_t sda, uint8_t scl) {
Wire.end();
if (!Wire.begin(sda, scl)) {
Serial.printf("SDA=%u SCL=%u: init failed\n", sda, scl);
return;
}
uint8_t found = 0;
for (uint8_t addr = 1; addr < 127; addr++) {
Wire.beginTransmission(addr);
if (Wire.endTransmission() == 0) {
Serial.printf("SDA=%u SCL=%u: device 0x%02X\n", sda, scl, addr);
found++;
}
}
if (found == 0) {
Serial.printf("SDA=%u SCL=%u: nothing\n", sda, scl);
}
}
void setup() {
Serial.begin(115200);
}
void loop() {
// Повторяем в цикле: при нативном USB порт переоткрывается после заливки,
// и однократный вывод из setup можно не успеть поймать.
Serial.println("--- I2C scan ---");
for (const PinPair &p : CANDIDATES) {
scanPair(p.sda, p.scl);
}
delay(5000);
}