Просмотр данных MPU6050 в Azure IoT Edge

Цель:

Просмотр данных MPU6050 в Azure IoT Edge

Я хочу развернуть модуль на своем устройстве IoT Edge. Итак, чтобы развернуть датчик MPU6050 в качестве модуля, у меня возникают следующие сомнения. Было бы очень полезно, если бы кто-нибудь поделился со мной своим мнением по этому поводу, поскольку я новичок в Azure.

Текущая должность:

Экземпляр Edge был создан на портале Azure, и осталась только часть «установить модули». Я настроил свой Raspberry Pi для работы в качестве пограничного устройства и могу просматривать списки, представленные в Azure Edge. На портале Azure создан новый реестр. Осталось только поместить мой файл образа для чтения MPU6050 в реестр.

Сомнения:

  1. Я загрузил SDK для python, чтобы настроить его для чтения данных MPU6050. Но я не могу понять всю функцию, как она работает. Если есть какое-либо руководство по созданию нашего собственного кода для чтения любых данных датчиков и сборки, оно будет очень полезным. (Я не могу найти ничего в Интернете)
  2. Я знаю, как запустить файл python в докере. Но как можно развернуть весь этот SDK в реестре Azure, чтобы я мог просто указать одну ссылку на развертывание модуля на пограничном устройстве?
  3. Я сомневаюсь, что иду по правильному пути в отношении всего процесса. Поправьте меня, если я ошибаюсь:

iot-hub-sdk настроен для чтения данных MPU6050 -> он построен и запускается в докере -> локальный докер помещается в реестр Azure, который я уже создал -> эта ссылка реестра копируется и вставлено в развертывание пограничного устройства -> Этот экземпляр Edge связан с моим физическим устройством Edge -> Поэтому, когда функция Edge запущена, я могу видеть все данные датчика на локально подключенном Edge-устройстве, которое не имеет подключения к Интернету

Любая помощь или предложение по любому из моих вопросов, упомянутых выше, были бы очень признательны.

Спасибо и ура!


person Swetha Murugesan    schedule 04.02.2019    source источник


Ответы (1)


Существует руководство по созданию модулей на основе Python для IoT Edge: https://docs.microsoft.com/en-us/azure/iot-edge/tutorial-python-module

Как предлагается в руководстве, я рекомендую использовать Visual Studio Code с расширением IoT Edge. Затем вы получаете шаблон модуля Python, файл Dockerfile и т. Д. Вы можете прямо из VS Code вставить свой пользовательский модуль в свой частный реестр контейнеров, например Реестр контейнеров Azure, а также укажите манифест развертывания (какие модули запускать на каком пограничном устройстве).

Как и просили в комментариях, я создаю быстрый полный образец (хотя и не тестировал). Образец основан только на образце шаблона при создании нового модуля Python с использованием расширения VS code IoT Edge.

import random
import time
import sys
import iothub_client
# pylint: disable=E0611
from iothub_client import IoTHubModuleClient, IoTHubClientError, IoTHubTransportProvider
from iothub_client import IoTHubMessage, IoTHubMessageDispositionResult, IoTHubError

# messageTimeout - the maximum time in milliseconds until a message times out.
# The timeout period starts at IoTHubModuleClient.send_event_async.
# By default, messages do not expire.
MESSAGE_TIMEOUT = 10000

# global counters
RECEIVE_CALLBACKS = 0
SEND_CALLBACKS = 0

# Choose HTTP, AMQP or MQTT as transport protocol.  Currently only MQTT is supported.
PROTOCOL = IoTHubTransportProvider.MQTT

# Callback received when the message that we're forwarding is processed.
def send_confirmation_callback(message, result, user_context):
    global SEND_CALLBACKS
    print ( "Confirmation[%d] received for message with result = %s" % (user_context, result) )
    map_properties = message.properties()
    key_value_pair = map_properties.get_internals()
    print ( "    Properties: %s" % key_value_pair )
    SEND_CALLBACKS += 1
    print ( "    Total calls confirmed: %d" % SEND_CALLBACKS )


class HubManager(object):

    def __init__(
            self,
            protocol=IoTHubTransportProvider.MQTT):
        self.client_protocol = protocol
        self.client = IoTHubModuleClient()
        self.client.create_from_environment(protocol)

        # set the time until a message times out
        self.client.set_option("messageTimeout", MESSAGE_TIMEOUT)

    # Forwards the message received onto the next stage in the process.
    def forward_event_to_output(self, outputQueueName, event, send_context):
        self.client.send_event_async(
            outputQueueName, event, send_confirmation_callback, send_context)

def main(protocol):
    try:
        print ( "\nPython %s\n" % sys.version )
        print ( "IoT Hub Client for Python" )

        hub_manager = HubManager(protocol)

        print ( "Starting the IoT Hub Python sample using protocol %s..." % hub_manager.client_protocol )
        print ( "The sample is now waiting for messages and will indefinitely.  Press Ctrl-C to exit. ")

        while True:
            # Build the message with simulated telemetry values.
            # Put your real sensor reading logic here instead
            temperature = TEMPERATURE + (random.random() * 15)
            humidity = HUMIDITY + (random.random() * 20)
            msg_txt_formatted = MSG_TXT % (temperature, humidity)
            message = IoTHubMessage(msg_txt_formatted)
            hubManager.forward_event_to_output("output1", message, 0)
            time.sleep(10)

    except IoTHubError as iothub_error:
        print ( "Unexpected error %s from IoTHub" % iothub_error )
        return
    except KeyboardInterrupt:
        print ( "IoTHubModuleClient sample stopped" )

if __name__ == '__main__':
    main(PROTOCOL)
person silent    schedule 04.02.2019
comment
Спасибо за ответ .. Я уже пробовал использовать VS Code раньше. Следует ли в коде main.py написать весь код для чтения данных датчика MPU6050 в рамках основной функции? И должен ли код просто читать данные и сохранять их под некоторыми переменными, или есть какой-либо другой метод, который нужно сделать (скажем, сохранить его в реестре, а не просто назначив его какой-либо переменной)? - person Swetha Murugesan; 05.02.2019
comment
Я добавил полный пример кода модуля. Надеюсь, это поможет вам начать работу. Конечно, вам не нужно помещать все в один файл. Вы можете разделить его, как вам удобнее. - person silent; 07.02.2019
comment
это решает вашу проблему? Если да, примите ответ или предоставьте дополнительную информацию. - person silent; 15.02.2019
comment
Я прошу прощения за задержку. В последнее время у меня не было возможности поработать над этим. Но код, который вы загрузили, был почти таким же, как я делал ранее в VS Code и отправил в Azure. Но он показал некоторую ошибку импорта библиотеки, даже если я установил то же самое в VS Code. Я не знаю, что мне не хватает. - person Swetha Murugesan; 26.02.2019
comment
social.msdn.microsoft.com/Forums/en-US/ Найдите мой код здесь. Приносим извинения за неудобства, так как я не могу загрузить здесь фрагмент кода - person Swetha Murugesan; 26.02.2019
comment
Что ж, это поможет, если вы разместите фактическое сообщение об ошибке, которое вы получаете. Кроме того, вы можете опубликовать свой файл dependencies.txt? - person silent; 26.02.2019