Se han realizado numerosas aplicaciones en el ESP8266, he tomado como meta integrar este modulo a uno de los protocolos industriales mas utilizados Modbus TCP IP, seria bueno tener un nodo o sensor que envie datos o a un controlador, OPC, PAC, PLC, HMI o SCADA.
Hace mucho tiempo encontre un grupo de personas en forums.adafruit que ya tenian un avance y se han implementado los ejemplo y mejoras sugeridas gracias a ibbba por el aporte.
El codigo de programacion para el ESP8266 en este caso se implemento en Arduino IDE versiones superiores a 1.6.4. Estos 2 tutoriales indicaran la conexión y programación basica de los modulos ESP8266 01 y 03.
TUTORIAL
Programar ESP8266 01 con Arduino IDE
TUTORIAL
Programar ESP8266 03 con Arduino IDE
ESP8266 12E NodeMCU
Pruebas Anteriores libreria ModbusTCPSlave
ESP8266 – 01 Esclavo Modbus TCP IP (Ethernet) para Aplicaciones Industriales
CONCLUSIONES
En las pruebas anteriores con la libreria Original ModbusTCPSlave, presentaba 2 inconvenientes de aplicación:
Ejecucion de Codigo
Funcionaba correctamente la comunicacion modbus tcp, pero no ejecuta el codigo en la rutina void loop, como solucion temporal se modifica la libreria para el ESP8266 detenga la conexión y reconecte nuevamente, el problema que presenta este metodo es tiempo de reconexion puede hacer que el maestro aunque acepte los datos indique error en la recepción de datos.
Puerto Serial
Originalmente el puerto serial del ESP8266 era utilizado como puerto de depuración en hexadecimal, he realizado modificaciones en la librería para que el Serial pueda ser utilizado de manera libre.
Actualizacion Septiembre 2016
VIDEO Actualizacion ESP8266 Industrial Modbus TCP IP V2.0
Actualizaciones Diciembre 2016
Video Tutorial NodeMCU ESP8266 12E Modbus TCP/IP Control I/O ADC PWM
Actualizaciones Marzo 2017
ESP8266 Esclavo Modbus TCP/IP, Sin librerias extras – ComandoTrial
MEJORAS REALIZADAS
-Con las nuevas modificaciones se ha omitido la desconexion permitiendo un flujo constante de comunicación si detener obligatoriamente la conexión entre el ESP8266 y el maestro modbus tcp.
Ticker
-Se ha implementado la libreria Ticker creada y documentada por igrr, es un objeto que va a llamar a una función dada con un cierto período. Cada Ticker llama a una función. Puede tener tantos como desee tickers, siendo la única limitación de memoria.
Nota importante: al crear tickers tener en cuenta no crear ningun delay, afectaria tanto la comunicación del protocolo modbus, como la ejecución de dicha función.
PRUEBAS REALIZADAS
Se realizara la conexión entre el ESP8266 y un simulador Modbus tcp Configurado como Maestro.
-Inicialmente se crea el Ticker Parada.
DESCRIPCION DE CODIGO
se crea la funcion llamada valor y se definen 2 Holding Registers:
Mb.MBHoldingRegister[0] = Holding Registers 1
Mb.MBHoldingRegister[1] = Holding Registers 2
Mb.MBHoldingRegister[0] enviara un valor random(0,51) hacia el Maestro Modbus y validar la actualizacion del valor.
Mb.MBHoldingRegister[1] se utilizara para la lectura de un valor enviados desde el Maestro modbus y desde el terminal serial se validara la actualizacion.
Se ejecutara la rutina modbus Mb.Run(); y se ejecutara el Ticker Parada.attach_ms(25,valor); cada 25ms realizando lo creado en la funcion valor.
void loop() | |
{ | |
Mb.Run(); | |
delay(10); | |
////Ticker Function | |
Parada.attach_ms(25,valor); | |
} |
Tomando este ejemplo como base, se podrían realizar funciones para manejo de I/O analogas y digitales, calculos y demas, solo teniendo en cuenta no implementar ningun delay.
POSIBLES APLICACIONES INDUSTRIALES
Integraciones con software Industrial OPTO22
TUTORIAL
Arduino + ESP8266 + Software Opto22 ejemplo Scada Industrial
Donde Comprar ?
Descargas Github
Codigo y librerias ESP8266_Industrial_ModbusTCP_V2
Version mejorada para control de I/O ADC y PWM
Codigo y librerias ESP8266 Control I/O
Referencias
Arduino + ESP8266 + Software Opto22 ejemplo Scada Industrial
Arduino Mega 2560 Display Oled I2C Modbus Maestro RTU Conexion Scada Industrial
Canal Youtube
PDAControl
¡Muy bien!
Funcionó a la perfección!
Ahora no tengo más errores en el maestro.
Gracias por compartir.
Very good!
Worked perfectly!
Now I have no more errors in the master.
Thanks for sharing.
Hola,
Estoy tratando de compilar y me da fallo continuamente, probablemente esté haciendo algo mal…
He reinstalado de cero, para evitar problemas el IDE de Arduino 1.6.12.
A continuación, instalo desde el gestor de tarjetas el ESP8266 Comunity, version 2.3.0.
Descargo de Github tu ejemplo. Compilo y obtengo el fallo:
"
C:UsersMiArduinoESP8266_Industrial_ModbusTCP_V2-masterModbusESP8266_RandomModbusESP8266_Random.ino:10:25: fatal error: ESP8266WiFi.h: No such file or directory
#include
^
compilation terminated.
exit status 1
Error compilación en tarjeta Arduino/Genuino Mega or Mega 2560.
"
Seguro que me falta algún paso…de novato.
Un saludo y gracias por compartir.
Hola, Sobre que quieres correr el codigo, Un ESP8266 o Arduino?
al parecer tu error es con la libreria ESP8266WiFi.h,
veo 2 posibles problemas
– que no tengas instaladas las boards y librerias del modulo ESP8266.
– que estes tratando descargar el codigo del ejemplo en un arduino, no he probado en arduino con shield ethernet, pero deberia funcionar haciendo ciertas modificaciones, uno de ellos quitar la libreria ESP8266WiFi.h y configurar los parametros para un shield ethernet para arduino.
Saludos
Hola, Muchas gracias por tu ayuda.
Quería correr el código en un Arduino Mega, pero conectado al ESP8266.
He instalado las Boards como indican en : https://github.com/esp8266/Arduino
Las librerías, entiendo que aparecen al instalar las Boards, ¿no? Por lo menos me aparecen en ejemplos como "Examples for generic ESP.."
Saludos.
Uds son los mejores. De verdad muchísimas gracias por este ejemplo.