8.8 KiB
Подключите ваше IoT-устройство к облаку - Виртуальное IoT-устройство и Raspberry Pi
В этой части урока вы подключите свое виртуальное IoT-устройство или Raspberry Pi к вашему IoT Hub, чтобы отправлять телеметрию и получать команды.
Подключите устройство к IoT Hub
Следующий шаг — подключить ваше устройство к IoT Hub.
Задание - подключение к IoT Hub
-
Откройте папку
soil-moisture-sensor
в VS Code. Убедитесь, что виртуальная среда запущена в терминале, если вы используете виртуальное IoT-устройство. -
Установите дополнительные пакеты Pip:
pip3 install azure-iot-device
Библиотека
azure-iot-device
используется для взаимодействия с вашим IoT Hub. -
Добавьте следующие импорты в начало файла
app.py
, ниже уже существующих импортов:from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
Этот код импортирует SDK для взаимодействия с вашим IoT Hub.
-
Удалите строку
import paho.mqtt.client as mqtt
, так как эта библиотека больше не нужна. Удалите весь код, связанный с MQTT, включая имена топиков, весь код, использующийmqtt_client
, иhandle_command
. Сохраните циклwhile True:
, просто удалите строкуmqtt_client.publish
из этого цикла. -
Добавьте следующий код ниже импортов:
connection_string = "<connection string>"
Замените
<connection string>
на строку подключения, которую вы получили для устройства ранее в этом уроке.💁 Это не является лучшей практикой. Строки подключения никогда не должны храниться в исходном коде, так как они могут быть добавлены в систему контроля версий и найдены кем угодно. Мы делаем это здесь для упрощения. В идеале, вы должны использовать что-то вроде переменных окружения и инструмента, такого как
python-dotenv
. Вы узнаете больше об этом в одном из следующих уроков. -
Ниже этого кода добавьте следующее, чтобы создать объект клиента устройства, который сможет взаимодействовать с IoT Hub, и подключите его:
device_client = IoTHubDeviceClient.create_from_connection_string(connection_string) print('Connecting') device_client.connect() print('Connected')
-
Запустите этот код. Вы увидите, как ваше устройство подключится.
pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py Connecting Connected Soil moisture: 379
Отправка телеметрии
Теперь, когда ваше устройство подключено, вы можете отправлять телеметрию в IoT Hub вместо MQTT-брокера.
Задание - отправка телеметрии
-
Добавьте следующий код внутри цикла
while True
, прямо перед строкой сsleep
:message = Message(json.dumps({ 'soil_moisture': soil_moisture })) device_client.send_message(message)
Этот код создает объект
Message
для IoT Hub, содержащий данные о влажности почвы в виде строки JSON, а затем отправляет это сообщение в IoT Hub как сообщение от устройства в облако.
Обработка команд
Ваше устройство должно обрабатывать команды от серверного кода для управления реле. Эти команды отправляются в виде запросов на выполнение прямых методов.
Задание - обработка запроса на выполнение прямого метода
-
Добавьте следующий код перед циклом
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()
Этот код определяет метод
handle_method_request
, который будет вызываться, когда IoT Hub отправляет запрос на выполнение прямого метода. Каждый прямой метод имеет имя, и этот код ожидает методы с именамиrelay_on
для включения реле иrelay_off
для его выключения.💁 Это также можно реализовать в рамках одного запроса на выполнение прямого метода, передавая желаемое состояние реле в полезной нагрузке, которая может быть передана с запросом метода и доступна через объект
request
. -
Прямые методы требуют ответа, чтобы уведомить вызывающий код о том, что запрос был обработан. Добавьте следующий код в конец функции
handle_method_request
, чтобы создать ответ на запрос:method_response = MethodResponse.create_from_method_request(request, 200) device_client.send_method_response(method_response)
Этот код отправляет ответ на запрос прямого метода с HTTP-статусом 200 и возвращает его в IoT Hub.
-
Добавьте следующий код ниже определения этой функции:
device_client.on_method_request_received = handle_method_request
Этот код указывает клиенту IoT Hub вызывать функцию
handle_method_request
, когда поступает запрос на выполнение прямого метода.
💁 Вы можете найти этот код в папке code/pi или code/virtual-device.
😀 Программа вашего датчика влажности почвы подключена к вашему IoT Hub!
Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.