2

我在 Arduino 上使用MQTT传感器数据发送到 Javascript 页面。

到目前为止,我只发送了简单的数据格式:int 或 floats。

我可以使用什么格式来发送更复杂的结构化数据?例如:

{ "temperature": 32, "humidity": 67 }

我想通过一条 MQTT 消息发送它。

我可以使用 Json,但我担心它对于 Arduino 来说有点沉重。


更新

好的,似乎是对 JSON 的普遍共识,但是我有点担心内存要求。

我在 Arduino 上找到了两个用于 json 编码/解码的库:

ArduinoJson声称内存消耗更少,但不支持:

  • 从 Stream 读取(最新版本的 Arduino MQTT 库支持在流中接收消息)
  • 过滤传入的 json(选择性地解析只需要的 Json 字段)
4

2 回答 2

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 方面,请考虑主题方法如何不强制每个位置都具有温度和湿度传感器?对于客户端,主题方法允许使用仅显示湿度的用例。

于 2014-08-24T01:05:36.080 回答
0

我这样做的方式只是将温度(或 Faranheit)从 Arduino 发布到经纪人,例如

/raw/sensorid temp

然后在代理上,我将其全部转换为 JSON,包括添加时间戳并重新发布到另一个主题。我发现这种方式更容易,因为如果我移动传感器或更换它,我不需要更改 arduino 代码。如果您有兴趣,这是我使用的代码,它使用的是 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 中进行所有转换。

于 2014-08-25T11:11:27.693 回答