azure-sdk-for-c-arduinoリポジトリに含まれているサンプルコードAzure_IoT_Central_ESP32の調査。
骨格
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;