PZEM004 cambia de RS485 a ModBus RTU


El PZEM-004 es un monitor de energía de CA versátil y fácil de usar que es una buena opción para proyectos de domótica e IoT. Es relativamente barato y tiene una amplia gama de características, por lo que es un buen valor por su precio.

Aquí hay algunos detalles adicionales sobre el PZEM-004:

  • Dimensiones: 118mm x 60mm x 27mm
  • Peso: 100g
  • Temperatura de funcionamiento: de -10 a 60 grados Celsius
  • Precisión: 1,0 grado
  • Tipo de pantalla: Sólo digital
  • Puerto de comunicación: TTL
  • Rango de tensión: 80 a 260VAC
  • Rango de corriente: 0 a 100A
  • Rango de potencia: 0 a 22kW
  • Rango de energía: 0 a 9999kWh

El PZEM-004 es una opción popular para proyectos de domótica e IoT porque es relativamente barato y fácil de usar. Se puede utilizar para medir la tensión, la corriente, la potencia y el consumo de energía, lo que lo convierte en una herramienta versátil para monitorizar sistemas eléctricos. Asimismo El PZEM-004 también tiene una amplia gama de características, incluida la medición no invasiva, un amplio rango de voltaje, un alto rango de corriente y envio de datos. Estas características hacen del PZEM-004 una buena elección para una gran variedad de aplicaciones:

  • Medición no invasiva: El PZEM-004 no requiere ningún contacto físico con el circuito eléctrico, lo que hace que sea seguro de usar y fácil de instalar.
  • Amplio rango de tensión: El PZEM-004 puede medir voltaje de 80 a 260VAC, lo que lo hace compatible con una amplia gama de sistemas eléctricos.
  • Alto rango de corriente: El PZEM-004 puede medir corriente de 0 a 100A, lo que lo hace adecuado para medir el consumo eléctrico de grandes electrodomésticos.
  • Comunicación Modbus RTU: El PZEM-004 versión T puede comunicarse con otros dispositivos mediante el protocolo Modbus RTU, lo que facilita su integración con sistemas de domótica e IoT.


¿Amigo lector ha visto alguna diferencias con las características que siempre ha tenido este modulo? Pues en efecto las hay básicamente porque el fabricante PeaceFair además de añadir mas precisión ,ha cambiado el protocolo de comunicaciones que pasa de ser RS485 a ModBus RTU.

Para este producto , PZEM-004T es la versión de actualización para reemplazar la versión antigua. La versión antigua se ha agotado y ya no se produce ( pero no se alarme amigo lector porque hay un largo stock).

La información de actualización como sigue:

  1. La nueva versión tiene el mismo tamaño y el puerto TTL como antes
  2. El software es nuevo, tienen software Inglés como el mismo que el PZEM-014,016, el cambio de protocolo de comunicación para ser Modbus-RTU, la interfaz de visualización se cambia. Ahora se puede probar la tensión, corriente, potencia, factor de potencia, frecuencia y energía 6 parámetros.
  3. La nueva versión tiene mayor precisión, velocidad de actualización más rápida y la comunicación más estabilidad que la versión anterior.
  4. La nueva versión aumenta un conjunto de 0-10A

RS485 y MODBUS a menudo escriben juntos, pero ¿Cuál es su diferencia y relación?. RS485 es una interfaz física, simplemente hardware. MODBUS es un protocolo de comunicación estándar internacional para el intercambio de datos entre dispositivos de diferentes proveedores (generalmente para uso industrial).

El protocolo MODBUS se divide en MODBUS RTU, MODBUS ASCII y luego desarrolló MODBUS TCP tres modos:

Las interfaces de hardware físico utilizadas en los dos primeros (MODBUS RTU, MODBUS ASCII) son puertos de comunicación en serie (RS232, RS422, RS485) y MODBUS TCP es para cumplir con la tendencia de desarrollo actual del mundo, y cualquier cosa se puede conectar con la red Ethernet o Internet para transmitir datos. Entonces, el modo MODBUS TCP, la interfaz de hardware de este modo es el puerto Ethernet, que es el puerto de red común en nuestra computadora.

Atribuimos la red industrial a tres tipos: red RS485, red HART y red fieldbus.

  • Red HART: HART es un estándar de bus de transición propuesto por Emerson. Sobrepone principalmente señales digitales en señales de corriente de 4-20 mA. La capa física usa la tecnología de modulación por desplazamiento de frecuencia BELL202 para lograr las funciones de algunos medidores inteligentes. Sin embargo, este acuerdo no es un estándar verdaderamente abierto. Para unirse a su fundación, uno debe obtener un acuerdo y unirse a una tarifa por una parte de la fundación. La tecnología está monopolizada principalmente por varias grandes compañías extranjeras. En los últimos dos años, las empresas en el país lo han hecho, pero aún no han alcanzado el nivel de las empresas extranjeras. Una gran cantidad de medidores inteligentes ahora tienen tarjetas redondas HART y todos tienen capacidades de comunicación HART. Sin embargo, desde el punto de vista interno, no ha utilizado realmente esta parte de sus funciones. A lo sumo, solo ha utilizado el comunicador para establecer parámetros, no ha reproducido la función adecuada del medidor inteligente HART y no se ha conectado en red para monitorear el equipo. A largo plazo, debido a la baja velocidad de comunicación HART y las dificultades de red, el volumen de adquisición de los instrumentos HART disminuirá. Sin embargo, debido a que los instrumentos HART tienen un historial de más de 10 años, la cantidad de instrumentos HART es ahora muy grande. Para algunos integradores de sistemas, todavía hay mucho espacio disponible.
  • Red Fieldbus: la tecnología Fieldbus es uno de los puntos clave en el campo de la automatización en la industria de la automatización actual. Se conoce como una red de área local de computadora en el campo de la automatización. Su aparición marca el comienzo de una nueva era de tecnología de control de automatización. Fieldbus es una red de comunicación digital, en serie y de varias estaciones que conecta los instrumentos que están configurados en el sitio de control para controlar los dispositivos que están configurados en la sala de control. El signo clave es que puede admitir comunicaciones totalmente digitales bidireccionales, multinodo y tipo bus. En los últimos años, la tecnología de bus de campo se ha convertido en un punto caliente en el desarrollo de la automatización e instrumentación en el mundo. Su apariencia es un cambio revolucionario en la estructura de los sistemas de control tradicionales. Es un sistema inteligente, digital, de información, de red y de automatización descentralizada. La dirección del movimiento, la formación de un nuevo tipo de red integrada sistema de control distribuido completo — sistema de control de bus de campo FCS (sistema de control de bus de campo). Sin embargo, varios estándares para fieldbus ahora existen en paralelo y tienen sus propias áreas de supervivencia. No hay un estándar verdaderamente unificado. La clave es no ver cuándo pueden formar un estándar unificado y la tecnología no es lo suficientemente madura. Además, los tipos de instrumentación en el bus de campo son todavía relativamente pequeños y hay poco espacio para la selección, y el precio también es alto. Desde la perspectiva de los usuarios finales, la mayoría de ellos todavía están en modo de espera y espera. Todos quieren esperar hasta que la tecnología esté madura y considerar su implementación.
  • Red RS485: RS485 / MODBUS es un popular modo de red de tela, que se caracteriza por una implementación simple y conveniente, y ahora admite cada vez más instrumentos RS485, especialmente en la industria petrolera RS485 / MODBUS simplemente domina el mundo, el instrumento actual Las empresas tienen también se convirtió en compatible con RS485 / MODBUS. La razón es muy sencilla. Al igual que el instrumento HART original, es muy difícil y costoso comprar un puerto de conmutación. La interfaz del conmutador RS485 es mucho más económica y variada. Al menos en el mercado de gama baja, RS485 / MODBUS también será el método de red más importante y no cambiará en los próximos dos o tres años.

¿DIFERENCIAS ENTRE MODBUS RTU Y RS485?

Modbus RTU y RS485 son dos tecnologías diferentes que a menudo se utilizan juntas en aplicaciones de automatización industrial. Como ya se ha comentado Modbus RTU es un protocolo de comunicación serie que se utiliza para transmitir datos entre dispositivos de una red. Es un protocolo maestro-esclavo, lo que significa que hay un dispositivo maestro que inicia la comunicación y uno o más dispositivos esclavos que responden a las peticiones del maestro. Modbus RTU utiliza una conexión monofilar o multifilar para transmitir datos y puede admitir hasta 32 dispositivos esclavos en una misma red.

RS485 es un estándar de capa física que define las características eléctricas y mecánicas de una interfaz de comunicación serie. Es una norma de señalización diferencial, lo que significa que utiliza dos conductores para transmitir datos. Esto hace que RS485 sea más resistente al ruido y a las interferencias que otros estándares de comunicación serie, como RS232. RS485 puede soportar hasta 127 dispositivos en una sola red.

En la práctica, Modbus RTU suele implementarse sobre RS485. Esto se debe a que RS485 proporciona las características eléctricas y mecánicas necesarias para que Modbus RTU funcione de forma fiable en entornos industriales.

A continuación se muestra una tabla que resume las principales diferencias entre Modbus RTU y RS485:

FeatureModbus RTURS485
ProtocolSerial communication protocolPhysical layer standard
Data transfer rateUp to 19.2 kbpsUp to 100 kbps
Number of devices supportedUp to 32Up to 127
Electrical characteristicsSingle-wire or multi-wireDifferential signaling
Mechanical characteristics5-volt TTL or 12-volt EIA-2325-volt TTL
Noise immunityLowHigh
CostLowModerate


A continuación se ofrecen algunos detalles adicionales sobre las dos tecnologías:

Modbus RTU

  • Modbus RTU es un protocolo de comunicación serie que se desarrolló a principios de la década de 1980. Se trata de un protocolo sencillo y eficaz, muy adecuado para aplicaciones de automatización industrial.
  • Modbus RTU utiliza una conexión monofilar o multifilar para transmitir datos. Los datos se codifican como una serie de bytes de 8 bits.
  • Modbus RTU admite diversos tipos de datos, como entradas discretas, entradas analógicas, salidas discretas y salidas analógicas.
  • Modbus RTU es un protocolo maestro-esclavo. Esto significa que hay un dispositivo maestro que inicia la comunicación y uno o más dispositivos esclavos que responden a las peticiones del maestro.
  • Modbus RTU es un protocolo ampliamente utilizado en la automatización industrial. Es compatible con una amplia gama de dispositivos, incluidos PLC, HMI y sensores.


RS485

  • RS485 es un estándar de capa física que se desarrolló a principios de la década de 1980. Se trata de un estándar de señalización diferencial muy adecuado para aplicaciones de automatización industrial.
  • RS485 utiliza dos conductores para transmitir datos. Esto hace que RS485 sea más resistente al ruido y a las interferencias que otros estándares de comunicación serie, como RS232.
  • RS485 puede soportar hasta 127 dispositivos en una sola red.
  • RS485 es un estándar de capa física muy utilizado en la automatización industrial. Es compatible con una amplia gama de dispositivos, incluidos PLC, HMI y sensores.

Diferencias en la implementación con Arduino

En efecto hay algunas diferencias entre implementar una solución para el PZEM-004 con un ESP32 utilizando RS485 o Modbus RTU.

RS485 es un protocolo de capa física que define cómo se transmiten los datos a través de una línea serie. Modbus RTU es un protocolo de comunicación que define cómo se intercambian los datos entre dispositivos.

Cuando se utiliza RS485, el ESP32 tendrá que configurarse para utilizar la capa física RS485. Esto puede hacerse configurando la velocidad en baudios, la paridad y los bits de parada adecuados. Si se utiliza Modbus RTU, el ESP32 deberá configurarse para utilizar el protocolo de comunicación Modbus RTU. Para ello, necesitamos configure la dirección del esclavo, los códigos de función y los registros adecuados.

Además, cuando se utiliza Modbus RTU, el ESP32 tendrá que ser capaz de interpretar el formato de datos Modbus RTU. Este formato de datos es un formato binario diferente del formato ASCII que utiliza RS485.

A continuación se muestra una tabla que resume las diferencias entre RS485 y Modbus RTU:

FeatureRS485Modbus RTU
Physical layerElectricalSerial
Communication protocolNoneYes
Data formatASCIIBinary
ConfiguationBaud rate, parity, stop bitsSlave address, function codes, registers
InterpretationASCIIBinary

En general, la principal diferencia entre RS485 y Modbus RTU es que Modbus RTU es un protocolo de comunicación completo, mientras que RS485 es sólo un protocolo de capa física. Esto significa que cuando se utiliza Modbus RTU, el ESP32 tendrá que ser configurado para utilizar tanto el protocolo de comunicación Modbus RTU como la capa física RS485.

Aqui amigo lector dejamos algunos detalles del protocolo usado en las nuevas versiones:

Añada un display a un ESP32



I2C (Inter-Integrated Circuit) es un modo de comunicación en serie de dos hilos, que puede utilizarse para la conexión de microcontroladores y sus periféricos. Los dispositivos que utilizan la comunicación I2C deben estar conectados a la línea de datos serie (SDA), y la línea de reloj serie (SCL) (llamado bus I2C). Cada dispositivo tiene una dirección única y puede utilizarse como transmisor o receptor para comunicarse con los dispositivos conectados al bus.

Como es de suponer usar este tipo de comunicación I2C con un controlador LCD requiere muchos menos hilos para la gestión del mismo, pues tradicionalmente se controlaban según el bus de datos (4 bits o 8bits) con al menos 4 u 8 hilos de datos, uno para registro seleccionado(RS), otro para lectura/escritura (R/W) , el de reloj (enable) y dos hilos para alimentación. Es decir, la configuración de pines de este tipo de displays LCD sin este tipo de controladores I2C compatibles con el standard de Hitachi es/era la siguiente:

  1. Tierra
  2. VCC +3.3 a +5V (típico)
  3. Ajuste de contraste (VO) Esta es una entrada analógica , típicamente conectado a un potenciómetro. El usuario tiene que ser capaz de controlar este voltaje independiente de todos otros ajustes, para optimizar la visibilidad del display que varía con la temperatura y, en algunos casos, con la altura sobre el nivel de mar. Con un ajuste incorrecto el display parecerá para funcionar mal.
  4. Registro Seleccionado (RS). RS=0: Comando, RS=1: Dato
  5. Lectura/Escritura (R/W). R/W=0: Escribe, R/W=1: Lee (En la mayor parte de las aplicaciones que leer del HD44780 no tiene sentido. En ese caso este pin puede ser permanentemente conectado a tierra y no hay necesidad de asignar pines de entrada/salida para gestionarlo.)
  6. Reloj (Enable). Disparado por el borde descendente
  7. Bit 0 (No utilizado en operación de 4 bits)
  8. Bit 1 (No utilizado en operación de 4 bits)
  9. Bit 2 (No utilizado en operación de 4 bits)
  10. Bit 3 (No utilizado en operación de 4 bits)
  11. Bit 4
  12. Bit 5
  13. Bit 6
  14. Bit 7
  15. Backlight Ánodo (+) (Si aplica)
  16. Backlight Cátodo (-) (Si aplica)

En este ejemplo vamos a ver como conectar un display LCD1602 que integra un controlador I2C con un LCD y este con un ESP32 ,! lo cual solo requiere solo 4 hilos !.En este caso,la pantalla LCD1602 puede mostrar 2 líneas de caracteres en 16 columnas siendo capaz de mostrar números, letras, símbolos, código ASCII, etc. Además el precio es muy asequible pues ronda los 6€/unidad en Amazon y obviamente también existen displays de muchas mas líneas y de mas caracteres según las necesidades particulares de cada diseño.

Este módulo LCD I2C/IIC por tanto puede mostrar 2 líneas de caracteres, 16 para cada uno y es compatible con la mayoría de los microcontroladores de corriente. Los principales modelos de Arduino , Raspberry Pi,/ Raspberry Pi Pico, ESP32 o ESP8266 (otros controladores también pueden ser compatibles, pero el fabricante no proporciona tutorial y código).

A continuación se muestra una pantalla LCD1602 monocroma junto con su diagrama de circuito:

Como podemos ver la pantalla LCD1602 I2C integra una interfaz I2C que conecta el módulo de entrada serie y salida paralela a la pantalla LCD1602.

Esto nos permite utilizar sólo 4 líneas para operar el LCD1602: GND, VCC ( 5v DC),SDA y SCL.

El chip IC serie-paralelo utilizado en este módulo es PCF8574T (PCF8574AT), y su dirección I2C por defecto es 0x27(0x3F), de modo que si tiene problemas para ponerlo en funcionamiento con el código que veremos , ¡cambie 0x27 a 0x3F !-

El pin del módulo PCF8574 y el pin del LCD1602 se corresponden y conectan entre sí:


Así que sólo necesitamos 4 pines para controlar los 16 pines de la pantalla LCD1602 a través de la interfaz I2C.
En este ejemplo , vamos a utilizar el I2C LCD1602 para mostrar algunos caracteres estáticos y los dinámicas. Las conexiones por tanto del display con un ESP32 no pueden ser mas simples como podemos ver a continuación;

Es muy importante saber que la dirección I2C de este LCD varía entre los diferentes chips incorporados( Chip 8574AT: 0x3F y 8574T o chip en blanco: 0x27 )

En la imagen podemos ver una imagen , mas claramente como es este tipo de display y como ha evolucionado de un modelo antiguo donde claramente se aprecia el interfaz i2c una placa aparte y las versiones actuales donde ya va integrado dentro del diseño de la propia placa del LCD.

Podemos usar simplemente cuatro cablecillos hembra -hembra para probar el conjunto:

No es demasiado engorroso todo lo demás porque solo necesitaremos conectar un cable microusb para alimentar el conjunto:

Obviamente para poder escribir caracteres en la pantalla tendremos que cargar el fw adecuado y que vamos a ver a continuación ( sino cargamos nada simplemente aparecerá en la primera lineá los 16 caracteres oscuros)

Código de ejemplo

Antes de escribir código, necesitamos importar la librería necesaria, para lo cual utilizamos la librería de terceros LiquidCrystal I2C. Si aún no la ha instalado, por favor necesitara hacerlo para compilar el siguiente código de mas abajo.
Los pasos para añadir librerías de terceros son los siguientes:

  • Abra arduino ide
  • Vaya aSketch->Include library-> Manage Librerías.
  • Introduzca » LiquidCrystal I2C» en la barra de búsqueda
  • Seleccione » LiquidCrystal I2C » para su instalación

A continuación mostramos un ejemplo de como pintar cualquier carácter en la primera o segunda línea.


#include <LiquidCrystal_I2C.h>
#include <Wire.h>
/*
 * #define SDA 13 //Define SDA pins
#define SCL 14 //Define SCL pins
*/
#define SDA 13  /* 2// 4// 13 //Define SDA pins */
#define SCL 14  /*1//5//14 //Define SCL pins
/*
* note: If lcd1602 uses PCF8574T, IIC's address is 0x27,
* or lcd1602 uses PCF8574AT, IIC's address is 0x3F.
*/
//LiquidCrystal_I2C lcd(0x27,16,2); 
LiquidCrystal_I2C lcd(0x3F,16,2);

bool ledState = false; // Inicializar el estado del LED como apagado

void setup() {
   Serial.begin(115200); // Iniciar la comunicación serial
  pinMode(LED_BUILTIN, OUTPUT); // Configurar el pin del LED interno como salida

 Wire.begin(SDA, SCL); // attach the IIC pin
 lcd.init(); // LCD driver initialization
 lcd.backlight(); // Turn on the backlight
 lcd.setCursor(0,0); // Move the cursor to row 0, column 0
 lcd.print("hello, world! "); // The print content is displayed on the LCD
}

void loop() {
 lcd.setCursor(0,1); // Move the cursor to row 1, column 0
 lcd.print("Counter:"); // The count is displayed every second
 lcd.print(millis() / 1000);
 delay(1000);
 ledState = !ledState; // Cambiar el estado del LED
 digitalWrite(LED_BUILTIN, ledState); // Encender o apagar el LED según el estado actual

 Serial.print("LED state: "); // Imprimir el estado del LED en la consola
 Serial.println(ledState);


}

Este es un código de boceto Arduino que inicializa y controla una pantalla LCD con interfaz I2C y parpadea un LED al mismo tiempo.

La primera parte del código incluye las librerías necesarias para la comunicación I2C y el control de la pantalla LCD. Las líneas de comentario muestran diferentes opciones para los pines SDA y SCL que se pueden utilizar dependiendo de la placa que se utilice.

Las siguientes líneas establecen la dirección I2C del LCD y el número de filas y columnas de la pantalla. Luego, la librería Wire es inicializada para la comunicación I2C y el controlador LCD es inicializado. Finalmente, se enciende la luz de fondo y se imprime el mensaje «¡Hola, mundo!» en la primera fila de la LCD.

La función de bucle se ejecuta continuamente y actualiza la segunda fila de la LCD con el valor actual de la función millis() dividido por 1000, que se incrementa cada segundo. Al mismo tiempo, alterna el estado del LED usando el pin LED incorporado e imprime el estado actual del LED al Monitor Serial.

En la siguiente imagen podemos ver funcionando el display con el código anterior.

Por cierto, si planea usar un display de este tipo ha de saber que los caracteres se sobrescriben en la línea correspondiente ,por lo que es responsabilidad del usuario borrar la pantalla cuando corresponda ( por ejemplo escribiendo 16 caracteres en blanco en la línea que nos interese)