我在 Arduino 上使用 MQTT 将传感器数据发送到Javascript页面。
到目前为止,我只发送了简单的数据格式:int或floats。
我可以使用哪种格式发送更复杂的结构化数据? 例如:
{ "temperature": 32, "humidity": 67 }
我想在一条MQTT消息上发送它。
我可以使用Json,但我担心Arduino会有点沉重。
更新
好的,似乎是对JSON的普遍共识,但是我有点担心内存需求。
我在Arduino上找到了两个用于json编码/解码的库:
ArduinoJson 声称内存消耗较少,但并不支持:
答案 0 :(得分:0)
使用主题本身来构建数据:
/home/sensors/count 2
/home/sensors/sensor1/name Kitchen
/home/sensors/sensor1/temperature 21
/home/sensors/sensor1/humidity 47
/home/sensors/sensor2/name Upstairs
/home/sensors/sensor2/temperature 23
/home/sensors/sensor2/humidity 48
对于资源受限的Arduino,发布许多简单消息更容易。另一种方法是像你想的那样构建一些大的JSON字符串:
/home/sensors = {{"name":"Kitchen", "temperature": 21, "humidity": 47 },
{"name":"Upstairs", "temperature": 23, "humidity": 48 }}
此外,我认为主题是发布者和客户端更有用的设计(API)。对于Arduino方面,请考虑主题方法如何不强制每个位置同时具有温度和湿度传感器?对于客户端,主题方法允许仅显示湿度的用例。
答案 1 :(得分:0)
我这样做的方法就是将摄氏温度(或Faranheit)中的温度从Arduino发布到代理商,例如
/raw/sensorid temp
然后在代理上我将它全部转换为JSON,包括添加时间戳并重新发布到另一个主题。我发现这种方式更容易,因为如果我移动传感器或更换传感器,我不需要更改arduino代码。如果您感兴趣,Here是我使用的代码,它使用的是Onewire传感器。
例如;
Arduino Publishes:
/raw/DE24532156 10
On my broker I Transforms the data to:
/house/temps {"location":"outside","tempC":10,"tempF":50,"average":14,"max":16,"min":8,"timestamp":12234234}
我使用mqttwarn在python中进行所有转换。