Skip to content

somefirenoodles/SCADAESP32

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

24 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SCADAESP32

dejar listo un maestro Modbus RTU para leer RS485

Estado del proyecto

Implementado:

  • Proyecto ESP-IDF completo.
  • UART2 en GPIO17 TX y GPIO16 RX.
  • Maestro Modbus RTU.
  • Lectura por funcion 0x03 o 0x04.
  • Sincronizacion de trama por slave_id y function_code.
  • Validacion de longitud y CRC16.
  • Descarte de ruido de bus flotante.
  • Configuracion por idf.py menuconfig.
  • Scripts PowerShell y POSIX para build, flash y monitor.

No para implementado todavia:

  • MQTT.
  • Telegraf / TimescaleDB.
  • Dashboard Superset.
  • Lectura directa del cargador FoxESS por CAN o WiFi.

Cableado base

ESP32 Modulo TTL-RS485
GPIO17 / TX2 RXD
GPIO16 / RX2 TXD
GND GND
3V3 o 5V VCC
Modulo TTL-RS485 Dispositivo RS485
A A / D+ / RS485+
B B / D- / RS485-

Nota tecnica: si el modulo esta alimentado a 5 V, verifica que TXD del modulo no entregue 5 V al GPIO16 del ESP32. El ESP32 usa logica de 3.3 V.

Build

Desde ESP-IDF PowerShell:

idf.py build

O con script:

.\scripts\build.ps1

Flash + monitor

idf.py -p COM17 flash monitor

O con script:

.\scripts\flash_monitor.ps1 -Port COM17

Salir del monitor:

Ctrl + ]

Configuracion

Abrir menuconfig:

idf.py menuconfig

Ruta:

SCADAESP32 Modbus RTU

Parametros configurables:

  • UART2 TX GPIO: default 17.
  • UART2 RX GPIO: default 16.
  • Modbus RTU baudrate: default 9600.
  • Parity: 8N1, 8E1 o 8O1.
  • Slave ID: default 1.
  • Function code: 0x03 holding registers o 0x04 input registers.
  • Start register: default 0x0000.
  • Register count: default 2.
  • Polling interval: default 2000 ms.

Salida esperada sin dispositivo RS485

Con A/B desconectado, es normal ver:

RX: timeout. No hay respuesta valida.

Tambien puede aparecer ruido descartado:

RX ruido descartado: E0 30 80 80 83 E6 FC
Sin inicio de trama valido: esperado slave_id=0x01.
Lectura fallida. Codigo=-1

O una trama detectada pero corrupta:

Error: CRC invalido
Lectura fallida. Codigo=-3

Eso indica que RX recibe actividad electrica, pero no una trama Modbus valida.

Salida esperada con esclavo Modbus RTU

TX Modbus RTU: 01 03 00 00 00 02 C4 0B
RX bruto: 01 03 04 00 E6 00 00 9B 3A
Trama Modbus valida.
Registro 0x0000 = 230 / 0x00E6
Registro 0x0001 = 0 / 0x0000
Lectura OK.

Diagnostico rapido

Si no hay respuesta:

  1. Intercambia A y B.
  2. Verifica slave_id.
  3. Verifica baudrate.
  4. Verifica paridad: 8N1, 8E1 o 8O1.
  5. Verifica si el dispositivo usa funcion 0x03 o 0x04.
  6. Verifica la direccion inicial del registro.
  7. Usa resistencia de 120 ohm entre A y B solo si corresponde a extremo de bus.
  8. Si A/B estan sin conectar y aparece ruido repetido, agrega polarizacion/fail-safe solo para prueba: pull-up en A, pull-down en B y 120 ohm entre A/B.

Advertencia sobre FoxESS

No conectes este modulo MAX485 a terminales marcados CANH y CANL. CAN bus no es RS485. Para CAN se requiere un transceptor CAN y el protocolo CAN del fabricante.

El protocolo FoxESS EV Charger disponible es Modbus TCP por red IP. Este firmware es para Modbus RTU por RS485, util para medidores o dispositivos externos RS485.

About

foxy chargy

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors