Azure_IoT_Central_ESP32調査 その1

azure-sdk-for-c-arduinoリポジトリに含まれているサンプルコードAzure_IoT_Central_ESP32の調査。

github.com

骨格

setup()
  connect_to_wifi()
    WiFi.mode(WIFI_STA)
    WiFi.begin()
  sync_device_clock_with_ntp_server()
    configTime()
  azure_pnp_init() - Azure_IoT_PnP_Template.cpp
  azure_iot_init() - AzureIoT.cpp
  azure_iot_start() - AzureIoT.cpp
    azure_iot->state = azure_iot_state_started

loop()
  if (WiFi.status() != WL_CONNECTED)
    connect_to_wifi()
    azure_iot_start() - AzureIoT.cpp
  switch (azure_iot_get_status()) - AzureIoT.cpp
    case azure_iot_connected:
      azure_pnp_send_device_info() - Azure_IoT_PnP_Template.cpp
        generate_device_info_payload() - Azure_IoT_PnP_Template.cpp
        azure_iot_send_properties_update() - AzureIoT.cpp
      azure_pnp_send_telemetry() - Azure_IoT_PnP_Template.cpp
    case azure_iot_error:
      azure_iot_stop() - AzureIoT.cpp
      WiFi.disconnect()
  azure_iot_do_work() - AzureIoT.cpp
  • Azure_IoT_Central_ESP32.inoから、PlatformのWi-Fi関連クラスとAzureIoT.cpp、Azure_IoT_PnP_Template.cppをコールしている。
  • AzureIoT.cppは汎用。ステートマシンでAzure IoTとの通信を行っている。設定はazure_iot_init()で、主な処理はazure_iot_do_work()。
  • Azure_IoT_PnP_Template.cppはアプリ依存。
  • Azure IoTとの通信に関する設定は、setup()内のazure_iot_config。盛りだくさん。

azure_iot_config

Azure IoT

  azure_iot_config.user_agent = AZ_SPAN_FROM_STR(AZURE_SDK_CLIENT_USER_AGENT);
  azure_iot_config.model_id = azure_pnp_get_model_id();
  azure_iot_config.use_device_provisioning = true; // Required for Azure IoT Central.
  azure_iot_config.iot_hub_fqdn = AZ_SPAN_EMPTY;
  azure_iot_config.device_id = AZ_SPAN_EMPTY;
  azure_iot_config.device_certificate = AZ_SPAN_EMPTY;
  azure_iot_config.device_certificate_private_key = AZ_SPAN_EMPTY;
  azure_iot_config.device_key = AZ_SPAN_FROM_STR(IOT_CONFIG_DEVICE_KEY);
  azure_iot_config.dps_id_scope = AZ_SPAN_FROM_STR(DPS_ID_SCOPE);
  azure_iot_config.dps_registration_id = AZ_SPAN_FROM_STR(IOT_CONFIG_DEVICE_ID); // Use Device ID for Azure IoT Central.

MQTT

  azure_iot_config.mqtt_client_interface.mqtt_client_init = mqtt_client_init_function;
  azure_iot_config.mqtt_client_interface.mqtt_client_deinit = mqtt_client_deinit_function;
  azure_iot_config.mqtt_client_interface.mqtt_client_subscribe = mqtt_client_subscribe_function;
  azure_iot_config.mqtt_client_interface.mqtt_client_publish = mqtt_client_publish_function;

Encrypt

  azure_iot_config.data_manipulation_functions.hmac_sha256_encrypt = mbedtls_hmac_sha256;
  azure_iot_config.data_manipulation_functions.base64_decode = base64_decode;
  azure_iot_config.data_manipulation_functions.base64_encode = base64_encode;

その他

  azure_iot_config.data_buffer = AZ_SPAN_FROM_BUFFER(az_iot_data_buffer);
  azure_iot_config.sas_token_lifetime_in_minutes = MQTT_PASSWORD_LIFETIME_IN_MINUTES;
  azure_iot_config.on_properties_update_completed = on_properties_update_completed;
  azure_iot_config.on_properties_received = on_properties_received;
  azure_iot_config.on_command_request_received = on_command_request_received;