JSON и ардуино, создание массива

romanxpb
Offline
Зарегистрирован: 30.03.2018

Помогите создать массив с использованием библиотеки #include <ArduinoJson.h>

нужно " упаковать" данные с датчиков в массив!

я только начал осваивать ардуино!!!

инфа на сайте http://arduinojson.org/doc/decoding/

#include "DHT.h"

#include <Wire.h>
#include <BH1750.h>


#include <ArduinoJson.h>


#define DHTPIN 2
#define DHTTYPE DHT11



DHT dht(DHTPIN, DHTTYPE);

BH1750 lightMeter;

void setup() {
Serial.begin(9600);


Serial.println("Датчик Температуры и Влажности подключен");
dht.begin();


Serial.println("Датчик Освещенности подключен");
lightMeter.begin();


// JSON
while (!Serial) continue;
 StaticJsonBuffer<200> jsonBuffer;


 delay(2000);
//По температуре
float hum = dht.readHumidity();
float temp = dht.readTemperature();
/*
  Serial.print("Humidity: ");
  Serial.print(hum);
  Serial.print(" %\t");
  Serial.print("Temperature: ");
  Serial.print(temp);
  Serial.print(" *C ");
*/

//По Освещенности
uint16_t lux = lightMeter.readLightLevel();
/*
  Serial.print("Light: ");
  Serial.print(lux);
  Serial.println(" lx");
*/


// Есть 3 показателя датчиков : lux   temp    hum


//Пробное создание JSON

  char json[] 
  ="{\"Temperatura\":\"temp\",\"Vlagjnost\":\"hum\",\"Osveschennost"\:\"lux\"}";


/*
{
 "Arduino_Mega": "Datchik",

 "Temp_Vlag_Kluch":  {
 "Temperatura": "temp",
 "Vlagjnost": "humе",
 },
  "Oswechennost_Kluch":  {
 "Osveschennost": "lux",},
},
*/

//Используйте функцию объекта parseobject() для декодирования/парсить json в строку JsonObject называется корень.
JsonObject& root = jsonBuffer.parseObject(json);

//Чтобы проверить, если декодирование/разбор был успешным, можно назвать root.успех():
if (!root.success()) {
    Serial.println("parseObject() failed");
    return;
  }


// Извлечения значений.
  //
  // Большую часть времени, вы можете полагаться на неявные преобразования.
  // В другом случае вы можете сделать root["time"].as<long>();
const char* temp = root ["Temperatura"];
const char* hum =  root["Vlagjnost"];
const char* lux = root ["Osveschennost"];
/*  
  long time = root["time"];
  double latitude = root["data"][0];
  double longitude = root["data"][1];
*/

  // Print values.
  Serial.println(temp);
  Serial.println(hum);
  Serial.println(lux);

void loop() {


}

 

NeiroN
NeiroN аватар
Offline
Зарегистрирован: 15.06.2013

Что не понятно в http://arduinojson.org/doc/encoding/ и в http://arduinojson.org/api/jsonobject/createnestedobject/ (копировать сюда не буду)?

decoding - это распаковка строки в переменные

encoding - это упаковка переменных в строку 

все что в кавадратных скобочках это Array, все что в фигурных Object, если внутри то добавляется приставка nested. 

  // Step 2
  StaticJsonBuffer<200> jsonBuffer;

  // Step 3
  JsonObject& root = jsonBuffer.createObject();
  root["Temperatura"] = dht.readTemperature();
  root["Vlagjnost"] = dht.readHumidity();
  root["Osveschennost"] = lightMeter.readLightLevel();


  // Step 4
  root.printTo(Serial);
  Serial.println();
  root.prettyPrintTo(Serial);

Посмотрел исходники - данные можно выводить и в String переменную и в char[] буфер с укзанием размера буфера.

andrvisht
Offline
Зарегистрирован: 21.04.2020

Возник вопрос по библиотеке JSON.

Можно ли разместить jSON во flash ?

// The value is originally in Flash memory
obj["hello"] = F("world");

в примере пишут что можно, но насколько экономиться RAM, и как это можно посчитать ?

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

Подскажите как обойтись без граблей и сразу отправить Json в http?

    String POST_HTTP;
    serializeJson(doc, POST_HTTP);
    http.POST(POST_HTTP);

 

rkit
Offline
Зарегистрирован: 23.11.2016

p-a-h-a пишет:

обойтись без граблей и сразу отправить Json в http?

Что бы этот набор слов мог значить?

p-a-h-a
Offline
Зарегистрирован: 17.01.2019

Ответ на мой вопрос

http.POST(doc.as<String>());