- Componentes necessários
- Diagrama de circuito
- Instalando Bibliotecas MQTT Cloud no Raspberry Pi
- Explicação de codificação para controlar Raspberry Pi GPIO com MQTT
No tutorial anterior, discutimos sobre o protocolo MQTT e o servidor MQTT local instalado em nosso Raspberry Pi para controlar o GPIO localmente. Mas a desvantagem do servidor MQTT local é que não podemos controlar os GPIOs de qualquer lugar do mundo, ele apenas fornece serviços localmente. Mas se este servidor MQTT estiver hospedado em alguma nuvem, qualquer dispositivo conectado ao Raspberry Pi pode ser controlado globalmente.
Aqui, neste tutorial, usaremos o Adafruit IO como corretor MQTT para controlar um dispositivo AC conectado ao Raspberry Pi GPIO. Verifique também outros tutoriais de automação residencial controlada por IoT:
- Automação residencial controlada por voz baseada em IOT usando ESP8266 e aplicativo Android
- Automação residencial controlada por telefone inteligente usando Arduino
- Automação residencial controlada pela Web baseada em IoT usando microcontrolador PIC e Adafruit IO
- Automação residencial controlada pela Web baseada em IoT usando Raspberry Pi
- Automação residencial controlada por voz baseada no Google Assistant usando DIY Arduino Wi-Fi Shield
Componentes necessários
- Raspberry Pi com Raspbian Stretch instalado nele.
- Módulo de Relé
- Lâmpada
- Jumper Wires
Aqui, usaremos SSH para acessar Raspberry Pi no laptop. Você pode usar a conexão VNC ou Remote Desktop no laptop ou pode conectar o Raspberry pi a um monitor. Saiba mais sobre como configurar o Raspberry Pi sem cabeça aqui, sem monitor.
Diagrama de circuito
O diagrama do circuito para este eletrodoméstico controlado por IoT com nuvem MQTT e Raspberry Pi é simples, basta conectar uma lâmpada com módulo de relé no pino 35 GPIO do Raspberry Pi.
Instalando Bibliotecas MQTT Cloud no Raspberry Pi
Aqui, a plataforma Adafruit IO é usada com Raspberry Pi como corretor MQTT. Como usamos a plataforma Adafruit IO muitas vezes em nossos tutoriais anteriores, podemos usá-la no Raspberry Pi.
Basta fazer uma conta na plataforma Adafruit IO e fazer um feed, se você não sabe como fazer feed e personalizar o painel do Adafruit siga o link.
Depois de criar o painel, instale algumas bibliotecas no Raspberry Pi para começar a usar o MQTT.
1. Primeiro, atualize Your Pi e Python emitindo os seguintes comandos
sudo apt-get update sudo apt-get upgrade sudo pip3 install --upgrade setuptools
2. Agora, instale as bibliotecas Rpi.gpio e Adafruit blink usando os comandos abaixo
sudo pip3 install RPI.GPIO sudo pip3 install adafruit-blinka
3. Instale a biblioteca Adafruit IO usando o comando abaixo
sudo pip3 install adafruit-io
4. Clone os exemplos adafruit do github usando o comando abaixo
git clone https://github.com/adafruit/Adafruit_IO_Python.git
5. Em seguida, navegue até a pasta de exemplos digitando o seguinte comando no terminal:
cd Adafruit_IO_Python / examples / basics
Se você não tiver certeza de qual diretório está, pode verificar executando pwd.
6. Para todos os exemplos nesta pasta, você precisará definir ADAFRUIT_IO_KEY e ADAFRUIT_IO_USERNAME, que podem ser encontrados no painel Adafruit. Como mostrado abaixo
Alterne o botão no painel do Adafruit IO e você verá o seguinte no terminal do seu Pi.
7. Agora, abra o arquivo subscribe.py usando o editor nano . Digite o seguinte comando para abri-lo
sudo nano subscribe.py
Temos que modificar este programa para controlar qualquer GPIO do painel.
Explicação de codificação para controlar Raspberry Pi GPIO com MQTT
Primeiro, importe todas as bibliotecas necessárias para usar os pinos GPIO e o cliente Adafruit MQTT.
import RPi.GPIO as GPIO import sys from Adafruit_IO import MQTTClient
Agora, defina o modo GPIO e defina o número do pino do LED e defina como saída.
GPIO.setmode (GPIO.BOARD) GPIO.setwarnings (False) ledPin = 12 GPIO.setup (ledPin, GPIO.OUT)
Em seguida, temos que definir a chave AIO e o nome de usuário que encontramos ao criar o painel.
ADAFRUIT_IO_KEY = 'YOUR_AIO_KEY' ADAFRUIT_IO_USERNAME = 'YOUR_AIO_USERNAME'
Digite o nome do feed que você forneceu para ligar e desligar a luz. Aqui, é “leve”.
FEED_ID = 'luz'
Agora, defina uma função que será chamada quando ocorrer um evento. Então, vamos assinar o Feed usando client.subscribe (FEED_ID)
def conectado (cliente): client.subscribe (FEED_ID) print ('Aguardando dados de feed…')
Depois de assinar o feed, temos que verificar o novo valor e armazená-lo em uma variável de carga útil . Para esta mensagem, a função é chamada. Portanto, sempre que houver “1” na variável de carga útil, torne o pino do led ALTO e para “0” torne-o BAIXO.
def message (client, feed_id, payload): print ('Feed {0} recebeu novo valor: {1}'. format (feed_id, payload)) if payload == 1: GPIO.output (ledPin, GPIO.HIGH) else: GPIO.output (ledPin, GPIO.LOW)
Agora, crie um cliente MQTT para se conectar com a plataforma Adafruit IO e enviar as mensagens para lá e para cá.
client = MQTTClient (ADAFRUIT_IO_USERNAME, ADAFRUIT_IO_KEY) client.on_connect = cliente conectado.on_disconnect = desconectado
Além disso, tome cuidado com a indentação adequada no código, caso contrário, ele mostrará um erro. O código Python completo é fornecido no final do tutorial.
Por fim, salve o programa usando ctrl + x e pressione Enter. Agora, temos que executar o script para assinar as mensagens. Portanto, no terminal, digite python subscribe.py e pressione Enter.
python subscribe.py
Você verá uma mensagem Waiting For Feed Data … conforme mostrado abaixo.
Agora, certifique-se de que o módulo de relé está conectado com o pino GPIO do Raspberry Pi e, em seguida, vá para o painel do Adafruit IO e altere a alimentação de luz. A lâmpada deve acender quando “1” for recebido e desligada quando “0” for recebido, conforme mostrado abaixo.
Desta forma, podemos controlar qualquer aparelho de qualquer lugar do mundo usando Raspberry Pi e nuvem MQTT