6.0 KiB
Conecte o seu dispositivo IoT à nuvem - Hardware IoT Virtual e Raspberry Pi
Nesta parte da lição, irá conectar o seu dispositivo IoT virtual ou Raspberry Pi ao IoT Hub, para enviar telemetria e receber comandos.
Conectar o seu dispositivo ao IoT Hub
O próximo passo é conectar o seu dispositivo ao IoT Hub.
Tarefa - conectar ao IoT Hub
-
Abra a pasta
soil-moisture-sensor
no VS Code. Certifique-se de que o ambiente virtual está a funcionar no terminal, caso esteja a usar um dispositivo IoT virtual. -
Instale alguns pacotes adicionais do Pip:
pip3 install azure-iot-device
azure-iot-device
é uma biblioteca para comunicar com o seu IoT Hub. -
Adicione as seguintes importações ao topo do ficheiro
app.py
, abaixo das importações existentes:from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
Este código importa o SDK para comunicar com o seu IoT Hub.
-
Remova a linha
import paho.mqtt.client as mqtt
, pois esta biblioteca já não é necessária. Remova todo o código MQTT, incluindo os nomes dos tópicos, todo o código que utilizamqtt_client
e ohandle_command
. Mantenha o ciclowhile True:
, apenas elimine a linhamqtt_client.publish
deste ciclo. -
Adicione o seguinte código abaixo das declarações de importação:
connection_string = "<connection string>"
Substitua
<connection string>
pela cadeia de conexão que obteve para o dispositivo anteriormente nesta lição.💁 Isto não é uma boa prática. As cadeias de conexão nunca devem ser armazenadas no código fonte, pois podem ser incluídas no controlo de versão e encontradas por qualquer pessoa. Estamos a fazer isto aqui por simplicidade. Idealmente, deveria usar algo como uma variável de ambiente e uma ferramenta como
python-dotenv
. Aprenderá mais sobre isto numa lição futura. -
Abaixo deste código, adicione o seguinte para criar um objeto cliente do dispositivo que pode comunicar com o IoT Hub e conectá-lo:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected')
-
Execute este código. Verá o seu dispositivo conectar-se.
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
Enviar telemetria
Agora que o seu dispositivo está conectado, pode enviar telemetria para o IoT Hub em vez do broker MQTT.
Tarefa - enviar telemetria
-
Adicione o seguinte código dentro do ciclo
while True
, logo antes do comando de pausa:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)
Este código cria uma
Message
do IoT Hub contendo a leitura da humidade do solo como uma string JSON e envia-a para o IoT Hub como uma mensagem de dispositivo para nuvem.
Lidar com comandos
O seu dispositivo precisa de lidar com um comando do código do servidor para controlar o relé. Este é enviado como um pedido de método direto.
Tarefa - lidar com um pedido de método direto
-
Adicione o seguinte código antes do ciclo
while True
:def handle_method_request(request): print("Direct method received - ", request.name) if request.name == "relay_on": relay.on() elif request.name == "relay_off": relay.off()
Isto define um método,
handle_method_request
, que será chamado quando um método direto for invocado pelo IoT Hub. Cada método direto tem um nome, e este código espera um método chamadorelay_on
para ligar o relé erelay_off
para desligar o relé.💁 Isto também poderia ser implementado num único pedido de método direto, passando o estado desejado do relé num payload que pode ser enviado com o pedido de método e disponível a partir do objeto
request
. -
Os métodos diretos requerem uma resposta para informar o código que os invocou de que foram tratados. Adicione o seguinte código no final da função
handle_method_request
para criar uma resposta ao pedido:method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)
Este código envia uma resposta ao pedido de método direto com um código de estado HTTP 200 e envia-a de volta para o IoT Hub.
-
Adicione o seguinte código abaixo da definição desta função:
device_client.on_method_request_received = handle_method_request
Este código informa o cliente do IoT Hub para chamar a função
handle_method_request
quando um método direto for invocado.
💁 Pode encontrar este código na pasta code/pi ou code/virtual-device.
😀 O programa do seu sensor de humidade do solo está conectado ao seu IoT Hub!
Aviso Legal:
Este documento foi traduzido utilizando o serviço de tradução por IA Co-op Translator. Embora nos esforcemos para garantir a precisão, é importante notar que traduções automáticas podem conter erros ou imprecisões. O documento original na sua língua nativa deve ser considerado a fonte autoritária. Para informações críticas, recomenda-se a tradução profissional realizada por humanos. Não nos responsabilizamos por quaisquer mal-entendidos ou interpretações incorretas decorrentes da utilização desta tradução.