Medidor de consumo no invasivo, con ESP, y tasmota

Hoy os explicaremos como instalar y configurar un medidor de consumo no invasivo en nuestro cuadro general, y controlarlo mediante un ESP8266 con tasmota, además le incorporaremos una pantalla para observar los consumos desde el propio cuadro.

El objetivo de este tutorial es dejarlo todo bastante explicado para que cualquiera pueda realizarlo aunque tenga poca idea del tema, sin tener que recurrir a otras guías publicadas anteriormente

PREPARATIVOS

A continuación os detallamos el material necesario. Puesto que los materiales no deben reunir ningún requisito especial, no hemos adjuntado links de compra para evitar malentendidos con los referidos

  • ESP8266, en este caso se ha usado un NodeMcu ESP 12E, pero es replicable con weemos d1, lolines y demás.
  • Una pantalla con interface I2C, probablemente se pueda usar otra pero no lo he probado.
pantalla con interface I2C
  • Un conversor de 220VAC a 5VDC
conversor de 220VAC a 5VDC
  • Un medidor de consumo no invasivo PZEM-004T (si lo veis sin el conector usb casi que mejor, porque no se va a usar)
medidor de consumo no invasivo PZEM-004T

Para hacer funcionar todo este material necesitaremos:

  • El arduino IDE, yo he usado la versión 1.8.5 porque es con la que he conseguido que la cosa funcione
arduino
código tasmota

INSTALACIÓN DEL SOFTWARE

Una vez se tiene todo se instala (instalador) o se descomprime (portable) el arduino IDE y ANTES DEL PRIMER ARRANQUE DEL PROGRAMA, se crea una carpeta llamada “portable” dentro de la carpeta de Arduino, bien en Documentos/Mis Documentos/Arduino/libraries en el caso de instalar o en la carpeta donde hayamos descomprimido el portable

librerías arduino

Al descomprimir la carpeta de tasmota tendremos las librerías necesarias en la carpeta lib, tan solo hay que copiar el contenido de esta carpeta a la carpeta libraries de arduino bien en

en el caso de instalar o en la carpeta donde hayamos descomprimido el portable.

Después, reemplazaremos el archivo platform.txt que está en

con el que hay en la carpeta del firm de tasmota, en

carpeta final

Tras copiar las librerías, arrancamos el Arduino IDE y bajamos las librerías de la tarjeta ESP8266 para poder trabajar con ella de la siguiente manera:

  • En archivo/preferencias, se introduce en Gestor de URLs adicionales de tarjetas la siguiente dirección: http://arduino.esp8266.com/stable/package_esp8266com_index.json
preferencias
  • Después se va a herramientas/placas/gestión de tarjetas:
gestión de tarjetas
  • Ahora en la barra de búsqueda ponemos ESP8266 y saldrá el siguiente controlador, el cual tenemos que instalar (usaremos la versión 2.5.0 que es la que corresponde con el archivo platform.txt que cambiamos anteriormente):
gestión de tarjetas 2
  • Tras instalar el controlador ya aparecerán un listado de placas esp8266 en la gestión de placas, y seleccionaremos en este caso la siguiente configuración:
gestión de tarjetas 3
gestión de tarjetas 4

El puerto será el correspondiente a nuestra placa, es posible que se tengan que instalar drivers CH340 para que el ordenador la reconozca.

  • Una vez se tiene seleccionada la placa, hay que hacer un par de modificaciones en el código del firm, para lo que abriremos el archivo sonoff.ino que se encuentra en a carpeta que hemos bajado de tasmota, carpeta sonoff:

Tras seleccionar el tipo de placa, vamos a la carpeta donde tenemos el firm de Tasmota y dentor de la carpeta sonoff, abrimos el archivo sonoff.ino y se abrirán una serie de pestañas dentro del IDE de arduino.

Nos iremos a la pestaña my_user_config. Una vez en esa pestaña, en el apartado wifi pondremos las credenciales de la red a la que queremos conectarnos (está en las líneas del principio):

Lo que está entre comillas tiene que ir entre comillas, no se quitan

(para buscar estas líneas puede usarse el buscador pulsando CTRL+F)

Esto se queda así si queremos ip dinámica, si queremos estática la fijamos

Aquí ponemos la ip del router que tenga la red

Aquí definimos los parámetros de la wifi a la que queremos conectarnos

Si queremos que el lenguaje del Sistema esté en español, bajamos hasta la línea:

Y se le quitan las barras del principio, quedando así:

En caso contrario se quedaría en inglés

Ahora bajamos hasta la línea que pone:

Y se le quitan las barras del principio, quedando así:

Si se quiere configurar los parámetros mqtt se hará en el apartado:

Ahora para securizar la conexión vía web, pondremos un password:

Por defecto el usuario será “admin” sin las comillas.

Salvamos cambios en la pestaña Archivo.

Una vez realizadas las modificaciones, se conectará el NodeMCU vía USB pulsando el botón flash mientras se conecta el cable, y tras seleccionar el puerto correcto en herramientas/puerto, se subirá el firm:

selección de puerto

En la parte de debajo de la pantalla de programa se verá una barra de progreso a la derecha que pondrá compilando, tras unos minutos, en la parte negra saldrá una barra de progresión consistente en puntos rojos con un porcentaje al final de cada línea, finalizando la grabación al llegar al 100%.

CONFIGURACIÓN DEL ESP

En ese punto, desconectamos el usb y conectamos de nuevo para que se inicie el firm

  • Cuando se inicie el firm el esp8266 se conectará a la wifi con una ip asignada por el router en caso de no haberla definido o la que le hayamos definido anteriormente. Para poder descubrir cuál es usaremos fing en un teléfono conectado a la misma wifi o cualquier programa que analice la red a la que estamos conectados en el pc.

Tras localizarla se pondrá en la barra de direcciones del navegador y se abrirá un cuadro de diálogo en el que pedirá el nombre de usuario (admin) y el password que será el que hemos definido anteriormente.

  • Tras acceder a la web de gestión de Tasmota, lo primero que tenemos que definir es el tipo de placa que estamos utilizando para que sepa qué entradas tiene, para ello iremos a la sección “configuration”, “configure module” y allí seleccionaremos el tipo de placa 18 “generic”. Tras salvar, la placa se reinicia
configuración placa
  1. Una vez se reinicie volveremos al mismo punto y tendremos las siguientes entradas que configuraremos como se muestra:

De esta forma quedan definidas qué entradas serán para la captación de los datos del GPIO 1 y 3 como Tx y Rx del medidor de potencia respectivamente, y GPIO 4 y 5 como SDA y SCL de la pantalla. Podemos poner también un botón para encender y apagar la pantalla seleccionando en GPIO0 Button1 el modo “button1” y meter en el GPIO2 un sensor de temperatura y humedad DHT11, seleccionando DHT11 en el desplegable; esto es optativo

Salvamos y la placa se reiniciará otra vez.

Esta vez en la pantalla principal ya aparecerán una seria de valores que son los que medirá el PZEM y que se muestran en dicha pantalla por comodidad, de una forma similar a esta (la foto de la derecha es con el DHT11):

pantalla principal
pantalla principal 2

Ahora pasamos al cableado en el que debería quedar así:

Con este esquema todo funciona correctamente siempre que el nodeMCU se alimente por usb, ya que el PZEM funciona a 5 voltios. (La pantalla es OLED es posible que no se encienda nada hasta que no se configure.

Es recomendable si no se va a tener acceso al ESP una vez montado, que se monte un botón de reset por si fuera necesario resetar el integrado. Para ello, simplemente montaremos un segundo botón que una el pin reset (bajo la línea amarilla que va del TX del PZEM al D7) con cualquiera de los pines de tierra (G) que tiene la placa.

Por la bobina del PZEM-004T tiene que pasar SOLO el cable de fase (marrón) para que pueda medir (si es un cable que va a enchufe y el medidor no lee, girar el enchufe ya que las fases pueden estar cambiadas). En el PZEM-004T, donde pone AC va la alimentación a 220 Voltios alterna, aprovecharemos esa clema para sacar un segundo juego de cables y conectar ahí la fuente 220VAC-5VDC y poder alimentar nuestro NodeMCU, yo lo he hecho con un cable usb de móvil que he cortado, conectando el cable rojo al positivo de la fuente y el negativo al negro.

disposición cableado

CONFIGURACION DE LA PANTALLA

Después de eso ya solo queda el definir y configurar la pantalla. Para ello iremos al apartado Console de la página principal de la web de nuestro tasmota, donde tenemos un apartado inferior donde mandar comandos al equipo:

comandos del equipo

Ahí tendremos que usar el comando I2Cscan (ejecutamos escribiéndolo en la consola y pulsando intro) para que busque la pantalla y nos de la dirección lógica de la misma. Nos la dará en hexadecimal y será del tipo 0x3f o similar. Ahora tendremos que traducirla a decimal, por ejemplo en la web https://www.binaryhexconverter.com/hex-to-decimal-converter y nos dará el valor que corresponda (en el caso del ejemplo es 63).
Escribimos en la consola DisplayAddress seguido del número decimal que hemos obtenido, en el caso del ejemplo

y pulsamos intro.

Ahora fijaremos el tiempo de refresco con el comando TelePeriod. El mínimo tiempo son 10 segundos por valor, luego pondremos

y pulsaremos intro de nuevo.

Ahora toca decir qué tipo de pantalla usamos y qué datos y como queremos que nos los enseñe. Está recogido en su web https://github.com/arendst/Sonoff-Tasmota/wiki/Displays, os la pongo aquí porque aunque lo explique en el tuto podéis ver si meten alguna nueva funcionalidad o modo más adelante.

El tipo de pantalla lo fijamos con el comando DisplayModel, y tenemos las siguientes opciones de pantallas soportadas:

displaymodel

Si por ejemplo quisiéramos usar una pantalla oled 12864, pondríamos

DisplayModel 2 (En caso de ser una LCD2004 sería 1)

y pulsaríamos intro, con la dirección hexadecimal veremos la que tenemos. Por ejemplo, si I2CScan nos da un valor de 0x3C, el modelo a seleccionar será el tipo 2.

Por defecto la pantalla un área de pantalla de 8 columnas por 2 filas, por lo que en caso de usar una oled de 128x64 puntos, tendremos que fijar el área de pantalla en 20 columnas por 8 filas, o en las que queramos que tenga, para ello, utilizaremos los siguientes comandos:

DisplayCols para el número de columnas y DisplayRows para el número de filas, así, por ejemplo, si queremos fijar el ejemplo anterior lanzaremos los comandos:

DisplayRows 8 (para la pantalla LCD 2004 el valor sería 4)

En caso de que la pantalla esté girada, se podrá rotar la imagen en la pantalla con el comando:

DisplayRotate y un valor de 0 a 3, donde 0 rota 0º, 1, rota 90º, 2 rota 180º y 3 rota 270º

Para el tipo de datos que queremos que nos muestre tenemos estas opciones y se definen con el parámetro DisplayMode :

opciones displaymodel

Se seleccionará el modo de visualización con el comando DisplayMode. En un principio vamos a seleccionar el valor 2 con DisplayMode 2 (si la pantalla es LCD2004 seleccionamos el modo 0). A estas alturas la pantalla debería estar encendida, en caso contrario, hay que verificar que en la pantalla principal de tasmota ponga ON, en caso contrario pulsaremos el botón toggle (en castellano creo que lo pone como secuenciar) y debería encenderse (si es oled no se enciende si no muestra datos, así que si no muestra nada reinicia el NodeMCU y debería mostrar la info de arranque, en caso contrario repite la configuración que algo raro hay)

Si ya hemos visto que todo funciona, vamos a usar el modo 4 para poder definir qué queremos que nos muestre. Podríamos usar el modo 2 pero hay información que en mi caso prefiero que no muestre como puede ser el factor de potencia porque no me aporta mucho y además lo muestra con los nombres ingleses de cada sensor, así que vamos a definir una regla con lo que queremos que nos muestre. La sintaxis está definida en el link de la página anterior. Con esta orden se muestra info de potencia instantánea, consumo del día, voltaje, intensidad y consumo total acumulado en una pantalla oled de 20 columnas por 8 filas, y tiene los espacios necesarios para que quede alineado:

Reglas para OLED y pantallas 12864:

Para esta regla hay que seleccionar después:

Si queremos que se muestre de forma no rotativa la información, se puede hacer de esta manera:

y en este caso seleccionaremos:

Reglas para LCD2004:

Para esta regla hay que seleccionar después:

Con esta sintaxis en una pantalla oled muestra los valores ordenados y cuadrados, pero podéis poner la que mejor os venga. Si es mucho lío con la opción DisplayMode 2 os muestra toda la info sin problema.

Después hay que activar la regla con el comando:

Para la segunda regla:

Si necesitáis desactivarla, simplemente con poner

Se desactiva

Con esto debería funcionar todo sin problema, espero que os sirva para animaros a hacer vuestro propio contador!

INTEGRACIÓN EN HOME ASSISTANT

Para integrar las lecturas en Home assistant, tendremos que definir los sensores como MQTT de la siguiente manera (aquí se ha definido el topic como “contador”, y se supone que en la configuración MQTT de tasmota se ha seleccionado como full topic %prefix%/%topic%/ )

Pues eso es todo, como siempre, si tienes cualquier duda déjanos tu comentario o pásate por el grupo de telegram de @Domology

Fuentes:

https://programarfacil.com/podcast/como-configurar-esp01-wifi-esp8266/

Si quieres conocer otros artículos parecidos a Medidor de consumo no invasivo, con ESP, y tasmota puedes visitar la categoría ESP8266.

  1. Franzisc0 dice:

    Hola,
    He comprado ya 4 placas pzem004t y todavia no he conseguido que ninguna me de respuesta.

    1. Franzisc0 dice:

      Me auto respondo, el problema me lo resolvio el gran @Gubenote y es que en el manual hay un error, o al menos mis placas PZEM004 funcionan con el sensor PZEM016 y no con el PZEM04 que indica la foto de este manual.

  2. Enrique dice:

    El esquema que muestras no corresponde a los componentes que citas al principio, además hay una plaquita que no esta en la lista (arriba derecha con tapa azul) y no se ve que es, ni veo que digas que es en la explicaciones. Por lo demás estoy haciendo inventario, porque me interesa... Gracias de ante mano!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir