6.1 KiB
Conecta tu dispositivo IoT a la nube - Hardware IoT virtual y Raspberry Pi
En esta parte de la lección, conectarás tu dispositivo IoT virtual o Raspberry Pi a tu IoT Hub para enviar telemetría y recibir comandos.
Conecta tu dispositivo al IoT Hub
El siguiente paso es conectar tu dispositivo al IoT Hub.
Tarea - conectar al IoT Hub
-
Abre la carpeta
soil-moisture-sensor
en VS Code. Asegúrate de que el entorno virtual esté ejecutándose en la terminal si estás utilizando un dispositivo IoT virtual. -
Instala algunos paquetes adicionales de Pip:
pip3 install azure-iot-device
azure-iot-device
es una biblioteca para comunicarse con tu IoT Hub. -
Agrega las siguientes importaciones en la parte superior del archivo
app.py
, debajo de las importaciones existentes:from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
Este código importa el SDK para comunicarse con tu IoT Hub.
-
Elimina la línea
import paho.mqtt.client as mqtt
, ya que esta biblioteca ya no es necesaria. Elimina todo el código relacionado con MQTT, incluidos los nombres de los temas, todo el código que utilizamqtt_client
y la funciónhandle_command
. Conserva el buclewhile True:
, pero elimina la líneamqtt_client.publish
de este bucle. -
Agrega el siguiente código debajo de las declaraciones de importación:
connection_string = "<connection string>"
Sustituye
<connection string>
por la cadena de conexión que recuperaste para el dispositivo anteriormente en esta lección.💁 Esto no es una buena práctica. Las cadenas de conexión nunca deben almacenarse en el código fuente, ya que pueden ser registradas en el control de código fuente y encontradas por cualquiera. Estamos haciendo esto aquí por simplicidad. Idealmente, deberías usar algo como una variable de entorno y una herramienta como
python-dotenv
. Aprenderás más sobre esto en una lección futura. -
Debajo de este código, agrega lo siguiente para crear un objeto cliente del dispositivo que pueda comunicarse con el IoT Hub y conectarlo:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected')
-
Ejecuta este código. Verás que tu dispositivo se conecta.
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
Enviar telemetría
Ahora que tu dispositivo está conectado, puedes enviar telemetría al IoT Hub en lugar del broker MQTT.
Tarea - enviar telemetría
-
Agrega el siguiente código dentro del bucle
while True
, justo antes de la pausa:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)
Este código crea un
Message
de IoT Hub que contiene la lectura de humedad del suelo como una cadena JSON, y luego lo envía al IoT Hub como un mensaje de dispositivo a nube.
Manejar comandos
Tu dispositivo necesita manejar un comando del código del servidor para controlar el relé. Esto se envía como una solicitud de método directo.
Tarea - manejar una solicitud de método directo
-
Agrega el siguiente código antes del bucle
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()
Esto define un método,
handle_method_request
, que será llamado cuando el IoT Hub invoque un método directo. Cada método directo tiene un nombre, y este código espera un método llamadorelay_on
para encender el relé, yrelay_off
para apagarlo.💁 Esto también podría implementarse en una única solicitud de método directo, pasando el estado deseado del relé en un payload que puede ser enviado con la solicitud del método y estar disponible desde el objeto
request
. -
Los métodos directos requieren una respuesta para informar al código que los invocó que han sido manejados. Agrega el siguiente código al final de la función
handle_method_request
para crear una respuesta a la solicitud:method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)
Este código envía una respuesta a la solicitud de método directo con un código de estado HTTP 200, y la envía de vuelta al IoT Hub.
-
Agrega el siguiente código debajo de esta definición de función:
device_client.on_method_request_received = handle_method_request
Este código indica al cliente del IoT Hub que llame a la función
handle_method_request
cuando se invoque un método directo.
💁 Puedes encontrar este código en la carpeta code/pi o code/virtual-device.
😀 ¡Tu programa del sensor de humedad del suelo está conectado a tu IoT Hub!
Descargo de responsabilidad:
Este documento ha sido traducido utilizando el servicio de traducción automática Co-op Translator. Si bien nos esforzamos por garantizar la precisión, tenga en cuenta que las traducciones automatizadas pueden contener errores o imprecisiones. El documento original en su idioma nativo debe considerarse la fuente autorizada. Para información crítica, se recomienda una traducción profesional realizada por humanos. No nos hacemos responsables de malentendidos o interpretaciones erróneas que puedan surgir del uso de esta traducción.