2016-03-14 88 views
1

我已经成功地按照此处列出的步骤连接我ESP8266 Arduino的项目在Azure物联网中心:无法读取Azure的物联网中心MQTT订阅消息数据

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

,我使用MQTT库以下库:

https://github.com/Imroy/pubsubclient

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

下面是代码:

http://pastebin.com/7AVLQfFh

当我告Azure的设备资源管理器将消息发送到设备的我得到如下结果:

Capture of results
正如你所看到的有效负载长度与消息中的字符数量相同,但字符不相同。而且,如果我改变发送的字符串,那么结果中的值就是相同的。

作为健全性检查我试图针对不同MQTT服务(Adafruit的IO)的代码,并在将结果作为预期(此处该消息是“ON”或“OFF”):

Adafruit IO image Azure MQTT服务在将消息发送到设备时必须做出不同的事情,我需要知道的是它的不同之处。

回答

1

就在几个小时前,我设法使用原始的PubSubClient - link here将消息从Azure IoT集线器传输到我的ESP8266。您正在使用该库的分支,这个分支已经变得更加面向对象,可能还有更多的增强功能..但是如果您对使用更新版本没有兴趣,我建议您获取原始版本并尝试一下。

我有我的GitHub上的代码,如果你需要一些参考:link

一个重要提到:在PubSubClient。H需要改变#defineMQTT_MAX_PACKET_SIZE 128#defineMQTT_MAX_PACKET_SIZE 256,或者如果您工作更加大包

而且,我还没有尝试发送的任何消息,所以我不知道该怎么会工作。

更新:我也写了关于如何设置了一个简短的博客文章:link

+0

没有一个戏又没错,但看上去像客户端的改变是为了。 – mikehole

1

根据this documentation page,property_bagRFC2396编码。

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

但不ABCD明文VS URI相同的编码你问...嗯,是的。

安装安全通道https://www.stunnel.org/index.html),打开8883/TCP一个TLS 1.2连接到物联网中心,再点MQTT.fx或泛美卫生组织将其和嗅探使用Wireshark的交通,看看你会得到什么。

我可以在通过REST与IoT Hub交谈时以纯ASCII文本阅读所有消息,因此无论这是我认为它是MQTT特定的。

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