Medidor PZEM-004T con Arduino ESP32 ESP8266 Python & Raspberry Pi

En esta oportunidad recopilaremos pruebas con mi nuevo medidor de consumo eléctrico PZEM-004Trealizando integraciones con algunas de las plataformas de hardware mas conocidas ESP8266, Arduino Nano, ESP32, Arduino UNO + Shield Ethernet W5100 y Python en Raspberry Pi.

Desde hace mucho tiempo deseaba probar las versión PZEM-004T de Peacefairhe comprado mi medidor en la reconocida tienda Banggood.com, a un precio muy asequible imposible no comprarlo.

Este medidor tiene grandes prestaciones en aplicaciones de medición de consumo eléctrico residencial a nivel DIY perfecto para proyectos básicos de análisis de consumo eléctrico a baja escala quizás a nivel residencial o domiciliario y es perfecto para integraciones con plataformas IoT ejemplo: Emoncms del Proyecto OpenEnergyMonitor.

Realice mi pedido a Banggood y al cabo de 7 días llego mi nuevo medidor y su respectivo CT o transformador de corriente.


Como mencione antes el tamaño es una gran ventaja, para proyectos de bajo espacio, o encapsulados pequeños.

Medidor PZEM-004T

Esta versión funciona exactamente igual a la versión PZEM-004, su protocolo de comunicación es el mismo, tiene las ventajas de ser un medidor no invasivo en el circuito eléctrico, el tamaño perfecto para espacios pequeños, cuenta con las 4 variables disponibles Potencia Activa instatanea «W», Voltaje «V», Amperaje «A» y Potencia Activa Acumulada «Wh».

Tutorial Recomendado :  Medidor de consumo eléctrico Peacefair PZEM 004 + ESP8266 & Arduino Nano

Advertencia: Se recomienda precaución dado que este proyecto implica riesgo eléctrico o electrocucion dado que se utilizan equipos conectados 110 VAC – 120 VAC, se requieren conocimientos ya sean básicos por favor documentarse previamente al respecto.

Conexiones

Montaje de pruebas

De pruebas anteriores me han solicitad compartir la conexión eléctrica del medidor y la carga, esta es la conexión utilizada en mis pruebas, esta configuración es la igual para los medidores PZEM-004 y PZEM-004T.

Nota: El enchufe 1 Alimentación del medidor PZEM-004T, puede ser conectada al punto de medición, o también se conectada a otro punto 110/220VAC de otra parte.

Advertencia: Este montaje es para pruebas didácticas, en caso de realizar un montaje real tener en cuenta calibre de cable utilizado y conocimiento de electricidad básica.



Vista frontal

El integrado principal es el SDIC SD3004 realiza la técnicamente todo, Mediciones, conversiones, cálculos y comunicación serial.

Datasheet : SDIC  SD3004

En la izquierda abajo tiene otro integrado de 8 pines es una memoria externa EEPROM I²C que almacena lo kWh, en caso de apagar el medidor no reiniciar el acumulado, junto al conector blanco están los 2 optoacopladores de aislamiento para la comunicación serial.

Pulsador frontal CLR. permite reiniciar los kWh acumulados.

Vista trasera

Modificación UART TTL de 5v a 3.3v

Esta versión PZEM tiene una UART Serial que funciona a 5V, realizare una modificación soldando una resistencia de 1K a 1/4W para permitir que la comunicación funcione a 3.3v en los casos de placas como Raspberry Pi, ESP32 y esp8266, con esta modificación la UART funcionara a 5v o 3.3v.

Nota: Esta es la manera mas sencilla y económica si no tienen al alcance un convertidor TTL de 5 a 3.3v, pero no se garantiza que funcione en todos los casos y con todos los medidores, en mi caso funciona sin problemas.

Modificación Realizada

  • Se ha soldado la resistencia de 1K.



Libreria PZEM004T para Arduino IDE

Existe una librería muy utilizada para comunicar las placas Arduino y ESP8266 con los medidores PZEM, disponible para Arduino IDE, hace unos meses note actualizaciones principalmente compatibilidad con los ESP32.

Esta librería fue creada por olehs,  gracias por su gran contribución.

Github : libreria PZEM004T.h

Vista Comparativa PZEM-004T VS PZEM-004

Pruebas

En esta ocasión realizaremos 5 pruebas de nuestro medidor PZEM-004t, Para esta prueba utilizare como carga AC mi soldador de estaño «Cautin», consume aproximadamente 25 Vatios:

  1. Prueba PZEM-004t con ESP8266 12E NodeMCU
  2. Prueba PZEM-004t con Arduino Nano «Ard-Nano»
  3. Prueba PZEM-004t con ESP32 DEVKIT
  4. Prueba PZEM-004t con Arduino UNO + Shield Ethernet W5100
  5. Prueba PZEM-004t con Raspberry Pi 3 Modelo B usando Python



Video: Prueba Completa

Review PZEM-004T with Arduino ESP32 ESP8266 Python & Raspberry Pi

1. Prueba PZEM-004t con ESP8266 12E  NodeMCU

Si han leído artículos anteriores Medidor de consumo eléctrico Peacefair PZEM 004 + ESP8266 & Arduino Nano quizás dirán que ya se realizo esta prueba, pero en esta oportunidad se utilizara la libreria HardwareSerial  en vez de SoftwareSerial y utilizaremos el segundo UART «puerto serial» de los ESP8266.

Materiales y Donde Comprarlos



Conexiones

Montaje

Codigo Arduino IDE

El puerto serial principal o UART0 pines gpio01(tx) , gpio03(rx) no se podrá utilizar para depuración dado que esta ocupado comunicando con el Medidor PZEM-004.

El medidor PZEM se conecta al puerto HardwareSerial  pines gpio13 (D7) (rx) , gpio15(D8) (tx), se adiciono un transistor PNP 2N2907 en el gpio15 para que este en estado bajo al iniciar y/o programar el ESP8266.

Nota: Sin este transistor el ESP8266 no arrancara al reiniciarse y/o programarse.

Se ha utilizado el UART1 pin gpio02(tx) para depuración serial, dado que es ttl se adiciona un Convertidor FTDI para visualizar desde PC.

Nota: Enlaces de descarga y/o github abajo.

Salida Terminal Serial

  • Puerto de salida UART1 Serial1 (gpio2) TX D4, Requiere Convertidor FTDI Serial-USB.

Recomendación: Para una explicación mas detallada paso a paso recomiendo ver el vídeo completo Review PZEM-004T with Arduino ESP32 ESP8266 Python & Raspberry Pi : PDAControl disponible en nuestro canal de Youtube PDAControl.



2. Prueba PZEM-004t con Arduino Nano «Ard-Nano»

Para la comunicación con las placas Arduino nano, se utiliza la Librería SoftwareSerial, También les presentare uno de mis últimos diseños en KiCAD técnicamente es un placa de pruebas con Arduino Nano fabricada por la empresa PCBWAY, es para programación OTA con ESP8266 para próximas pruebas, pero en este caso solo  comunicaremos el microcontrolador con el medidor.

Materiales y Donde Comprarlos



Conexiones

Montaje

  • Montaje en Placa Ard-Nano-OTA

  • Montaje en protoboard

Codigo Arduino IDE

Se han configurado los pines 10 (rx) y 11 (tx) con SoftwareSerial para la comunicación con el medidor PZEM-004T.

Nota: Enlaces de descarga y/o github abajo.

Salida Terminal Serial

  • Puerto de salida UART0 Serial0.

Recomendación: Para una explicación mas detallada paso a paso recomiendo ver el vídeo completo Review PZEM-004T with Arduino ESP32 ESP8266 Python & Raspberry Pi : PDAControl disponible en nuestro canal de Youtube PDAControl.



3. Prueba PZEM-004t con ESP32  

Esta fue una de las mejoras recientes a la librería PZEM-004T permitir comunicación con un modulo ESP32.

Materiales y Donde Comprarlos



Conexiones

Distribución de Pines para ESP32

Recomendaciones validar ubicación de pines dado que varia según fabricante de modulo,en mi caso utilizo un modulo ESP32 DEVKIT V1 Doit, he encontrado documentación detallada sobre variaciones de distribución de pines en los ESP32.

Tutorial Recomendado : ESP32: INTERNAL DETAILS AND PINOUT.

Montaje

Nota: Dado el diseño de los ESP32, para el montaje se utilizaron 2 Protoboard.

Codigo Arduino IDE

En este caso también se utiliza la librería HardwareSerial, la comunicación se realiza por los pines del UART2 IO-16(rx2) y IO-17(tx2).

Nota: Enlaces de descarga y/o github abajo.

Salida Terminal Serial

  • Puerto de salida UART0 Serial0.

RECOMENDADO: Medición de Consumo eléctrico con Ubidots Industrial & ESP32 + PZEM-004T

Medición de Consumo eléctrico con Ubidots Industrial & ESP32 + PZEM-004T

Recomendación: Para una explicación mas detallada paso a paso recomiendo ver el vídeo completo Review PZEM-004T with Arduino ESP32 ESP8266 Python & Raspberry Pi : PDAControl disponible en nuestro canal de Youtube PDAControl.



4. Prueba PZEM-004t con Arduino UNO + Shield Ethernet W5100

Realmente estaba un poco alejado de Arduino en mis ultimas pruebas, pero he decido comprar y probar una de las placas mas famosas o utilizadas, el Arduino UNO con el Shield Ethernet W5100 ambos estaban tan baratos que era imposible no comprarlos.

Materiales y Donde Comprarlos



Conexiones

Montaje

Codigo Arduino IDE

Aunque este caso no utilizaremos las prestaciones del Shield Ethernet tales como comunicación LAN y microSD, se debe tener en cuenta que el Shield Ethernet funciona por bus SPI, que usa los pines 10 y 11 del Arduino UNO, por esta razón y para evitar conflictos la librería SoftwareSerial que genera un nuevo puerto para comunicar con el PZEM-004T utiliza los pines rx(8) y tx(9).

Nota: Enlaces de descarga y/o github abajo.

Salida Terminal Serial

  • Puerto de salida UART0 Serial0.

Recomendación: Para una explicación mas detallada paso a paso recomiendo ver el vídeo completo Review PZEM-004T with Arduino ESP32 ESP8266 Python & Raspberry Pi : PDAControl disponible en nuestro canal de Youtube PDAControl.



5. Prueba PZEM-004t con Raspberry Pi 3 Modelo B  usando Python

En esta prueba quizas sea la mas compleja dado que se utilizara una Raspberry Pi, esta prueba se dividirá en 2 partes:

  • Rutina en Python para comunicación con PZEM-004T.
  • Comunicación Raspberry Pi & Medidor PZEM-004T aislado.

Rutina en Python para comunicación con PZEM-004T

Esta rutina muy bien estructurada, la encontré en el foro de Raspberrypi.org y creada al parecer por Massi, gracias a el por su contribución.

Fuente Codigo: Peaceview PZEM-004T Energy Module

En base al código compartido por Massi se ha creado el archivo PZEM-004-python.py  con la rutina que ejecutaremos en nuestra Raspberry Pi para solicitar datos a nuestro medidor, realice algunas modificaciones al código original.

Nota: Enlaces de descarga y/o github abajo.

Nota: Este archivo se puede ejecutar en cualquier equipo que ejecute Python, Ejemplo WINDOWS, MacOS y LINUX, o cualquier equipo micro-computador que lo soporte, En este caso probaremos en un Raspberry Pi.

Recomendación: Para una explicación mas detallada paso a paso recomiendo ver el vídeo completo Review PZEM-004T with Arduino ESP32 ESP8266 Python & Raspberry Pi : PDAControl disponible en nuestro canal de Youtube PDAControl.

Comunicación Raspberry Pi & Medidor PZEM-004T aislado

Hace algunas semanas tengo mi Raspberry Pi 3 , he montado la versión RASPBIAN STRETCH LITE, sin escritorio y realizo las configuraciones remotamente desde un cliente SSH, no detallare el proceso de montaje de sistema operativo raspbian dado que existen muchos tutoriales en la red.

Tutorial Recomendado: Un vistazo a la Raspberry Pi 3 Modelo B.

Materiales y Donde Comprarlos



Conexiones

Conectar el convertidor FTDI a cualquiera de los puertos USB disponibles de nuestra Raspberry Pi, la conexión TTL entre FTDI y Medidor PZEM-004T.

Montaje

En caso utilizare un Convertidor FTDI Serial USB como interface entre el Raspberry Pi y el Medidor PZEM-004T, prefiero utilizar este método de aislamiento, quizás lo mas obvio para algunos sea utilizar directamente el puerto serial propio de Raspberry Pi, pero personalmente no me gusta utilizar los gpio’s solo si es extremadamente necesario, pero lo reservare para próximas pruebas.

IMPORTANTE: Se recomienda para el Raspberry Pi una fuente de alimentación de 5v a 2A, mínimo 1A, sin conectar ningún periférico al USB o sus GPIO’s.

A continuación detallare paso a paso como solicitar datos al medidor PZEM-004T con una Raspberry Pi:

  • Tener listo la Raspberry Pi con Raspian OS instalado y cliente SSH instalado, recomiendo versión RASPBIAN STRETCH LITE. 
  • Conectar Raspberry Pi a la red local (Router/Switch), por cable o Wifi.

  •  Conocer la dirección IP asignada a nuestra Raspberry Pi, Recomiendo utilizar FING APP para ver direcciones de dispositivos en red local, en mi caso mi Raspberry pi tiene la dirección 192.168.0.27, como es DHCP podría cambiar dependiendo de la configuración de su router.

Tutorial Recomendado: ¿Cómo encontrar direcciones IP de dispositivos Ethernet?

  • Conectarse con Raspberry Pi desde cliente SSH Linux, también pueden usar Putty en caso de usar Windows o MacOS :
  • en mi caso linux Lubuntu (Ubuntu/Debian), Abrir terminal de comandos y conectarse a RPi con la dirección del dispositivo.
ssh -p 22 pi@192.168.0.27

Usuario: pi

Contraseña: por defecto  raspberry

Ya ingresamos en la terminal de nuestro Raspberry Pi Remotamente, desde aquí tenemos control total de nuestra Raspberry Pi.

Crear carpeta «python-utilities» en Raspberry Pi para guardar archivo «PZEM-004-python.py».

mkdir python-utilities

  • ingresar a carpeta «python-utilities»
 cd..
  • Ubicar archivo «PZEM-004-python.py» en nuestro PC, en mi caso Lubuntu la ruta /home/lubuntudsk, para usuarios Windows y MacOS es la carpeta de usuario actual, listos para archivo mover a RPi .

Recomendación: Para una explicación mas detallada paso a paso recomiendo ver el vídeo completo Review PZEM-004T with Arduino ESP32 ESP8266 Python & Raspberry Pi : PDAControl disponible en nuestro canal de Youtube PDAControl.



  • Listar puertos seriales de Raspberry Pi, buscar FTDI USB Serial en mi caso dev/ttyUSB0
  • dmesg | grep tty

  • Editar puerto serial en archivo «PZEM-004-python.py» , habilitar linea 21 para comunicación con puerto com=»/dev/ttyUSB0″ según sea el caso.

 def __init__(self, com="/dev/ttyUSB0", timeout=10.0): # Usb serial port
  • Abrir nuevo terminal de comandos en nuestro PC.
  • Mover archivo «PZEM-004-python.py» desde PC a Raspberry Pi, utilizaremos el protocolo scp «Simple Communication Protocol» es un método de transferencia de archivos utilizando SSH. Se requiere nombre de archivo a mover, conexión SSH RPi y ubicación destino, recomiendo no utilizar espacios en los nombres de los archivos.
scp PZEM-004-python.py pi@192.168.0.27:~/python-utilities

Archivo movido correctamente desde PC con Lubuntu hacia Raspberry Pi.

  • Por defecto Raspbian OS tiene Python instalado, pero no tiene la libreria PySerial para comunicación serial, la instalaremos con el siguiente comando.
sudo apt-get install python-serial

  • Ejecutar archivo «PZEM-004-python.py» para solicitar datos a PZEM-004T.
python PZEM-004-python.py

Si se ejecuta y las conexiones son correctas se visualizara lo siguiente, comunicando exitosamente.

  • En caso de fallar comunicación con medidor se visualizara una excepción de Timeout  al no recibir una respuesta por el Serial en 10 segundos, verificar conexiones rx/tx.



Conclusiones y  Consideraciones  Generales

Inicialmente se debe tomar mucha precaución dado que este proyecto implica riesgo eléctrico o electrocucion dado que se utilizan 110VAC -120 VAC, Aunque no algunos no lo consideren alto voltaje, esto no minimiza el peligro, se recomienda tener conocimientos básicos o documentarse, nunca realizar conexiones en caliente, siempre des-energizar los circuitos de potencia.

Debido a que no tengo idea de su nivel de habilidad técnica o los requisitos de las leyes de su país en términos de suministro de electricidad, etc., no acepto ninguna responsabilidad por ningún daño causado a través del siguiente consejo en estas páginas. Cuando se trata de tensiones de red, debe asegurarse de que todo lo que esté haciendo sea seguro y, si no está seguro, solicite el asesoramiento de alguien que esté seguro.

El medidor PZEM 004T, es muy practico, muy básico y por su bajo precio cumple con buenas prestaciones, no lo recomiendo para aplicaciones industriales teniendo en cuenta el medio ambiente, pero dejo su aplicabilidad bajo su criterio, su punto de medición de VAC es el mismo punto de alimentación , permitiendo mediciones entre 80-260VAC.

Quizás el único punto detalle en el medidor es  que no se sabe cuanto esta encendido dado que no tiene ningún indicador, pero no es ningún inconveniente grave para su funcionamiento en general.

Agradecimientos a la Tienda online Banggood.

Agradecimientos a olehs creador de la libreria PZEM004T.h

Agradecimiento a Massi por la rutina Python-PZEM00T.



Conclusiones y  Consideraciones  por prueba

Prueba PZEM-004t con ESP8266 12E NodeMCU

Al parecer aunque se realiza la conexión serial del PZEM-00T con el NodeMCU por los pines pines gpio13 (D7) (rx) , gpio15(D8) (tx), el puerto principal UART0 esta ocupado comunicando con el medidor, técnicamente la librería HardwareSerial direcciona internamentela trama PZEM internamente desde el UART0 hacia la D7 y D8, por esta razón se utiliza el pin UART1 Serial1 (gpio2) D4 para depuracion adicionando un FTDI.

Si se omite el trasnsistor PNP y se conecta directamente,el NodeMCU no arrancara.

Prueba PZEM-004t con Arduino Nano «Ard-Nano»

De todas las placas Arduino, la Nano la preferida, pequeña y tiene de todo, no presenta ningun inconveniente con el medidor.

Hace unos días realice el diseño de un shield o entrenador para arduino Nano, he diseñado mis PCB’s con la empresa PCBWAY, este prototipo «Arduino-OTA» es para próximas pruebas, para la posibilidad de programar la placa arduino inalámbricamente con 2 modulos ESP8266 muy facil.

Prueba PZEM-004t con ESP32 DEVKIT

La comunicación ESP32 y PZEM-004T funciono sin problemas, quizás el único inconveniente sea ubicar el pinout apropiado para los módulos ESP32 dado que existen una gran cantidad de fabricantes y la distribución de pines puede variar.

Prueba PZEM-004t con Arduino UNO + Shield Ethernet W5100

Aunque para nuestras pruebas por lo general utilizo casi siempre los ESP8266, No tenia un Arduino UNO y siempre había tenido curiosidad por probar el Shield Ethernet W5100 y también por varios comentarios me sugerían que la incluyera en mis pruebas.

Prueba PZEM-004t con Raspberry Pi 3 Modelo B usando Python

Realmente de las 5 pruebas realizadas esta es obviamente es la mas exigente, dado que requiere conocimientos básicos en Linux, manejo de archivos mediante linea de comandos, conocer un poco sobre protocolo SSH y obviamente conocer un poco de Python, espero que este tutorial sirva como introducción a personas sin conocimientos y puedan realizarlo sin problemas.

Dado que el Raspberry Pi es un mini-computador que ejecuta un Sistema Operativo se debe ser muy cuidadoso en su manejo, es muy diferente a un micro-controlador el cual predomina en pruebas anteriores.

ADVERTENCIA: Siempre apagar la Raspberry Pi por terminal de comandos «sudo poweroff» para evitar dañar el sistema operativo y perder todo.

Actualmente la Raspberry Pi es mundialmente reconocida y existen infinidad de tutoriales sobre como montar su sistema operativo Raspbian, recomiendo utilizar la versión sin escritorio ni gráficas para optimizar el funcionamiento general.

En el tutorial se intento explicar como realizar el movimiento de archivos desde un computador a nuestro mini-ordenador y como ejecutar nuestro archivo Python.

Referente a Python siempre lo he dicho y lo diré, es el lenguaje por excelencia para aplicaciones practicas, básicas y rápidas. En este caso se ha creado un protocolo en un simple archivo.

Finalmente para la prueba he decido no conectar el PZEM-004T directamente al UART propio del Raspberry Pi ubicado en sus gpio’s, tener en cuenta en caso de usar dicha UART funciona a 3.3v para mayor seguridad , para utilizar el archivo «PZEM-004-python.py» técnicamente solo se deberia modificar el puerto serial por la UART «/dev/ttyAMA0» propia del Raspberry Pi.

Comentar linea 21 y habilitar 22 :

#def __init__(self, com="/dev/ttyAMA0", timeout=10.0): # Raspberry Pi port Serial TTL



Descargas / Github

Referencias 

Deja una respuesta