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:
@@ -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
|
||||
|
||||
// ============================================================
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user