Плата принимает по 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>
43 lines
1.4 KiB
Arduino
43 lines
1.4 KiB
Arduino
// Одноразовый скетч: ищет, на какой паре пинов висит встроенный 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);
|
||
}
|