Archivo de la etiqueta: Wemos D1 mini

Material Curso Smart Cities

Para el curso on-line “Fundamentos IoT y Desarrollo con Node-RED para Smart Cities”, el material necesario por parte de los Asistentes para realizarlo es:

  • 1 PC o Portátil con conexión a internet
  • Para seguir el curso on-line es recomendable dos pantallas, una para seguir el vídeo y otra para programar en Node-RED.

El PC de cada asistente deberá tener un sistema operativo instalado, ya sea un sistema Windows, MacOS o Linux. Las licencias del Sistema Operativo y el software que tenga correrán a cargo del cliente/alumno.

  • Nodo Edge/Gateway. Instalación Node-RED. Recomendable usar Raspberry Pi + tarjeta SD 16Gb + alimentador conectada a Internet por alumno, pero podría usarse una máquina virtual o en un servidor cloud. Opcionalmente puede usarse instancias en la nube de Node-RED desde el servidor de https://www.aprendiendoarduino.com/ 

Las Raspberry Pis se usarán como instancias de Node-RED y nodos edge a los que se conectan los nodos remotos, por lo que no conectaremos sensores/actuadores/periféricos a las Raspberry Pi.

  • Nodos remotos por asistente compuesto por el siguiente material:
    • 2x Wemos D1 min o NodeMCU o equivalente
    • 1x shields para wemos D1 mini relé o equivalente
    • 1x shields para wemos D1 mini neopixel o equivalente
    • 1x shields para wemos D1 mini oled o equivalente
    • 1x shields para wemos D1 mini temperatura (puede ser DHT o
    • de temperatura) o equivalente
    • 1 x Cable USB para programar Wemos

Si el alumno tiene algún HW con que quiera interactuar, puede presentarlo y lo integramos en las prácticas. El HW puede estar tanto en el aula como remotamente en su casa, oficina, etc…

Servicios Cloud para el Curso

Se usará un broker común para comunicar todos los dispositivos: mqtts://aprendiendonodered.com:8883

Los alumnos recibirán usuario y contraseña para acceder al broker con permisos de lectura y escritura en smartcities/#

Base de datos MySQL en https://enriquecrespo.com/phpmyadmin/ donde los alumnos podrán usar para almacenar datos. Los alumnos recibirán las credenciales de acceso.

Base de datos InfluxDB en https://enriquecrespo.com:8086/ donde los alumnos podrán usar para almacenar datos. Los alumnos recibirán las credenciales de acceso.

Grafana en https://enriquecrespo.com:3000/ para representar gráficamente los datos. Recibirán por correo las credenciales de acceso.

Otros servicios programados con Node-RED en aprendiendonodered.com: API, Open Data, servidor FTP, gateway servicios de terceros, simulación de datos, etc… y servicios self hosted (gotify, thingsboard, thinger.io, etc…)

Interacción con servicios cloud de terceros como: APIs, Open Data, Cámaras/Imágenes, Plataformas IoT, Redes Sociales, Servicios de Mensajería, Servicios de alertas, email, etc…

Topología de Prácticas

MQTT y Node-RED

Node-RED y MQTT con Wemos D1 Mini

Capturar los datos mandados por los nodos remotos por MQTT.

Sólo tienes que arrastrar el nodo mqtt que está en la categoría input al flujo.

sistema alarma node-red

Ahora hay que configurarlo. Aquí es donde vemos la potencia de Node-RED. En el caso de MQTT lo único que tenemos que hacer es configurar el broker y el topic.

Al tratarse de un nodo de entrada, lo que hace es recibir los mensajes publicados en un topic es decir, se suscribe al topic. Haz doble click sobre el nodo para que abra el panel de configuración.

En el panel de configuración MQTT vamos a configurar primero el broker MQTT. Haz click en el lápiz que aparece en Server.

sistema alarma node-red

Esto abre un nuevo panel de configuración. Pon un nombre al broker MQTT por ejemplo RASPBERRY PI MOSQUITTO. En Server tienes que poner la IP donde está instalado el broker MQTT y el puerto que utiliza, normalmente es el 1883.

Esta sería la configuración mínima. No te olvides de hacer click en el botón Add.

sistema alarma node-red

Después de esta acción volverás al panel de configuración del nodo mqtt y automáticamente, habrá seleccionado el broker MQTT que acabamos de crear.

Por último, vamos a rellenar el campo de Topic. Debe ser el mismo que hemos puesto en Arduino o el ESP8266, /casa/puerta/alarma. Una vez lo tengas, haz click en Done.

sistema alarma node-red

Ahora sólo nos queda probarlo. Para ello vamos a utilizar el mismo nodo debug de la categoría output que hemos utilizado antes.

Arrástralo al flujo, conecta los dos nodos y haz click en el botón Deploy.

sistema alarma node-red

Para probar el sistema lo podemos hacer de dos formas. Desde una terminal de Raspberry Pi podemos publicar un mensaje en el topic o directamente conectando la placa y simulando que abren la puerta.

El resultado sería el siguiente.

sistema alarma node-red

Otro ejemplo mucho más completo con Lego: http://www.internetoflego.com/lego-train-automation-wifi-controlled-nodemcu-esp8266/ 

Cargar Datos de Raspberry Pi a MQTT

Mandar cada 10 segundos los datos de CPU, Memoria y temperatura de la Raspberry Pi por MQTT al topic: cursomqtt/raspberrypixx/{CPU/Memoria/Temperatura}

Código para obtener los datos de Raspberry Pi, usando en nodo exec: 

[{"id":"af22b399.12614","type":"exec","z":"8a81314e.a0f79","command":"vcgencmd measure_temp","addpay":false,"append":"","useSpawn":"","timer":"","name":"RPi Temp.","x":325.2221908569336,"y":46.33333683013916,"wires":[["14f0a295.59181d"],[],[]]},{"id":"408435c9.447fec","type":"exec","z":"8a81314e.a0f79","command":"top -d 0.5 -b -n2 | grep \"Cpu(s)\"|tail -n 1 | awk '{print $2 + $4}'","addpay":false,"append":"","useSpawn":"","timer":"","name":"CPU Load","x":325.2221908569336,"y":126.33333683013916,"wires":[["2c7475c7.6cc01a"],[],[]]},{"id":"8fbcbdf9.549b7","type":"exec","z":"8a81314e.a0f79","command":"free | grep Mem | awk '{print 100*($4+$6+$7)/$2}'","addpay":false,"append":"","useSpawn":"","timer":"","name":"Free Memory","x":325.2222099304199,"y":190.55557250976562,"wires":[["daf6433c.bad81"],[],[]]},{"id":"14f0a295.59181d","type":"function","z":"8a81314e.a0f79","name":"","func":"str = msg.payload\nmsg.payload = str.substring(5,9);\nreturn msg;","outputs":1,"noerr":0,"x":471.888858795166,"y":33.00000190734863,"wires":[["46daa272.4333ac","334a9ddd.345602"]]},{"id":"daf6433c.bad81","type":"function","z":"8a81314e.a0f79","name":"","func":"str = msg.payload\nmsg.payload = parseInt(str.substring(0,str.length - 1));\nreturn msg;","outputs":1,"noerr":0,"x":530,"y":180,"wires":[["1ba39571.ba75ab"]]}]

Flujo:

Ejemplo con Nodos Remotos

Vamos a usar los Wemos D1 mini, para integrarlos como nodos remotos y programarlos desde Node-RED.

Esquema:

Firmware de uso de cada shield:

El firmware para los nodos remotos:

Probar cada firmware y hacer un programa sencillo para interactuar con ellos.

Firmware de otros nodos remotos: https://github.com/jecrespo/Curso-Node-RED/tree/master/Remote%20Nodes%20Firmware/Firmware%20M5Stack%20Varios 

Completos tutoriales:

Topic Map

El topic map del firmware de los dispositivos es:

  • cursomqtt/nombre}/dato10s – publica mensaje numerado cada 10s
  • cursomqtt/{nombre}/dato60s – publica mensaje numerado cada 60s
  • cursomqtt/{nombre}/reset – publica mensaje cada reset o inicio
  • cursomqtt/{nombre}/led – suscrito (1 led ON, otro valor  led OFF)
  • cursomqtt/{nombre}/text – suscrito (muestra el mensaje por pantalla)
  • cursomqtt/{nombre}/rele – suscrito (1 relé ON, otro valor  relé OFF). Firmware relé
  • cursomqtt/wemos/oled – suscrito (muestra el mensaje por pantalla oled). Firmware oled
  • cursomqtt/{nombre}/temperatura – publica dato temperatura cada 10 segundos. Firmware DS18B20
  • cursomqtt/{nombre}/matrix – suscrito (0 efecto y apaga, de 1 a 8 ilumina de 1 a 8 líneas de matriz ). Firmware matrix.
  • cursomqtt/raspberrypi/{nombre}/CPU – publica Node-RED el datos de CPU 
  • cursomqtt/raspberrypi/{nombre}/Temperatura – publica Node-RED el datos de temperatura procesador
  • cursomqtt/raspberrypi/{nombre}/Memoria – publica Node-RED el datos de memoria libre
  • casa/wibeee/# – datos eléctricos de Wibeee
  • casa/m5atom/enrique/aviso – suscrito (“alarma” – leds rojos, “aviso” – leds amarillos, “ok” – leds verdes, otro mensaje apaga)
  • casa/m5atom/enrique/boton – al pulsar publica “press” o “longpress”
  • casa/m5stack/A – al pulsar botón A publica “press”
  • casa/m5stack/B – al pulsar botón B publica “press” 
  • casa/m5stack/C – al pulsar botón C publica “press”
  • casa/m5stack/led – suscrito (1 dibuja en pantalla círculo rojo, otro valor  dibuja en pantalla círculo verde)
  • casa/m5stack/text – suscrito, muestra por pantalla el texto
  • casa/m5stick/temperatura – publica dato temperatura cada 1 segundo
  • casa/m5stick/humedad – publica dato humedad cada 1 segundo
  • casa/m5stick/presion – publica dato presión cada 1 segundo
  • casa/m5stickplus/distancia – publica dato distancia cuando se activa
  • casa/m5stickplus/button – al pulsar botón publica “press”
  • casa/m5stickplus/led – suscrito (1 led ON, otro valor  led OFF)
  • casa/m5stickplus/label  – suscrito (“red” – circulo rojo, “yellow” – circulo amarillo, “green” – circulo verde, “black” – círculo verde)

Publicar en MQTT desde Node-RED

Publicar desde Node-RED en diversos topics para encender 

Cada firmware ya está configurado para solo configurar el topic donde va a publicar y el topic al que se suscribe:

  • RELE: Paso ON y OFF
  • OLED: Paso el string que va a mostrar por pantalla
  • LEDS: 7 topics donde paso el color en formato RGB y el brillo

Probar diferentes publicaciones en diferentes topics para encender/apagar los relés, encender/apagar leds y mandar mensajes a las pantallas.

Ejemplos a programar con Node-RED

  • Al leer una pulsación un botón de los M5stick, se enciende un relé.
  • Al superar una temperatura mandar un mensaje de alerta
  • Mandar a las pantallas oled los datos de CPU u otras mediciones
  • En función de la distancia encender más o menos leds de wemos
  • Cuando un nodo se desconecte mandar un mensaje a una pantalla

Consola MQTT en Dashboard

Instalar Dashboard de Node-RED: https://flows.nodered.org/node/node-red-dashboard

Crear un dashboard y un grupo.

Usar los siguientes nodos de Dashboard y añadir a los grupos:

  • gauge: para mostrar mediciones como la temperatura o la CPU
  • chart: para mostrar gráfica de mediciones
  • switch: para encender y apagar leds y reles
  • slider: para encender leds y aumentar la intensidad de los leds
  • text input: para mandar mensajes a las pantallas
  • text: para mostrar datos de topics

MQTT y ESP8266

Para trabajar con MQTT es interesante instalar primero en el ordenador un cliente como MQTT.fx para hacer debug: https://mqttfx.jensd.de/ o MQTT explorer http://mqtt-explorer.com/ 

Para conseguir una comunicación MQTT con ESP8266 o Arduino, emplearemos una librería. Existen muchas disponibles gracias a la comunidad que existe alrededor de Arduino. Concretamente, nosotros emplearemos una de las más conocidas y la más estable y flexible, lo que facilita su uso en proyectos que queramos realizar donde intervengan Arduino y MQTT.

Dicha librería es pubsubclient Arduino Client for MQTT y nos provee de un sencillo cliente que nos permite tanto subscribirnos como publicar contenido usando MQTT. Internamente, usa la API de Arduino Ethernet Client lo que lo hace compatible con un gran número de ‘shields’ y placas como:

  • Arduino Ethernet
  • Arduino YUN
  • Arduino WiFi Shield
  • Intel Galileo/Edison
  • ESP8266
  • ESP32

Web: https://pubsubclient.knolleary.net/ 

Instalar la librería mediante el gestor de librerías:

PubSubClient es una librería compatible con Arduino y ESP8266. Básicamente hace que nuestra placa se comporte como un cliente MQTT, es decir, que podamos publicar mensajes y suscribirnos a un topic o varios para recibir mensajes. Da lo mismo si utilizas un Arduino o un ESP8266, el código es prácticamente el mismo. La diferencia reside en cómo nos conectamos a la red WiFi o Ethernet, cada placa utiliza su propia librería.

Github PubSubClient: https://github.com/knolleary/pubsubclient 

API Documentación: https://pubsubclient.knolleary.net/api.html 

Enviando un mensaje a través del protocolo MQTT con Wemos D1 Mini

Vamos a partir de uno de los ejemplos que vienen dentro de la librería. Lo encontrarás en Archivo>Ejemplos>PubSubClient>mqtt_esp8266. Esta opción te abre el siguiente código: https://github.com/knolleary/pubsubclient/blob/master/examples/mqtt_esp8266/mqtt_esp8266.ino 

Configurar el SSID y el password de la red. En mqtt_server poner la IP de la Raspberry Pi donde se ha instalado el broker Mosquitto.

NOTA: tener en cuenta que si usamos usuario y contraseña debemos usar connect (clientID, username, password) en lugar de connect (clientID) https://pubsubclient.knolleary.net/api.html#connect3   

Código: https://github.com/jecrespo/Curso-IoT-Open-Source/blob/master/mqtt_esp8266/mqtt_esp8266.ino 

Este sketch publica un mensaje «hello world #x” consecutivo cada 2 segundos en el topic “outTopic” y se suscribe al topic “inTopic”. Además  cuando se recibe un mensaje se dispara la función callback que si es un 1 enciendo el led integrado y en caso contrario se desactiva.

Firmware para Wemos D1 Mini + Shields

El firmware para los nodos remotos:

Probar cada firmware y hacer un programa sencillo para interactuar con ellos.

Firmware de otros nodos remotos: https://github.com/jecrespo/Curso-Node-RED/tree/master/Remote%20Nodes%20Firmware/Firmware%20M5Stack%20Varios 

Topic Map

El topic map del firmware de los dispositivos es:

  • curso/wemos/{nombre}/dato10s – publica mensaje numerado cada 10s
  • curso/wemos/{nombre}/dato60s – publica mensaje numerado cada 60s
  • curso/wemos/{nombre}/reset – publica mensaje cada reset o inicio
  • curso/wemos/{nombre}/led – suscrito (1 led ON, otro valor  led OFF)
  • curso/wemos/{nombre}/text – suscrito (muestra el mensaje por pantalla)
  • curso/wemos/{nombre}/rele – suscrito (1 relé ON, otro valor  relé OFF). Firmware relé
  • curso/wemos/{nombre}/oled – suscrito (muestra el mensaje por pantalla oled). Firmware oled
  • curso/wemos/{nombre}/temperatura – publica dato temperatura cada 10 segundos. Firmware DS18B20
  • curso/wemos/{nombre}/matrix – suscrito (0 efecto y apaga, de 1 a 8 ilumina de 1 a 8 líneas de matriz ). Firmware matrix.
  • curso/raspberrypi/{nombre}/CPU – publica Node-RED el datos de CPU 
  • curso/raspberrypi/{nombre}/Temperatura – publica Node-RED el datos de temperatura procesador
  • curso/raspberrypi/{nombre}/Memoria – publica Node-RED el datos de memoria libre
  • curso/wibeee/# – datos eléctricos de Wibeee
  • curso/m5atom/enrique/aviso – suscrito (“alarma” – leds rojos, “aviso” – leds amarillos, “ok” – leds verdes, otro mensaje apaga)
  • curso/m5atom/enrique/boton – al pulsar publica “press” o “longpress”
  • curso/m5stack/enrique/A – al pulsar botón A publica “press”
  • curso/m5stack/enrique/B – al pulsar botón B publica “press” 
  • curso/m5stack/enrique/C – al pulsar botón C publica “press”
  • curso/m5stack/enrique/led – suscrito (1 dibuja en pantalla círculo rojo, otro valor  dibuja en pantalla círculo verde)
  • curso/m5stack/enrique/text – suscrito, muestra por pantalla el texto
  • curso/m5stick/enrique/temperatura – publica dato temperatura cada 1 segundo
  • curso/m5stick/enrique/humedad – publica dato humedad cada 1 segundo
  • curso/m5stick/enrique/presion – publica dato presión cada 1 segundo
  • curso/m5stickplus/enrique/distancia – publica dato distancia cuando se activa
  • curso/m5stickplus/enrique/button – al pulsar botón publica “press”
  • curso/m5stickplus/enrique/led – suscrito (1 led ON, otro valor  led OFF)
  • curso/m5stickplus/enrique/label  – suscrito (“red” – circulo rojo, “yellow” – circulo amarillo, “green” – circulo verde, “black” – circulo negro)

Práctica 3: Wifi con ESP8266

Configurar la wifi del Wemos D1 mini para mandar datos de los sensores.

Esquema:

Resultado de imagen de thingspeak esp8266

Tareas a realizar:

Solución

Escaner wifi: https://github.com/jecrespo/aprendiendoarduino-curso-esp8266-youtube/blob/master/WiFiScanMejorado/WiFiScanMejorado.ino 

Escaner wifi + oled: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/wifi_scanner%2Boled/wifi_scanner%2Boled.ino 

Conectar por HTTP a aprendiendoarduino.com: https://github.com/jecrespo/aprendiendoarduino-curso-esp8266-youtube/blob/master/WiFiClientBasicMejorado/WiFiClientBasicMejorado.ino 

Instalar librería MQTT para arduino, “PubSubClient”, mediante el gestor de librerías:

Web: https://pubsubclient.knolleary.net/

Ejemplo mqtt_esp8266: https://github.com/knolleary/pubsubclient/blob/master/examples/mqtt_esp8266/mqtt_esp8266.ino 

Comprobar que manda y recibe mensajes y que se enciende y apaga el led.

Thingspeak

Instalar la librería “thingspeak” del gestor de librerías de Arduino

Darse de alta en Thingspeak. Web: https://thingspeak.com/users/sign_up

Crear cuenta:

Crear un Nuevo Canal llamado: “Curso IoT”

Crear 4 Fields en el canal:

  • Temperatura – Guarda los datos de temperatura
  • Humedad – Guarda los datos de humedad
  • Presión – Guarda las aperturas de puerta
  • Iluminación – Guarda las aperturas de puerta

Guarda la API Key y el número de canal

Abrir el ejemplo Thingspeak — ESP8266 — program board directly — WriteMultipleFiledsSecure de la librería thingspeak

Completar los datos del fichero secrets.h (segunda pestaña):

  • SSID – SSID de la Wifi que usemos
  • SECRET_PASS — Password de la Wifi
  • SECRET_CH_ID — ID del canal creado
  • SECRET_WRITE_APIKEY — API key de Thingspeak

Ejecutar el ejemplo y comprobar en el monitor serie que manda datos. Comprobar que se conecta y sale el mensaje “Channel update successful.” cada 2’ segundos

Crear una vista privada y visualizar los datos de los 4 campos creados.

Conectar el shield DS18B20 y oled al Wemos D1 mini.

Cargar el  programa modificado para que mande los datos de temperatura del sensor DS18B20 al field 1 y lo muestre por la pantalla OLED: https://github.com/jecrespo/Curso-Node-RED/blob/master/Remote%20Nodes%20Firmware/Thingspeak_WriteMultipleFieldsSecure/Thingspeak_WriteMultipleFieldsSecure.ino

Práctica 2: Sensorización IoT con ESP8266

Programar los sensores, actuadores y periféricos que conectaremos a Internet como nodos remotos (motes). Programar la toma de datos de sensores, accionar los actuadores y usar los periféricos.

Pasos a realizar:

Módulos:

Solución

Instalar librerías:

Firmware de uso de cada shield:

Listado completo de firmware de shields: https://github.com/jecrespo/Curso-Node-RED/tree/master/Remote%20Nodes%20Firmware/Wemos%20Shields%20Usage

Librerías a instalar: