Arduino JSON软件包-格式化传感器值

时间:2019-03-22 12:47:05

标签: json arduino twilio

#include <ArduinoJson.h>
#include <SimpleDHT.h>

String input = "{\"temperature\":\"26\"};
SimpleDHT11 dht11;
byte temperature = 0;
int err = SimpleDHTErrSuccess;

void loop {

   StaticJsonBuffer<512> dataBuffer;

   if (err = dht11.read(2, &temperature, NULL)) == simpleDHTErrSuccess) {
       Serial.print((int) temperature);
       JsonObject& dataRoot = dataBuffer.parseObject(input);

       *long Temperature = dataRoot[String("temperature")];
       *Temperature = (long)temperature;
       *dataRoot[String("temperature")] = Temperature;

       String output;
       dataRoot.printTo(output);
}

我在这里有一段Arduino代码,用于格式化JSON中的DHT11温度传感器读数,以允许在Web客户端上实时传输数据。这是从我用于启发https://www.twilio.com/blog/2018/07/watch-iot-sensors-esp32-javascript-nodejs-twilio-sync.html的项目中获得的。

我正在尝试从Myoware肌肉传感器中提取数据。我想要的振幅值可以像这样简单查询:

int sensorValue = analogRead(A0);

在了解parseObject函数的工作方式以及'input'字符串的用途时,我需要帮助。我想要的只是将传感器的值输入到客户端,并在图形中显示出来。我标有星号的三行特别令人困惑。

谢谢!

1 个答案:

答案 0 :(得分:2)

方法parseObject()从JSON字符串分配并填充一个JsonObject(您可以使用)。

您的代码示例中的“ JsonObject” 被命名为dataRoot,并由

定义

JsonObject& dataRoot = dataBuffer.parseObject(input);

其中 dataBuffer 来自StaticJsonBuffer<512> dataBuffer;,这是使用ArduinoJson库的入口点,并且

其中 input 具有JSON字符串"{\"temperature\":\"26\"}"的值,该值遵循标准的JSON属性值对格式(您需要使用JSON字符串然后发送到客户端)。

执行JsonObject& dataRoot = dataBuffer.parseObject(input);后,您将获得dataRoot作为具有名为temperature的属性的对象,并且可以使用dataRoot[String("temperature")]来访问此属性

三行:

   long Temperature = dataRoot[String("temperature")];
   Temperature = (long)temperature;
   dataRoot[String("temperature")] = Temperature;

用于使用从传感器读取的任何内容更新temperature属性的值。

示例代码中有些令人困惑的地方是JSON属性的名称为temperature,并且用于保存从传感器读取的温度的变量的名称也为temperature。他们是不同的东西。