繁体   English   中英

Azure IoT 中心:没有 SDK 的 HTTP 设备到云消息?

[英]Azure IoT Hub: HTTP Device-to-Cloud Messages without SDK?

我正在使用 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>}

我应该在哪里包含对称密钥信息,它的格式是什么?

经过一些试验和错误,我们发现它比我们想象的要容易得多。 如果您使用 X.509 证书进行客户端身份验证,则无需在 HTTP 消息内容中包含任何内容来指定您的身份验证。 使用 X.509 证书进行身份验证的 Azure 设备到云消息的最低要求是:

POST /devices/<id>/messages/events?api-version=2018-06-30 HTTP/1.1
Host:<fully-qualified-iothubname>.azure-devices.net
Content-Length:<number-of-bytes-in-the-JSON-body>

{"deviceID":"<id>",<your-JSON-formatted-custom-d2c-message-data>}

其中<id>是 Azure IoT 中心上列出的设备 ID, <fully-qualified-iothubname>是 IoT 中心名称。 如果您想这样做而不是使用Content-Length标头,我相信 Azure 支持分块编码。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM