You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ru/2-farm/lessons/4-migrate-your-plant-to-the.../single-board-computer-conne...

8.8 KiB

Подключите ваше IoT-устройство к облаку - Виртуальное IoT-устройство и Raspberry Pi

В этой части урока вы подключите свое виртуальное IoT-устройство или Raspberry Pi к вашему IoT Hub, чтобы отправлять телеметрию и получать команды.

Подключите устройство к IoT Hub

Следующий шаг — подключить ваше устройство к IoT Hub.

Задание - подключение к IoT Hub

  1. Откройте папку soil-moisture-sensor в VS Code. Убедитесь, что виртуальная среда запущена в терминале, если вы используете виртуальное IoT-устройство.

  2. Установите дополнительные пакеты Pip:

    pip3 install azure-iot-device
    

    Библиотека azure-iot-device используется для взаимодействия с вашим IoT Hub.

  3. Добавьте следующие импорты в начало файла app.py, ниже уже существующих импортов:

    from azure.iot.device import IoTHubDeviceClient, Message, MethodResponse
    

    Этот код импортирует SDK для взаимодействия с вашим IoT Hub.

  4. Удалите строку import paho.mqtt.client as mqtt, так как эта библиотека больше не нужна. Удалите весь код, связанный с MQTT, включая имена топиков, весь код, использующий mqtt_client, и handle_command. Сохраните цикл while True:, просто удалите строку mqtt_client.publish из этого цикла.

  5. Добавьте следующий код ниже импортов:

    connection_string = "<connection string>"
    

    Замените <connection string> на строку подключения, которую вы получили для устройства ранее в этом уроке.

    💁 Это не является лучшей практикой. Строки подключения никогда не должны храниться в исходном коде, так как они могут быть добавлены в систему контроля версий и найдены кем угодно. Мы делаем это здесь для упрощения. В идеале, вы должны использовать что-то вроде переменных окружения и инструмента, такого как python-dotenv. Вы узнаете больше об этом в одном из следующих уроков.

  6. Ниже этого кода добавьте следующее, чтобы создать объект клиента устройства, который сможет взаимодействовать с IoT Hub, и подключите его:

    device_client = IoTHubDeviceClient.create_from_connection_string(connection_string)
    
    print('Connecting')
    device_client.connect()
    print('Connected')
    
  7. Запустите этот код. Вы увидите, как ваше устройство подключится.

    pi@raspberrypi:~/soil-moisture-sensor $ python3 app.py 
    Connecting
    Connected
    Soil moisture: 379
    

Отправка телеметрии

Теперь, когда ваше устройство подключено, вы можете отправлять телеметрию в IoT Hub вместо MQTT-брокера.

Задание - отправка телеметрии

  1. Добавьте следующий код внутри цикла while True, прямо перед строкой с sleep:

    message = Message(json.dumps({ 'soil_moisture': soil_moisture }))
    device_client.send_message(message)
    

    Этот код создает объект Message для IoT Hub, содержащий данные о влажности почвы в виде строки JSON, а затем отправляет это сообщение в IoT Hub как сообщение от устройства в облако.

Обработка команд

Ваше устройство должно обрабатывать команды от серверного кода для управления реле. Эти команды отправляются в виде запросов на выполнение прямых методов.

Задание - обработка запроса на выполнение прямого метода

  1. Добавьте следующий код перед циклом 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.

  2. Прямые методы требуют ответа, чтобы уведомить вызывающий код о том, что запрос был обработан. Добавьте следующий код в конец функции handle_method_request, чтобы создать ответ на запрос:

    method_response = MethodResponse.create_from_method_request(request, 200)
    device_client.send_method_response(method_response)
    

    Этот код отправляет ответ на запрос прямого метода с HTTP-статусом 200 и возвращает его в IoT Hub.

  3. Добавьте следующий код ниже определения этой функции:

    device_client.on_method_request_received = handle_method_request
    

    Этот код указывает клиенту IoT Hub вызывать функцию handle_method_request, когда поступает запрос на выполнение прямого метода.

💁 Вы можете найти этот код в папке code/pi или code/virtual-device.

😀 Программа вашего датчика влажности почвы подключена к вашему IoT Hub!


Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Хотя мы стремимся к точности, пожалуйста, учитывайте, что автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его родном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.