Control de temperatura con un sensor DTH11, tu Raspberry Pi e IBM IoT Platform

Introducción – Soluciones IoT con Node-RED, IBM Cloud, Raspberry Pi y DTH11

El IoT supone un cambio de paradigma impulsado por las nuevas tecnologías como la computación en la nube (cloud computing), el procesamiento en el borde (edge computing), la potencia de los nuevos protocolos y tecnologías de comunicación (como el 5G) o la gestión basada en datos (data driven) gracias a, big data y al machine learning.

Para poder desarrollar proyectos de IoT que requieran de estas tecnologías de forma ágil y sostenible, una excelente opción es el uso de plataformas en la nube como IBM Cloud. En esta guía se siguen todos los pasos para desarrollar un pequeño proyecto de IoT completamente desde cero y sin necesidad de tener conocimientos avanzados en TIC.

Para hacer nuestro proyecto tangible, físico, utilizaremos uno de los ordenadores más versátiles, accesibles y potentes (en relación calidad precio) que existen actualmente, una Raspberry Pi 4. La familia Raspberry Pi constituyen una serie de ordenadores placa única (SBC) de bajo coste desarrollados con el objetivo de poner en manos de las personas de todo el mundo el poder de la informática y la creación digital. Con estos, podemos materializar prácticamente cualquier idea de IoT que se nos pueda ocurrir a un coste muy razonable, perfecto para una PoC. Adicionalmente también utilizaremos un sensor de humedad y temperatura, el DHT11, el cual podremos encontrarlo en la gran mayoría de tiendas de electrónica así como en proveedores online.

Pre-requisitos – ¿Qué necesitas antes de empezar?

  1. Cuenta gratuita de IBM Cloud
    El primer prerequisito es conseguir una cuenta en IBM Cloud y se puede hacer en el siguiente enlace: https://cloud.ibm.com/registration Se trata de un proceso sencillo que no conlleva más de 5 minutos y que no precisa de incluir información bancaria ni de tarjetas de crédito. image image image

  2. Raspberry Pi 3 o superior
    Para la realización del tutorial se ha utilizado una Raspberry Pi 4 model B: https://www.raspberrypi.org/products/raspberry-pi-4-model-b/ image También para el tutorial se precisa que la Raspberry Pi cuente con un sistema operativo Raspbian o equivalente basado en Debian.

  3. Sensor DHT11
    Para la realización del tutorial se ha utilizado el siguiente modelo: https://osoyoo.com/2017/07/18/dht11-temperature-humidity-sensor-module/
    15-1-768x768
    Para los siguientes componentes existe una gran variedad de opciones comerciales, pudiéndose encontrar fácilmente en cualquier tienda de electrónica o en proveedores online:

  4. Placa de pruebas para prototipado (protoboard) y cables puente 22AWG o equivalentes (M-H y M-M) 102799029-38232880-43b2-11eb-8a93-1a7b03c5a9fd

  5. Diodo LED (cualquier color)
    102799091-50934300-43b2-11eb-867b-f766b93db7e0

  6. Resistencia 330Ω
    image

Tiempo estimado

En función de la destreza y del conocimiento previo en IBM Cloud, entre 1/2 y 1 hora.

Guía paso a paso

1. Realizar las conexiones a la Raspberry Pi

El primer paso es realizar las conexiones según el esquema que se muestra más abajo.

image

NOTA IMPORTANTE! – Para evitar posibles roturas, la recomendación general es realizar las conexiones con la Raspberry Pi apagada y sin alimentación.

Image from iOS

2. Configuración inicial Raspberry Pi

  1. Descargar el script funcionamiento del siguiente enlace:
    https://github.com/plplatorre/ibm-iot-raspi/blob/main/ibm_iot_raspi_script.py
  2. Descargar el fichero de configuración del siguiente enalce:
    http://osoyoo.com/driver/dht11.py
    Nota – Ambos ficheros deben estar ubicados en la misma carpeta.
  3. Importar librería de la plataforma IBM IoT desde la terminal de la Raspberry Pi con el siguiente comando: pip3 install ibmiotf

3. Configuración servicio Internet of Things Platform

3.1. Instalación Servicio Internet Of Things Platform

Seguimos los siguientes pasos para crear una aplicación Internet of Things:

  1. Log in en IBM Cloud.

  2. Hacemos click en Catalog y buscamos Internet of Things Platform

  3. Hacemos click sobre la casilla de Internet of Things Platform Screenshot 2020-12-21 at 20 15 39

  4. En la pestaña Create y completamos los siguientes campos:

  5. Region – Muy importante! Se debe seleccionar la misma ubicación para todos los servicios – London – en el caso de este tutorial

  6. Pricing plan – se deja – Lite
  7. Service name – Se precisa un nombre único, por lo que una sugerencia es el uso de iniciales y el nombre del servicio – iot-plpl-raspi – en el caso de este tutorial
  8. Resource group – Se deja Default
  9. Tags – Se deja vacío

  10. Una vez completados los campos pulsamos en Create y esperamos Screenshot 2020-12-21 at 20 16 43 Screenshot 2020-12-21 at 20 17 24

3.2. Lanzamos IoT Platform

Una vez instalado el servicio:

  1. Sobre la pantalla pulsamos en Launch

  2. Por último, hacemos log in

  3. Ya estamos dentro de nuestra plataforma IoT

Screenshot 2020-12-21 at 20 18 14

Screenshot 2020-12-21 at 20 18 34

Screenshot 2020-12-21 at 20 19 17

3.3. Creamos un dispositivo

  1. Pulsamos sobre create a device

  2. Rellenamos los campos Device Type y Device ID (con RasPi y con 665544332211 respectivamente en el tutorial), y pulsamos en Next.

  3. Podemos rellenar los metadatos si fuese necesario, para el tutorial los dejamos vacíos y pulsamos en Next.

  4. Introducimos un Authentication Token, en la práctica Tkn.1234 y pulsamos sobre Next.

  5. Para finalizar pulsamos en Finish.

Screenshot 2020-12-21 at 20 21 46

Screenshot 2020-12-21 at 20 24 27

Screenshot 2020-12-21 at 20 24 35

Screenshot 2020-12-21 at 20 26 19

Screenshot 2020-12-21 at 20 26 41

4. Instalación servicio Node-RED

4.1. Node-RED app

Seguimos los siguientes pasos para crear una aplicación Node-RED:

  1. Log in en IBM Cloud.

  2. Hacemos click en Catalog y buscamos Node-RED.

  3. Pulsamos en la pestaña Create. Screenshot 2020-12-22 at 08 50 55 Screenshot 2020-12-22 at 08 52 07

  4. Completamos los siguientes campos:

App Details

  • App name – Se precisa un nombre único, por lo que una sugerencia es el uso de iniciales y el nombre del servicio node-red-plpl-raspi en el caso del tutorial
  • Resource group – Se deja Default
  • Tags – Se deja vacío

    Service Details
  • Region – Muy importante! Se debe seleccionar la misma ubicación para todos los servicios
  • London – en el caso del tutorial
  • Resource group – Se deja Default
  • Pricing plan – Se deja Lite

  • Una vez completados los campos pulsamos en Create y esperamos Screenshot 2020-12-22 at 08 58 43 Screenshot 2020-12-22 at 08 58 54

4.2. Conectar con el servicio IoT Platform

Una vez desplegado el servicio anterior seguimos los siguientes pasos:

  1. Pulsamos sobre Connect existing Service +.

  2. Seleccionamos el servicio previamente creado de Internet of Things Platform y pulsamos sobre Done.

Si no apareciera, actualizamos la página.

Screenshot 2020-12-22 at 09 12 47

Screenshot 2020-12-22 at 09 13 46

4.3. Habilitar Continuous Delivery

  1. Primero, pulsamos sobre Deploy your app.

  2. Elegimos Cloud Foundry. Screenshot 2020-12-22 at 09 15 00 Screenshot 2020-12-22 at 09 35 57

  3. A continuación, crear una IBM Cloud Api Key pulsando sobre New y posteriormente en Ok.

  4. Haciendo scroll hacia abajo, seleccionamos la Region London

  5. Los campos Organization, Space y Host deberían completarse automáticamente.

  6. Una vez todo completado, pulsamos en Next Screenshot 2020-12-22 at 09 37 58

  7. En la nueva ventana, dejamos el DevOps toolchain name el que nos viene por defecto y de nuevo en la Region, seleccionamos London

  8. Una vez todo completado, pulsamos en Create Screenshot 2020-12-22 at 09 38 17

  9. Una vez ha comenzado el despliegue, este tomará unos minutos para completarse

  10. Las etapas que se suceden son:

  11. No stages detected

  12. In progress
  13. Success

  14. Durante el despliegue, podemos ver el log pulsando sobre Status Screenshot 2020-12-22 at 09 41 14

5. Vuelta a la Raspberry Pi, conexión con IBM IoT Platform.

De vuelta a la Raspberry Pi, modificamos el archivo ibm_iot_raspi_script.py antes descargado.

Este script realiza las siguientes funciones:

  • Importa librerías necesarias
  • Conecta con IBM IoT Platform
  • Llama al .py de configuración del sensor DHT11
  • Declara los pines que conectan el sensor DHT11 y el LED
  • Envía información y se mantiene a la escucha de una respuesta de vuelta.

Para su modificación utilizaremos los datos del servicio de Internet of Things Platfrom que hemos desplegado.

Screenshot 2020-12-22 at 10 23 48

Modificamos las líneas 6, 7, 8 y 11, quedando así:

organization = "62hh3n" #add organisation from the IoT platform service
deviceType = "RasPi" #add device type from the IoT platform service
deviceId = "665544332211" #add device ID from the IoT platform service
#authMethod = "use-token-auth"
authMethod = "token"
authToken = "Tkn.1234" #add authentication token from the IoT platform service

Screenshot 2020-12-22 at 12 35 20

Nota! – En algunos casos, el GPIO4 (en el pin 7) induce a problemas de funcionamiento. Esto se debe a que además de ser un pin GPIO (General Purpose Input Output), también tiene la función adicional de 1-wire (one-wire ó single-wire), especial para cierto tipo de sensores. La manera más sencilla de solventar los posibles problemas es cambiar el pin a otro GPIO, por ejemplo, el GPIO17 en el pin 11.

image

Más información en: https://pinout.xyz/pinout/1_wire

Una vez editado el script, a continuación guardamos y lo hacemos correr viendo como en la IBM IoT Platform empieza a monitorizarse la Raspberry Pi.

Screenshot 2020-12-22 at 10 31 08

Si mostramos los detalles, podemos acceder a información adicional.

Screenshot 2020-12-22 at 10 32 23

Pulsando sobre Recent Events podemos monitorizar las lecturas del sensor DHT11 que la Raspberry Pi está recogiendo y transmitiendo

Screenshot 2020-12-22 at 10 33 48

6. Configuración servicio Node-RED

6.1. Accedemos a Node-RED

De vuelta a IBM Cloud, una vez finalizado el despliegue de Node-RED ya estaría listo para utilizar

  1. Sobre el indicador de success , pulsamos sobre el nombre de nuestro servicio creado, en nuestro caso node-red-plpl-raspi-devops. Screenshot 2020-12-22 at 10 42 41

  2. Pulsamos sobre View console Screenshot 2020-12-22 at 10 50 36

  3. Hacemos click sobre App URL. Screenshot 2020-12-22 at 10 52 52

  4. Sobre la ventana emergente pulsamos en Next

  5. Aseguramos nuestro editor introduciendo Username y Password.

  6. Pulsamos sobre Next en 2 pasos y por último en Finish

  7. Pulsamos sobre Go to your Node-RED flow editor

  8. Hacemos log in y ya estaríamos en el editor.

Screenshot 2020-12-22 at 10 56 09 Screenshot 2020-12-22 at 10 56 34 Screenshot 2020-12-22 at 10 56 55 Screenshot 2020-12-22 at 10 57 06 Screenshot 2020-12-22 at 10 57 11

6.2. Instalando extensión IBM en Node-RED

  1. Nada mas abrir Node-RED encontraremos 2 nodos que componen una instrucción “Hello world”. Podemos probar a ejecutarla o simplemente los borramos.

  2. Antes de empezar a trabajar, vamos a descargar unos componentes necesarios. Pulsamos sobre el icono superior derecho, y en el desplegable pulsamos sobre Manage palletes Screenshot 2020-12-22 at 11 03 23

  3. En el menú que se despliega, nos posicionamos en la pestaña Install y escribimos en el campo de búsqueda ibmiotapp

  4. Pulsamos sobre Install Screenshot 2020-12-22 at 11 04 07

  5. Repetimos el proceso con node-red-dashboard

6.3. Importamos flujo

Para el tutorial se ha preparado un flujo de nodos especialmente diseñado para esta solución. Las funcionalidad de este se resume en:

  • IBM IoT (entrada) – Nodo que conecta con IBM IoT Platform y nuestro dispositivo
  • Display Temperature + Display Humidity – Nodos que realizan una operación sencilla para monitorizar estas variables
  • Alert – Nodo que devuelve un mensaje (encendido del LED) a la Raspberry Pi
  • iotdb – Persistencia de los datos del sensor
  • IBM IoT (salida) – Retorno del mensaje al dispositivo Raspberry Pi

Los pasos a seguir son los siguientes:

  1. Para obtener el flujo de NodeRED accedemos al siguiente archivo json: https://github.com/plplatorre/ibm-iot-raspi/blob/main/node-red-flow-ibm-raspi.json

  2. En NodeRED, en el menú hacemos click sobre Import: Screenshot 2020-12-22 at 11 10 44

  3. Copiamos el contenido del fichero json y lo pegamos en la ventana emergente: Screenshot 2020-12-22 at 11 12 52

Si hemos seguido los pasos correctamente deberíamos ver el flujo sin mensajes de error.

Screenshot 2020-12-22 at 11 14 29

6.4. Configuración de nodos

Completamos la configuración de los nodo tal y como se muestra en las capturas:

  1. IBM IoT (entrada) Screenshot 2020-12-22 at 11 27 00

  2. Cloudant Screenshot 2020-12-22 at 11 17 58 Nota – El Servicio de Cloudant se enlaza automáticamente y su identificador es único (será diferente al de la captura).

  3. IBM IoT (salida) Screenshot 2020-12-22 at 11 27 20

6.5. Despliegue y monitorización de variables.

El último paso es realizar el despliegue, que lo ponemos en marcha haciendo click sobre Deploy.

Screenshot 2020-12-22 at 11 24 22

Si pulsamos sobre el icono de Debug, más abajo en la barra lateral podremos ver los output que están emitiéndose de vuela al dispositivo.

Screenshot 2020-12-22 at 11 27 46

Pulsando sobre el icono de visualización y a continuación sobre el de visualizar en una ventana nueva, podremos ver 2 gráficos con las variables monitorizadas.

Screenshot 2020-12-22 at 11 31 37

Screenshot 2020-12-22 at 11 32 51

6.6. Función adicional del Script, alarma según valores

Por último, además de permitir la monitorización de las variables Temperatura y Humedad, nuestra solución incluye una función de alarma.

Volviendo a NodeRED, abrimos la configuración del nodo Alert.

Screenshot 2020-12-22 at 11 44 14

En el código JavaScript podemos ver que si la humedad llega o sube del valor 85, se activaría una alarma. Para poner a prueba nuestra solución podemos dejarlo como tal y colocar nuestro dedo sobre el sensor, lo que hará que eventualmente aumente la humedad hasta que se desencadene la alarma y consecuentemente, se encienda el led.

Si no conseguimos un valor por encima de 85, podemos modificar el código para darle un valor más bajo.

Screenshot 2020-12-22 at 11 47 41

Screenshot 2020-12-22 at 11 47 47

Image from iOS (1)

Como podemos ver, el LED se ha encendido en cuanto pase del valor marcado en el nodo y se apaga en cuanto descienda. Perfectamente podríamos monitorizar también la temperatura o ambas utilizando un LED adicional.

Resumen

Con esta práctica hemos sido capaces de familiarizarnos con el entorno de IBM Cloud y su plataforma de gestión de Internet of Things mediante caso práctico en la que hemos conectado una Raspberry Pi a través del protocolo MQTT. A continuación podemos ver un esquema de la arquitectura de la solución:

image

https://www.ibm.com/cloud/internet-of-things

https://www.raspberrypi.org/products/raspberry-pi-4-model-b/

https://osoyoo.com/2017/07/18/dht11-temperature-humidity-sensor-module/

https://github.com/NerdyMunchies/Simple-Exercise-using-Watson-IoT-Platform

https://cloud.ibm.com/catalog/services/internet-of-things-platform#about