Просмотр данных MPU6050 в Azure IoT Edge - PullRequest
0 голосов
/ 04 февраля 2019

Цель:

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

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

Текущая позиция:

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

Сомнения:

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

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

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

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

1 Ответ

0 голосов
/ 04 февраля 2019

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

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

Как и просили в комментариях, я построил быстрый полный образец (хотя не проверял его).Образец основан только на образце шаблона, когда вы создаете новый модуль Python с использованием VS-расширения кода 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)
...