1

我已按照此处概述的步骤将我的 ESP8266 Arduino 项目成功连接到 Azure IoT 中心:

https://azure.microsoft.com/en-gb/documentation/articles/iot-hub-mqtt-support/

我正在使用的 MQTT 库是以下库:

https://github.com/Imroy/pubsubclient

使用代码我已经能够将事件发布到 azure。当尝试读取传递给设备的消息时,问题就开始了。

这是代码:

http://pastebin.com/7AVLQfFh

当我起诉 Azure 设备资源管理器向设备发送消息时,我得到以下结果:

捕获结果
如您所见,有效负载长度与消息中的字符数相同,但字符不同。而且,如果我改变发送的字符串,那么结果中的值是相同的。

作为健全性检查,我已经针对不同的 MQTT 服务(Adafruit IO)尝试了代码,结果符合预期(这里的消息是“ON”或“OFF”):

Adafruit IO 映像 Azure MQTT 服务在向设备发送消息时必须做一些不同的事情,我需要知道的是它的不同之处。

4

2 回答 2

2

就在几个小时前,我设法使用原始的 PubSubClient链接将消息从 Azure IoT 中心流向我的 ESP8266 。您正在使用该库的分支,该库已变得更加面向对象并且可能具有更多增强功能。但是如果您不是很喜欢使用较新的版本,我建议您获取原始版本并尝试一下。

如果您需要一些参考,我在 github 上有我的代码:link

一个重要的提示:如果您使用大数据包,PubSubClient.h 需要将#defineMQTT_MAX_PACKET_SIZE 128更改为#defineMQTT_MAX_PACKET_SIZE 256或更多

另外,我没有尝试发送任何消息,所以我不知道这将如何工作。

更新:我还写了一篇关于如何设置的简短博客文章:链接

于 2016-04-03T09:49:29.403 回答
1

根据此文档页面property_bagRFC2396编码的。

RFC 2396-encoded(<PropertyName1>)=RFC 2396-encoded(<PropertyValue1>)&RFC 2396-encoded(<PropertyName2>)=RFC 2396-encoded(<PropertyValue2>)…

但是ABCD你问的纯文本与 URI 编码不一样......嗯,是的。

安装stunnel ( https://www.stunnel.org/index.html ),在 8883/TCP 上打开到 IoT Hub 的 TLS 1.2 连接,然后将 MQTT.fx 或 Paho 指向它并使用 Wireshark 嗅探流量,看看你的得到。

在通过 REST 与 IoT Hub 交谈时,我能够以纯 ASCII 文本读取所有消息,所以无论这是什么,我认为它是特定于 MQTT 的。

如果你还没有这样做,你应该在他们的 GitHub 上打开一个问题。他们似乎反应灵敏:https ://github.com/Azure/azure-iot-sdks/issues

于 2016-03-24T13:33:17.383 回答