Raspberry Pi: Controle GPIO com MQTT: mudanças entre as edições
Linha 69: | Linha 69: | ||
;Subscrição de mensagens: O código exemplo abaixo descreve os procedimentos para '''subscrever''' mensagens em um broker <ref name=steves-into/>: | ;Subscrição de mensagens: O código exemplo abaixo descreve os procedimentos para '''subscrever''' mensagens em um broker <ref name=steves-into/>: | ||
Neste código temos uma função '''callback''', com diversos parâmetros, que é chamada quando o cliente recebe uma mensagem. | :Neste código temos uma função '''callback''', com diversos parâmetros, que é chamada quando o cliente recebe uma mensagem. | ||
<syntaxhighlight lang="python"> | <syntaxhighlight lang="python"> |
Edição das 12h47min de 22 de fevereiro de 2022
Raspberry Pi: Controle GPIO com MQTT
Mosquitto
O Mosquitto é um broker MQTT que implementa o modelo publilsher/subscriber, o qual pode ser instalado diretamente no Raspberry Pi.
Instalação do Mosquitto no Raspberry Pi
sudo apt update sudo apt install mosquitto sudo apt install mosquitto-clients
Depois de instalado o Mosquito é automaticamente iniciado, assim como é iniciado a cada reboot. Para verificar se está rodando, pode utilizar o comando:
ps -aux|grep mosquitto
Parar, iniciar ou reiniciar Mosquitto:
service mosquitto stop service mosquitto start service mosquitto restart
Configuração do Mosquitto para acesso por máquinas remotas
Nas versões do Mosquitto 2.0 e superiores deve-se configurar o modo autenticação para os clientes de conectarem ao broker [1]. Caso contrário, somente terão acesso os clientes rodando na máquina local (localhost). Isso pode ser verificado rodando o Mosquitto para mostrar os log
da operação com o comando:
mosquitto -v
- Exemplo de saída:
pi@raspberrypi:~ $ mosquitto -v 1645204154: mosquitto version 2.0.11 starting 1645204154: Using default config. 1645204154: Starting in local only mode. Connections will only be possible from clients running on this machine. 1645204154: Create a configuration file which defines a listener to allow remote access.
Para habilitar acesso remoto e sem autenticação, deve-se criar um arquivo de configuração contendo as opções:
listener 1883 allow_anonymous true
Este arquivo deve ter a extensão .conf
e deve ser posicionado no diretório:
/etc/mosquitto/conf.d
Depois deve-se iniciar o mosquito utilizando o parâmetro -c
, por exemplo:
mosquitto -v -c /etc/mosquitto/conf.d/conf_local.conf
Controle GPIO com Python e utilização do protocolo MQTT
Para controlar as portas GPIO do Raspberry Pi através do protocolo MQTT é necessário utilizar a biblioteca Paho MQTT Python Client [2].
- Instalação do Cliente Paho MQTT
sudo pip install paho-mqtt
Clientes MQTT Python
A principal entidade da biblioteca cliente é a classe que provê acesso as funções para publicar mensagens e subscrever tópicos em um broker MQTT.
- Publicação de mensagens
- Exemplo de código para publicar mensagens em um broker [2]:
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
import paho.mqtt.client as mqtt
broker="192.168.1.19"
print("creating new instance")
client = mqtt.Client("c1")
print("connecting to broker")
client.connect(broker)
print("Publishing message to topic","teste")
client.publish("teste","m1")
Testar a publicação utilizando um cliente via terminal para subscrever o tópico:
mosquitto_sub -t teste
- Subscrição de mensagens
- O código exemplo abaixo descreve os procedimentos para subscrever mensagens em um broker [2]:
- Neste código temos uma função callback, com diversos parâmetros, que é chamada quando o cliente recebe uma mensagem.
import RPi.GPIO as GPIO
GPIO.setmode(GPIO.BCM)
import paho.mqtt.client as mqtt
broker="192.168.1.19"
print("creating new instance")
client = mqtt.Client("c1")
print("connecting to broker")
client.connect(broker)
print("Subscribing to topic","teste")
client.subscribe("teste")
def on_message(client, userdata, message):
print("message received " ,str(message.payload.decode("utf-8")))
print("message topic=",message.topic)
print("message qos=",message.qos)
print("message retain flag=",message.retain)
client.on_message=on_message
client.loop_start()
Testar a publicação utilizando um cliente via terminal para publicar no tópico:
mosquitto_pub -t teste -m m1
Referências
Evandro.cantu (discussão) 17h51min de 17 de fevereiro de 2022 (-03)