我正在尝试像这样将 ESP8266 安全地连接到云或本地计算机上的 MQTT Azure 协议网关代理(两者都尝试过)(不重要 - 连接正常工作):
m = mqtt.Client("{deviceId}", "3600", "{iotHub}/{deviceId}", "{SASToken}")
...
m:on("message", function(conn, top, data)
print(data) -- EMPTY string here!
end)
...
m:connect({IP}, 8883, 1, function(conn)
m:subscribe("devices/{deviceId}/messages/devicebound/#", 1, function(conn)
...
end)
end)
ESP 连接到服务器并成功完成握手。当我发布一些数据时,我可以在服务器上正确读取它,没关系。我订阅主题没有问题。当我将云到设备消息中的数据从服务器发送到 ESP 到订阅主题时,会调用“on message”事件,但传递给函数的数据属性是 EMPTY 字符串。
我正在使用基于 1.4.0 SDK 的最新 NodeMCU 主版本(尝试了整数和浮点版本)。我无法打开调试,因为我还没有 NodeMCU 开发人员。
我试过以下:
- 开发版 - 无济于事
- 高达 32kB 的可用内存 - 无济于事
- 使用 WireShark 捕获的数据包:数据包包含一定长度的加密数据,因此它不为空且数据包大小小于 2kB 缓冲区大小
有人可以告诉我哪里可能出现问题或如何调试它以获取更多信息?我会接受任何想法。谢谢你。
编辑:我试过调试模式,输出没有什么有趣的:
enter mqtt_socket_received.
MQTT_DATA: type: 3, qos: 0, msg_id: 0, pending_id: 0
enter deliver_publish.
string
userdata: 3fff3e88
devices/ESP/messages/devicebound
<- here should be printed data
On
leave deliver_publish.
receive, queue size: 0
leave mqtt_socket_received.
enter mqtt_socket_timer.
timer, queue size: 0
keep_alive_tick: 71
leave mqtt_socket_timer.
enter mqtt_socket_received.
MQTT_DATA: type: 7, qos: 1, msg_id: 8813, pending_id: 0
receive, queue size: 0
leave mqtt_socket_received.