操作系统和版本: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 = ..我没有看到“?”。
我还下设物联网中心端点Azure中 - >上传文件。在这个例子中,我使用的选项SET_TRUSTED_CERT_IN_SAMPLES。
Q2:这是什么意思?我不是那么熟悉了基本的加密和也许应该对阅读起来。
Q3:为什么我会得到一个401错误?这可能是一个可能的解决方案?
日志:
初始化SNTP ESP平台SNTP inited!时间尚未设定。连接到无线网络并获得了时间NTP。 timeinfo.tm_year:70等待系统时间被设置... tm_year:0 [次:1]启动IoTHub客户端上传样品与多个块成团块...
信息:等待TLS连接信息:等待TLS连接信息:等待TLS连接信息:等待TLS连接
错误:时间:星期四1月17日22:06:00 2019文件:/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
错误:时间:星期四1月17日22:06:00 2019文件:/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
错误:时间:星期四1月17日22:06:00 2019文件:/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线:768错误IoTHubClient_LL_UploadToBlob_step1收到意想不到的结果FILE_UPLOAD_ERROR
世界你好上传失败按任意键继续
Here是链接到GitHub的回购。
这个例子可以发现here。
我产生了Azure中SAS令牌(存储帐户 - > - >共享访问签名),并插在了我的连接字符串。我的连接字符串如下所示:
static const char* connectionString = "HostName=<Host name>;DeviceId=<DeviceID>;SharedAccessSignature=<inserted here without the "?" at the beginning>";
Q1:“?”为什么会有在令牌的面前?当我看到在连接字符串,在SharedAccessSignature = ..我没有看到“?”。
在IoTHub注册设备后,您将需要找回它的连接字符串在这个例子中使用。见here如何注册和检索从上IoTHub一个装置的连接串的例子。
我还下设物联网中心端点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配置。
为了摆脱401错误:在代码中使用MSFT巴尔的摩证书。为了摆脱对ESP的恐慌:看看这个GitHub上issue。