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:

Cree su propio dispositivo IoT muy barato


Node MCU es una plataforma para el desarrollo de proyectos IoT que integra el famoso chip ESP8266, el cual se ha extendido enormemente debido a su facilidad para desarrollar proyectos open source  que pueden ademas  pueden   involucrar el IoT. Esta placa  destaca  porque integra capacidades de comunicación via WiFi , conteniendo en su interior  un microprocesador que puede ser programado fácilmente usando el  conocido lenguaje de programación Lua o bien vía Arduino IDE.

Obviamente ante todo no podemos perder de vista su bajisimo precio comparados con otras opciones mucho mas potentes como el ESP32 ( que es su sucesor y mejora en todo excepto en el precio a esta), pero en todo caso para muchos proyectos de IOT es mas qeu suficinete, pues no debemos olvidar  que incluye  el modulo wifi integrado  y un bus GPIO para conectar dispositivos de E/S. Ademas se puede programar con el sistema Arduino lo cual nos aporta un fantástico IDE y un sinfin de manuales y ejemplos de desarrollo.

esp8266

Este modulo es Ideal como una solución independiente en lugar de Arduino además de Wi-Fi  integrado siendo fácil de programar a través del IDE de Arduino (como vamos a ver ) , al igual que un Arduino.
Todos los periféricos con bus I2C puede unirse,por ejemplo Pantallas OLED, pantallas LCD, temperatura, presión, sensores de humedad pueden ser conectados en paralelo. También se puede conectar múltiples DS18B20

Sin embargo, sólo hay una entrada analógica y salida y por ejemplo algunas pantallas táctiles no se pueden conectar con ella.

¿Se pregunta cómo empezar a  desarrollar código  con  su económico ESP8266 ?

Los pasos  a seguir   para conectar un ESP8266     son los siguientes:

  •  Instalación del IDE de Arduino.Si aun no lo tiene instalado ,se puede hacer  desde aqui
  • Instalación  del paquete de la placa ESP8266 en Arduino IDE  siguiendo las instrucciones del sitio : https://github.com/esp8266/Arduino
libreria-arduino-esp8266
  • Instalación de los controladores USB

Es necesario instalar el controlador USB requerido en su ordenador  para que pueda programar el ESP8266.  Independientemente de la opción de firmware que elijamos, primero necesitamos comunicarnos con la placa de desarrollo ESP-12E utilizando la interfaz USB de la computadora.

El módulo USB a Serial UART incluido en la placa es Silicon Labs ‘CP2012, para lo cual generalmente necesitamos instalar los controladores de puerto COM virtual (VCP) fácilmente disponibles para su sistema operativo específico.Una vez instalado, debemos verificar que el CP2102 sea reconocido por su ordenador

Una vez que el controlador está instalado, podemos conectar el cable USB al puerto USB de la computadora y la placa. Después de hacerlo, deberíamos ver el mensaje: software del controlador del dispositivo instalado correctamente.

Además, podemos verificar manualmente que todo funcione correctamente siguiendo estos pasos:

Abra el Administrador de dispositivos (disponible a través del Panel de control → Sistema y seguridad → Administrador de dispositivos en la sección Sistema)
Debajo de la entrada Puertos (COM & LPT), debe haber un puerto abierto llamado USB-SERIAL CP2102 (COM) donde hay un número típicamente mayor o igual a 3.

Ahora que estamos listos para comunicarnos con nuestro ESP8266 a través del CP2102, podemos explorar algunas de las diferentes opciones de firmware disponibles.

  • Conecte  un cable usb  de datos al ESP8266
  • Seleccione   Herramientas –>ESP8266   y ahi la placa que haya comprado. En caso de  haberla comprado en Amazon aqui seleccione  NodeMCU 1.0 (ESP-12EModule).
configuracion-arduino-ide-con-esp8266

  • En el IDE de Arduino, vaya al menú de herramientas, seleccionada su placa y elija el  puerto al que está conectado su ESP8266.En el ejemplo  es el COM11
configuracuion-puerto-esp8266
  • Ahora  copie el siguiente código  para probar que puede subir y ejecutar código código  en la placa :

/*
 ESP8266 Led Parapadeante
*/

void setup(){

 pinMode(LED_BUILTIN, OUTPUT);// Initializa el  pin de  LED_BUILTIN como salida 

}

void loop() {       // la función de bucle se repite una y otra vez para siempre

digitalWrite(LED_BUILTIN, LOW);// encienda el LED  

delay(1000); //Espera de 1 segundo

digitalWrite(LED_BUILTIN, HIGH);//  Apague el LED haciendo que el voltaje sea ALTO 

delay(2000); // Espere dos segundos  para dejar apagado  LED 

}

El LED azul en el módulo ESP – 01 está conectado a GPIO 1, (que también es el pin TXD, por lo que no podemos usar Serial.print () al mismo tiempo)

Tenga en cuenta que el nivel de voltaje es BAJO  pero en realidad el LED está encendido, porque es bajo en el ESP – 01

En este código se usa  LED_BUILTIN para encontrar el pin con el LED interno  de modo

Como puede apreciar , el código ejecuta un bucle infinito en el que pone el estado bajo  un segundo (encendiendo el led)    para posteriormente forzar a nivel alto  dos segundos(apagando el led  )  y así   indefinidamente gracias al bucle  que se repite indefinidamente

 

Envio de datos a la nube de Cayenne

  • Agregue la biblioteca de Cayenne MQTT a Arduino IDE  desde aqui como un fuchero zip
  • Instale la biblioteca zip descargada en el paso anterior desde Programa -> Incluir biblioteca -> Añadir libreria ZIP. y seleccionar ahora el fichero descargado con anterioridad  Cayenne-MQTT-ESP-master.zip
  • Ya puede crear una cuenta Starter en cayenne ( si aun no la tiene  ya creada)
  • Una vez ya validado vaya a la esquina  superior  izquierda  y pulse sobre el botón verde  add new
interfaz-cayenne
  • Ahora seleccione Generic ESP8266  como la placa y  tome nota  ahora  de los siguintes paraetros ofrecidos por la  pagina:
    •  MQTT USERNAME:
    • MQTT PASSWORD:
    • CLIENT ID:
    • MQTT SERVER:
    • MQTT PORT:
    • NAME YOUR DEVICE (optional):
       
  • Abra el boceto de ejemplo incluido desde Archivo -> Ejemplos -> Cayenne-MQTT-ESP. Modifique el boceto incluido con su información de red y la información de autenticación de Cayenne que recibió al agregar su dispositivo.

Ejemplo de envio temperatura  TMP102

Normalmente se adquiere un placa auxiliar  para el pequeño sensor de temperatura digital TMP102. El TMP102 es un sensor digital (también conocido como I2C TWI), tiene una resolución de 0,0625 ° C, y tiene una precisión de hasta 0,5 ° C, lo cual lo convierte  es un sensor muy práctico pues requiere una muy baja corriente.

La comunicación con el TMP102 se logra a través de una interfaz serie de dos hilos. No existe regulador de tensión de a bordo, por lo que el voltaje suministrado debe estar entre 1,4 a 3.6VDC.

En estas placas los condensadores de filtrado y resistencias de pull-up se incluyen.

tmp102

En el código  siguiente o  muestra cómo enviar datos de temperatura a un sensor TMP102 en Cayenne Dashboard.Obviamente se requiere la Biblioteca de Cayenne para ejecutar este programa (si aún no lo ha hecho, puede instalarlo desde Arduino IDE Library Manager).

conexiones-tmp102-esp8266

Las conexiones como vemos en la iamgen  del  TMP102  al  ESP8266 on la siguintes:

            TMP102         ESP8266

  • [VCC] ————- [3V3]
  • [GND] ————- [GND]
  • [ADD0] ———– [GND]
  • [SDA] ————- [Pin analógico 4] (El SDA puede ser diferente en algunos dispositivos, por ejemplo, para Arduino Mega, el pin SDA es Pin digital 20)
  • [SCL] ———— [Pin analógico 5] (El SCL puede ser diferente en algunos dispositivos, por ejemplo, para Arduino Mega, el pin SCL es Pin digital 21)

Y este esl codigo que subiremos a nuestro ESP8266:

#define CAYENNE_PRINT Serial // Comment this out to disable prints and save space
#include <CayenneTMP102.h>
#include <CayenneEthernet.h>  // Change this to use a different communication device. See Communications examples.

// Cayenne authentication token. This should be obtained from the Cayenne Dashboard.
char token[] = "AuthenticationToken";

// Virtual Pin of the TMP102 widget.
#define VIRTUAL_PIN V1

// Address used to read from the TMP102. This is determined by the ADD0 pin on the TMP102.
// Connecting it to ground means the sensor will use 0x48 for the address. See the TMP102 datasheet for more info.

const int tmp102Address = 0x48;

TMP102 tmpSensor(tmp102Address);

void setup()
{
Serial.begin(9600);
Wire.begin();
Cayenne.begin(token);
}

void loop()
{
Cayenne.run();
}

// This function is called when the Cayenne widget requests data for the Virtual Pin.
CAYENNE_OUT(VIRTUAL_PIN)
{
// This command writes the temperature in Celsius to the Virtual Pin.
Cayenne.celsiusWrite(VIRTUAL_PIN, tmpSensor.getCelsius());
// To send the temperature in Fahrenheit or Kelvin use the corresponding code below.
//Cayenne.fahrenheitWrite(VIRTUAL_PIN, tmpSensor.getFahrenheit());
//Cayenne.kelvinWrite(VIRTUAL_PIN, tmpSensor.getKelvin());
}

Estos son los pasos resumidos que haremos en el interfaz de Cayenne:


1. En Cayenne Dashboard, agregue un nuevo widget TMP102.
2. Configure el widget en Visualización de valor.
3. Seleccione Virtual Pins y un número de pin virtual.
4. Establezca VIRTUAL_PIN en el número de pin que seleccionó.
5. Adjunte un TMP102 a su  ESP8266.

  1. Establezca la variable tmp102Address para que coincida con ADD0. ADD0 conectado a GND corresponde a una dirección de 0x48.
  2. Establezca la variable del token para que coincida con el token de Arduino desde el Tablero.
  3. Compile y cargue este boceto.
  4. Una vez que el Arduino se conecta al Tablero, debe actualizar automáticamente el widget TMP102 con datos.