【发布时间】:2020-07-27 17:45:01
【问题描述】:
我正在使用闪存空间非常有限的 32 位微控制器(用 C 编写的程序代码)与蜂窝模块通信。我有一个带有 IoT 中心的 Azure 帐户设置,我想将一些设备到云的消息发送到我的 IoT 中心。我已经测试并确认了与其他服务器的 HTTP 和 HTTPS 通信。但是,我找不到任何地方指定发送设备到云消息所需的 HTTP 标头是什么。谁能提供所需 HTTP 消息格式的描述(HTTP 起始行、所需的 HTTP 标头和 HTTP 标头值)?
我找到了适用于 C 的 Azure SDK,但即使打开了所有优化选项,它也为我的微控制器占用了太多的代码空间。我已经尝试按照 SDK 中的代码来了解如何构建 HTTP 消息,但我似乎遗漏了一些内容。我只有两三个要发送的设备到云消息,所以我假设如果我知道标头是什么,就不需要太多代码来生成设备到云消息。
我拥有的蜂窝模块正在处理用于相互 TLS 身份验证的 X.509 证书。假设这是有效的。对于这个问题,我只关心为 Azure IoT 设备到云消息找到所需的 HTTP 消息格式。
编辑: 根据评论的建议,我最终被带到了这个页面: https://docs.microsoft.com/en-us/rest/api/iothub/device/senddeviceevent
使用建议的 HTTP POST(替换了我的设备细节),我现在收到 401 错误 (IotHubUnauthorizedAccess)。我以为我理解了身份验证应该如何工作,但我想我错了。
我的 IoT 设备有一个对称密钥。我以为我应该包含一个格式为:
Authorization:SharedAccessKey=<my_primary_key>
但这不起作用。我的 HTTP 正文很简单:
{"deviceID":<my_IoT_Device_ID>}
我应该在哪里包含对称密钥信息,它的格式是什么?
【问题讨论】:
-
我们非常乐意帮助您在设备上启用 SDK。您能否通过详细说明您的设备的具体规格和您的要求(仅 D2C?)来帮助我们?如果您可以提交问题here,那就太好了。我们正在收集有关 SDK 占用空间的反馈,并希望针对受限设备进一步优化它。
-
本文档提供了有关如何在不使用 Azure IoT 设备 SDK 的情况下直接将 MQTT 协议与 IoTHub 一起使用的指南:docs.microsoft.com/en-us/azure/iot-hub/… 如果您发现任何缺失或需要改进的地方,请在文档中记录问题页面。
-
您需要生成 SAS 令牌(基于您的设备密钥),但它不是设备密钥本身。请参阅github.com/Microsoft/vscode-azure-iot-toolkit/wiki/… 和这里的方法:github.com/kvaes/…
-
身份验证是否需要 SAS 令牌?我按照上面链接中的步骤操作,使用 Postman,我能够使用 Azure CLI 在 Azure 门户上生成的 SAS 令牌成功发送 D2C 消息。我认为我的微控制器无法计算 SAS 令牌。
标签: c azure http azure-iot-hub