- Componentes requeridos
- Diagrama de circuito
- Instalación de bibliotecas en la nube MQTT en Raspberry Pi
- Explicación de codificación para controlar Raspberry Pi GPIO con MQTT
En el tutorial anterior, discutimos sobre el protocolo MQTT e instalamos el servidor MQTT local en nuestra Raspberry Pi para controlar el GPIO localmente. Pero el inconveniente del servidor MQTT local es que no podemos controlar los GPIO desde cualquier lugar del mundo, solo proporciona servicios localmente. Pero si este servidor MQTT está alojado en alguna nube, cualquier dispositivo conectado a Raspberry Pi se puede controlar globalmente.
Aquí, en este tutorial, usaremos Adafruit IO como intermediario MQTT para controlar un dispositivo de CA conectado a Raspberry Pi GPIO. Consulte también otros tutoriales de automatización del hogar controlados por IoT:
- Automatización del hogar controlada por voz basada en IOT usando ESP8266 y la aplicación de Android
- Automatización del hogar controlada por teléfono inteligente usando Arduino
- Automatización del hogar controlada por web basada en IoT utilizando microcontrolador PIC y Adafruit IO
- Automatización del hogar controlada por web basada en IoT con Raspberry Pi
- Automatización del hogar controlada por voz basada en el Asistente de Google usando DIY Arduino Wi-Fi Shield
Componentes requeridos
- Raspberry Pi con Raspbian Stretch instalado.
- Módulo de relé
- Bulbo
- Cables de puente
Aquí, usaremos SSH para acceder a Raspberry Pi en la computadora portátil. Puede usar la conexión VNC o Escritorio remoto en la computadora portátil, o puede conectar su Raspberry pi con un monitor. Obtenga más información sobre cómo configurar Raspberry Pi sin cabeza aquí sin un monitor.
Diagrama de circuito
El diagrama de circuito para estos electrodomésticos controlados por IoT con nube MQTT y Raspberry Pi es simple, solo conecte una bombilla con módulo de relé en el pin 35 de GPIO de Raspberry Pi.
Instalación de bibliotecas en la nube MQTT en Raspberry Pi
Aquí se utiliza la plataforma Adafruit IO con Raspberry Pi como broker MQTT. Como hemos usado la plataforma Adafruit IO muchas veces en nuestros tutoriales anteriores, de manera similar, podemos usarla en Raspberry Pi.
Simplemente cree una cuenta en la plataforma Adafruit IO y cree un feed, si no sabe cómo crear un feed y personalizar el panel de Adafruit, siga el enlace.
Después de crear el panel, instale algunas bibliotecas en Raspberry Pi para comenzar con MQTT.
1. Primero, actualice su Pi y Python emitiendo los siguientes comandos
sudo apt-get update sudo apt-get upgrade sudo pip3 install --upgrade setuptools
2. Ahora, instale las bibliotecas blink Rpi.gpio y Adafruit usando los siguientes comandos
sudo pip3 instalar RPI.GPIO sudo pip3 instalar adafruit-blinka
3. Instale la biblioteca Adafruit IO usando el siguiente comando
sudo pip3 instalar adafruit-io
4. Clone los ejemplos de adafruit de github usando el siguiente comando
clon de git https://github.com/adafruit/Adafruit_IO_Python.git
5. Luego, navegue a la carpeta de ejemplos ingresando el siguiente comando en la terminal:
cd Adafruit_IO_Python / examples / basics
Si no está seguro de en qué directorio se encuentra, puede comprobarlo ejecutando pwd.
6. Para todos los ejemplos de esta carpeta, deberá configurar ADAFRUIT_IO_KEY y ADAFRUIT_IO_USERNAME, que se pueden encontrar en el panel de Adafruit. Como se muestra abajo
Mueva el botón en el tablero de Adafruit IO, y debería ver lo siguiente en la terminal de su Pi.
7. Ahora, abra el archivo subscribe.py usando nano editor. Escriba el siguiente comando para abrirlo
sudo nano subscribe.py
Tenemos que modificar este programa para controlar cualquier GPIO desde el tablero.
Explicación de codificación para controlar Raspberry Pi GPIO con MQTT
Primero, importe todas las bibliotecas necesarias para usar pines GPIO y el cliente Adafruit MQTT.
importar RPi.GPIO como GPIO importar sys desde Adafruit_IO importar MQTTClient
Ahora, configure el modo GPIO y defina el número de pin LED y configúrelo como salida.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (Falso) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
A continuación, tenemos que configurar la clave AIO y el nombre de usuario que hemos encontrado al crear el tablero.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
Ingrese el nombre de la fuente que le ha dado para encender y apagar la luz. Aquí, es "ligero".
FEED_ID = 'ligero'
Ahora, defina una función a la que se llamará cuando ocurra un evento. Por lo tanto, suscribiremos el Feed utilizando client.subscribe (FEED_ID)
def connected (cliente): client.subscribe (FEED_ID) print ('Esperando datos de alimentación…')
Después de suscribir el feed, tenemos que verificar el nuevo valor y almacenarlo en una variable de carga útil . Para este mensaje se llama a la función. Entonces, siempre que haya “1” en la variable de carga útil, haga que el pin del led sea ALTO y para “0”, que sea BAJO.
def message (cliente, feed_id, payload): print ('Feed {0} recibió nuevo valor: {1}'. formato (feed_id, payload)) if payload == 1: GPIO.output (ledPin, GPIO.HIGH) else: Salida GPIO (ledPin, GPIO.LOW)
Ahora, cree un cliente MQTT para conectarse con la plataforma Adafruit IO y envíe los mensajes de un lado a otro.
cliente = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = cliente conectado.on_disconnect = desconectado
Además, tenga cuidado con la sangría adecuada en el código, de lo contrario, mostrará un error. El código completo de Python se proporciona al final del tutorial.
Finalmente, guarde el programa usando ctrl + x y presione enter. Ahora, tenemos que ejecutar el script para suscribir los mensajes. Entonces, en la terminal, escriba python subscribe.py y presione enter.
python subscribe.py
Verá un mensaje Esperando datos de feeds … como se muestra a continuación.
Ahora, asegúrese de que el módulo de relé esté conectado con el pin GPIO de Raspberry Pi y luego vaya al tablero de Adafruit IO y cambie la alimentación de luz. La bombilla debe encenderse cuando se recibe "1" y apagarse cuando se recibe "0" como se muestra a continuación.
De esta forma podemos controlar cualquier dispositivo desde cualquier lugar del mundo utilizando Raspberry Pi y MQTT en la nube.