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-sensoren 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-deviceazure-iot-devicees 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, MethodResponseEste 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_clienty la funciónhandle_command. Conserva el buclewhile True:, pero elimina la líneamqtt_client.publishde 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
Messagede 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_onpara encender el relé, yrelay_offpara 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_requestpara 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_requestEste código indica al cliente del IoT Hub que llame a la función
handle_method_requestcuando 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.