Raspberry Pi: Controle GPIO com MQTT: mudanças entre as edições

De Wiki Cursos IFPR Foz
Ir para navegaçãoIr para pesquisar
Linha 97: Linha 97:
==Controle GPIO com Python e utilização do protocolo MQTT==
==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''' <ref name=steves-gpio/>http://www.steves-internet-guide.com/mqtt-raspberry-pi-gpio/</ref>.
Para controlar as portas '''GPIO''' do '''Raspberry Pi''' através do protocolo '''MQTT''' também é necessário utilizar a biblioteca '''Paho MQTT Python Client''' <ref name=steves-gpio/>http://www.steves-internet-guide.com/mqtt-raspberry-pi-gpio/</ref>.


==Referências==
==Referências==

Edição das 12h53min 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

Clientes MQTT Python

Para utilizar clientes MQTT com Python é necessário utilizar a biblioteca Paho MQTT Python Client [2].

Instalação do Cliente Paho MQTT
sudo pip install paho-mqtt

A principal entidade da biblioteca é 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

Controle GPIO com Python e utilização do protocolo MQTT

Para controlar as portas GPIO do Raspberry Pi através do protocolo MQTT também é necessário utilizar a biblioteca Paho MQTT Python Client [3]http://www.steves-internet-guide.com/mqtt-raspberry-pi-gpio/</ref>.

Referências

  1. https://mosquitto.org/documentation/authentication-methods/
  2. 2,0 2,1 2,2 http://www.steves-internet-guide.com/into-mqtt-python-client/
  3. Erro de citação: Marca <ref> inválida; não foi fornecido texto para as refs chamadas steves-gpio

Evandro.cantu (discussão) 17h51min de 17 de fevereiro de 2022 (-03)