2016-03-14 87 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