Цифровая электроника для начинающих (Елисеев) - страница 38


Чтение данных из массива и получение его количества с помощью этой библиотеки выглядит так.


DynamicJsonBuffer jsonBuffer(16*1024);

JsonObject& parsed = jsonBuffer.parseObject(json);

if (parsed.success()) {

JsonArray& response = parsed["response"];

int count = response.size();

Serial.print("Number of friends: ");

Serial.println(count);

} else {

Serial.println("Parsing error");

}


Как можно видеть, мы получаем объект типа JsonArray, у которого узнаем размер вызовом метода size(). Также мы создаем объект DynamicJsonBuffer для хранения распакованных данных, при этом выделяется 16Кб памяти для временного буфера в памяти.


Результат готов! Мы получили данные в виде переменной count, теперь мы можем вывести данные в serial port.


Код программы полностью выглядит так.


#include

#include

#include


const char* ssid = "TP-LINK_AB11";

const char* password = "12345678";


void setup() {

Serial.begin(115200);


Serial.print("Connecting to ");

Serial.println(ssid);


while (WiFi.status() != WL_CONNECTED) {

delay(1000);

Serial.print(".");

WiFi.begin(ssid, password);

}


Serial.println("");

Serial.println("WiFi connected!");

}


void loop() {

const char *url = "https://api.vk.com/method/friends.get?user_id=134212064";

Serial.println("Connecting to api.vk.com");


HTTPClient http;

http.begin(url);

int httpCode = http.GET();

if (httpCode > 0) {

String json = http.getString();

// Обработка Json

DynamicJsonBuffer jsonBuffer(16*1024);

JsonObject& parsed = jsonBuffer.parseObject(json);

if (parsed.success()) {

JsonArray& response = parsed["response"];

int count = response.size();

Serial.print("Number of friends: ");

Serial.println(count);

} else {

Serial.println("Json parsing error");

}

} else {

Serial.println("HTTP request error");

}

http.end();


// Пауза 2 мин

delay(120000);

}


Важно: при создании любых запросов к серверу рекомендуется делать их как можно реже, чтобы не перегружать сервер. Именно поэтому в конце функции стоит пауза на 2 минуты. Слишком частые запросы могут стать даже причиной блокировки (бана) по IP-адресу, особенно это касается плат типа ESP32, которые могут работать круглые сутки. Поэтому стоит делать запросы так редко как возможно, исходя из логики работы программы. Например, если мы делаем устройство, показывающее количество друзей в “Контакте”, то нет смысла запрашивать число друзей каждую минуту, скорее всего и интервала проверки раз в 10 минут или даже 1 час будет вполне достаточно.