diff --git a/Growatt ShineLAN-X/firmware/include/config.h b/Growatt ShineLAN-X/firmware/include/config.h index 9a9c2ff..4c92d67 100644 --- a/Growatt ShineLAN-X/firmware/include/config.h +++ b/Growatt ShineLAN-X/firmware/include/config.h @@ -50,16 +50,13 @@ #define MQTT_CLIENT "growatt-shinelan" // ============================================================ -// MODBUS / WECHSELRICHTER-UART -// Growatt kommuniziert über USB-CDC (virtueller COM-Port) bei 115200 Baud — -// kein klassisches RS485, kein DE/RE-Pin nötig. -// Bestätigt durch ESPHome-Configs (tx=1, rx=3, baud=115200, kein flow_control_pin). -// Kandidat für STM32: USART3 (PB10=TX, PB11=RX) — auf Platine nachmessen! -// PA3 = Taster → USART2 (PA2/PA3) scheidet aus. +// MODBUS / WECHSELRICHTER-KOMMUNIKATION +// Growatt kommuniziert über USB-CDC (virtueller COM-Port) bei 115200 Baud. +// STM32 agiert als USB-Device (CDC), Wechselrichter ist USB-Host. +// Physikalisch: PA11=D-, PA12=D+, PA8=USB-Pullup-Steuerpin +// Kein RS485, kein DE/RE-Pin nötig. // ============================================================ -#define MODBUS_TX_PIN PB10 // USART3 TX — TODO: auf Platine bestätigen -#define MODBUS_RX_PIN PB11 // USART3 RX — TODO: auf Platine bestätigen -#define MODBUS_BAUD 115200 // Growatt USB-CDC Baudrate (nicht 9600 RS485!) +#define MODBUS_BAUD 115200 // Growatt USB-CDC Baudrate #define MODBUS_ADDR 1 // Modbus Slave-Adresse des Wechselrichters // ============================================================ diff --git a/Growatt ShineLAN-X/firmware/src/main.cpp b/Growatt ShineLAN-X/firmware/src/main.cpp index b83e3cd..27f93a0 100644 --- a/Growatt ShineLAN-X/firmware/src/main.cpp +++ b/Growatt ShineLAN-X/firmware/src/main.cpp @@ -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);