#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'字符串的用途时,我需要帮助。我想要的只是将传感器的值输入到客户端,并在图形中显示出来。我标有星号的三行特别令人困惑。
谢谢!
答案 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
。他们是不同的东西。