使用的操作系统和版本: Ubuntu 18.04
使用的SDK版本:2018年12月13日发布
目标: ESP32。
问题描述:
我正在尝试将ESP32连接到我的Blob存储。我收到HTTP错误401(未经授权的访问)。 我正在使用示例:iothub_client_sample_upload_to_blob_mb。 我尝试仅在连接字符串中使用“共享访问密钥”进行连接,但这没有用(无连接)。之后,我在Azure中生成了一个SAS令牌(存储帐户->->共享访问签名),并将其插入到我的连接字符串中。 我的连接字符串如下所示:
static const char* connectionString = "HostName=<Host name>;DeviceId=<Device ID>;SharedAccessSignature=<inserted here without the "?" at the beginning>";
Q1:为什么会有“?”在令牌前面?当我查看连接字符串时,在SharedAccessSignature = ..上我看不到“?”。
我还在IoT中心的> Azure中设置了端点->上传文件。 在示例中,我正在使用选项SET_TRUSTED_CERT_IN_SAMPLES。
Q2:这是什么意思?我对基本加密不太熟悉,应该仔细阅读一下。
Q3:为什么会出现401错误?有什么可能的解决方案?
日志:
初始化SNTP ESP平台sntp已启动! 时间尚未设置。连接到WiFi并通过NTP获得时间。 timeinfo.tm_year:70 等待系统时间设置... tm_year:0 [times:1] 开始将IoTHub客户端示例样本上传到具有多个块的blob ...
信息:等待TLS连接 信息:等待TLS连接 信息:等待TLS连接 信息:等待TLS连接
错误:时间:2019年1月17日星期四22:06:00文件:/ home / julian / eclipse-workspace / chaze-esp32 / components / esp-azure / azure-iot-sdk-c / iothub_client / src / iothub_client_ll_uploadtoblob .c Func:send_http_request行:142 HTTP代码为401
错误:时间:2019年1月17日星期四22:06:00文件:/ home / julian / eclipse-workspace / chaze-esp32 / components / esp-azure / azure-iot-sdk-c / iothub_client / src / iothub_client_ll_uploadtoblob .c Func:IoTHubClient_LL_UploadToBlob_step1and2行:494无法HTTPAPIEX_ExecuteRequest
错误:时间:2019年1月17日星期四22:06:00文件:/ home / julian / eclipse-workspace / chaze-esp32 / components / esp-azure / azure-iot-sdk-c / iothub_client / src / iothub_client_ll_uploadtoblob .c Func:IoTHubClient_LL_UploadMultipleBlocksToBlob_Impl行:IoTHubClient_LL_UploadToBlob_step1中出现768错误 收到意外结果FILE_UPLOAD_ERROR
hello world上传失败 按任意键继续
Here是指向GitHub Repo的链接。
可以在here中找到示例。
答案 0 :(得分:1)
我在Azure(存储帐户->->共享访问签名)中生成了一个SAS令牌,并将其插入到我的连接字符串中。我的连接字符串如下所示:
static const char* connectionString = "HostName=<Host name>;DeviceId=<DeviceID>;SharedAccessSignature=<inserted here without the "?" at the beginning>";
Q1:为什么会有“?”在令牌前面?当我查看连接字符串时,在SharedAccessSignature = ..上我看不到“?”。
在IoTHub上注册设备后,您将需要检索该设备的连接字符串以用于本示例。有关如何在IoTHub上的设备上注册和检索连接字符串的示例,请参见here。
我还在IoT中心的> Azure中设置了端点->上传文件。在示例中,我正在使用选项SET_TRUSTED_CERT_IN_SAMPLES。
Q2:这是什么意思?我对基本加密不太熟悉,应该仔细阅读一下。
在为您的设备编译SDK时使用该标志。参见the CMake File:
#Conditionally use the SDK trusted certs in the samples
if(${use_sample_trusted_cert})
add_definitions(-DSET_TRUSTED_CERT_IN_SAMPLES)
include_directories(${PROJECT_SOURCE_DIR}/certs)
set(iothub_client_sample_upload_to_blob_mb_c_files ${iothub_client_sample_upload_to_blob_mb_c_files} ${PROJECT_SOURCE_DIR}/certs/certs.c)
endif()
Q3:为什么会出现401错误?有什么可能的解决方案?
确保在Azure IoTHub上正确配置文件上传-https://docs.microsoft.com/en-us/azure/iot-hub/iot-hub-devguide-file-upload,并在示例上使用正确的连接字符串。还利用the ESP8266 sample,该步骤应与ESP32配置类似。
答案 1 :(得分:0)
要摆脱401错误:在代码中使用MSFT巴尔的摩证书。 要摆脱对ESP的恐慌:请查看此GitHub issue。