ShineLAN-X: USB-CDC Modbus vorbereitet, Modbus vorläufig deaktiviert

- Wechselrichter-Kommunikation läuft über USB-CDC (PA11=D-, PA12=D+, PA8=Pullup)
- Modbus-Platzhalter bis USB-Port wieder eingelötet und getestet
- USB-CDC build flags entfernt (blockieren ohne Host), werden separat aktiviert
- Ethernet + MQTT läuft stabil (DHCP, HA Discovery)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
retr0
2026-04-17 05:49:39 +02:00
parent 054f8c3fa6
commit 942e6b4e4d
2 changed files with 14 additions and 32 deletions
+8 -23
View File
@@ -8,8 +8,7 @@
// Debug-UART: USART1 TX=PA9, RX=PA10
HardwareSerial DebugSerial(PA10, PA9);
// Modbus-UART: USART3 TX=PB10, RX=PB11 (Growatt USB-CDC bei 115200 Baud)
HardwareSerial ModbusSerial(MODBUS_RX_PIN, MODBUS_TX_PIN);
// Modbus über USB-CDC (SerialUSB = PA11/PA12, Wechselrichter ist USB-Host)
// ============================================================
// Sensor-Definition
@@ -187,9 +186,9 @@ void setup() {
mqtt.setServer(MQTT_BROKER, MQTT_PORT);
mqtt.setBufferSize(768);
// Modbus UART
ModbusSerial.begin(MODBUS_BAUD);
modbus.begin(MODBUS_ADDR, ModbusSerial);
// Modbus: USB-CDC (PA11/PA12) — wird aktiviert sobald Wechselrichter angeschlossen
// SerialUSB.begin(MODBUS_BAUD);
// modbus.begin(MODBUS_ADDR, SerialUSB);
DebugSerial.println("Setup done.");
}
@@ -222,24 +221,10 @@ void loop() {
uint8_t result;
uint32_t raw = 0;
if (s.isDword) {
result = modbus.readInputRegisters(s.address - 1, 2);
if (result == ModbusMaster::ku8MBSuccess)
raw = ((uint32_t)modbus.getResponseBuffer(0) << 16)
| modbus.getResponseBuffer(1);
} else {
result = modbus.readInputRegisters(s.address - 1, 1);
if (result == ModbusMaster::ku8MBSuccess)
raw = modbus.getResponseBuffer(0);
}
if (result != ModbusMaster::ku8MBSuccess) {
DebugSerial.print("Modbus ERR ");
DebugSerial.print(s.id);
DebugSerial.print(" rc=");
DebugSerial.println(result, HEX);
continue;
}
// TODO: Modbus aktivieren sobald USB-CDC (Wechselrichter) angeschlossen
result = ModbusMaster::ku8MBSuccess; // Platzhalter
raw = 0;
(void)result;
float value = raw * s.scale;
dtostrf(value, 1, (s.scale < 0.1f) ? 2 : 1, valueStr);