Arduino Maestro & ESP8266 Esclavo Modbus RTU (TTL)

En muchas ocaciones hemos comunicado nuestro ESP8266 con Arduino via comandos AT, pero existen ciertos casos en los que se requiere comunicar ambos dispositivos y enviar y/o recibir gran cantidad de registros, casi en tiempo real, aunque existen protocolos como I2c, y SPI  con librerias ya implementadas en arduino, utilizaremos Modbus RTU , por excelencia el protocolo de comunicación de campo para dispositivos de monitoreo y control dado que es facil su implementacion, es seguro, rapido y aprueba de errores.

Para nuestra prueba contamos con una placa Arduino MEGA 2560 R3 y Modulo ESP8266 12E, comunicados via modbus RTU conectado via 3 hilos directo, voltajes TTL 0 a 5v.

trialcommand.com

Configuracion Arduino

Se ha configurado en este caso como maestro modbus, utilizando el segundo puerto serial (Serial1) de nuestra placa, dado que cuenta con 4 puertos disponibles, se realizaron modificaciones en la libreria modbus maestro tomando como referencia pruebas anteriores .

Configuracion ESP8266

Se ha configurado como esclavo modbus, en este caso el protocolo modbus funciona a travez de un puerto serial extra generado con la libreria SoftwareSerial, la cual permite crear un puerto serial generado por software con interrupciones, se recomienda no utilizarlo a muy altas velocidades en este caso a 9600 bauds, para mas información recomendamos estas referencias anteriores.

Pruebas

La prueba es sencilla, utilizaremos 2 registros en este caso para verificar la lectura y escritura de ambos dispositivos dado que en ciertas pruebas muestran los dispositivos o solo leyendo o solo escribiendo.

Arduino Maestro & ESP8266 Esclavo Modbus RTU (TTL 0-5v )

Codigo Arduino IDE – Arduino

El arduino cuenta con un pulsador  N/A conectado entre pin 7 y GND configurado como una entrada pullup, arduino leera el estado del pin 7 y enviara el valor en el Holding Register [4].

Realizara la lectura constante del Holding Register[5] e imprimira el valor en el terminal Serial.

Nota: Descarga de librerias al final del Post.





Codigo Arduino IDE – ESP8266

El ESP8266  realizara la lectura del Holding Register[4] y activara el pin 14 (D5) como salida y a su vez tiene conectado un diodo led.

Enviara  en el Holding Register[5] un entero con un valor random desde 1 a 9999.

Nota: Tener en cuenta que entre ambos dispositivos hay un corrimiento de 1 posición entre los holding register, esta caracteristica es comun en modbus.

Nota: Descarga de librerias al final del Post.

Conexiones

Dado que la comunicacion es TTL (0-5v) , se conecta el serial1 de arduino mega 2560 pines     (Tx1 -18) (Rx1 – 19)con el puerto del ESP8266 creado en softwareserial pines  D7(13),D8(15)   RX,TX, cruzar RX -Tx entre ambos, acontinuacion descripciones individuales. 

ESP8266 12E  NodeMCU

trialcommand.com

Arduino MEGA 2560 R3

trialcommand.com

Recomendaciones

Recomendamos una velocidad de 9600 bauds para un buen funcionamiento, dado que la libreria software serial no es Uart propio del ESP8266, a velocidades altas podrian existir fallas de bits en la trama, dado que funciona con interrupciones.

Se han realizado modificaciones a las librerias maestro y esclavo para esta prueba en especifico, las modificaciones son especialmente en la asignaciones y declaración de los puertos seriales.

trialcommand.com

Conclusiones

  • Consideramos que esta es una solución excelente dado que se utiliza un protocolo comun y robusto de la industrial que facilmente aplicaria a comunicar con un HMI,PLC, Medidor, PAC, SCADA y/o otra clase de controladores de la industrial.
  • Un gran beneficio es el modbus es la facilidad de transmitir una gran cantidad de registros, cabe tener en cuenta que permite registros enteros 16 bits.

Referencias

Descargas Librerias

Deja un comentario