esp 8266 выдаёт ошибку deserializeJson failed EmptyInput
- Войдите на сайт для отправки комментариев
Пт, 03/09/2021 - 12:05
Добрый день!
ESP8266 выводит ошибку deserializeJson failed EmptyInput
Читал,решал , и так не решил проблему
#include <ESP8266WiFi.h> #include <ESP8266HTTPClient.h> #include <WiFiClientSecure.h> #include <WiFiServerSecureBearSSL.h> #include <Wire.h> #include "SSD1306Wire.h" #include <ArduinoJson.h> // ArduinoJson версия 6 #include "images.h" int amountOfCryptos = 5; String cryptos[] = {"BTC","ETH","BNB","C98","ADA","ATA"}; String cryptosShow[] = {"BTC","ETH","BNB","C98","ADA","ATA"}; String currency = "USDT"; String dollars = "$"; char ssid[] = "Aleksey"; char password[] = ""; #define SCL_PIN 4 #define SDA_PIN 5 unsigned long screenChangeDelay = 15000; WiFiClientSecure client; SSD1306Wire display(0x3c, 5, 4); unsigned long screenChangeDue; String ipAddressString; void setup() { Serial.begin(115200); display.init(); display.setI2cAutoInit(true); display.flipScreenVertically(); display.setTextAlignment(TEXT_ALIGN_CENTER); display.setFont(ArialMT_Plain_16); display.drawString(64, 0, F("CryptoPrice")); //display.setFont(ArialMT_Plain_10); //display.drawString(64, 18, F("")); display.drawXbm(34, 30, WiFi_Logo_width, WiFi_Logo_height, WiFi_Logo_bits); display.display(); WiFi.mode(WIFI_STA); WiFi.disconnect(); delay(100); Serial.print("Connecting Wifi: "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { Serial.print("."); delay(500); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); IPAddress ip = WiFi.localIP(); Serial.println(ip); ipAddressString = ip.toString(); } int i = 0; void loop() { unsigned long timeNow = millis(); if (timeNow > screenChangeDue && i <= amountOfCryptos && WiFi.status() == WL_CONNECTED) { std::unique_ptr<BearSSL::WiFiClientSecure>client(new BearSSL::WiFiClientSecure); client->setInsecure(); HTTPClient http; /* все данные биржи https://api.binance.com/api/v1/ticker/24hr?symbol=BTCUSDT {"symbol":"BTCUSDT","priceChange":"","priceChangePercent":"","weightedAvgPrice":"","prevClosePrice":"","lastPrice":"","lastQty":"","bidPrice":"","bidQty":"","askPrice":"","askQty":"","openPrice":"","highPrice":"","lowPrice":"","volume":"","quoteVolume":"","openTime":,"closeTime":,"firstId":,"lastId":,"count":} */ //client->setFingerprint("5B 5F CA EA D0 43 FC 52 2F D9 E2 EC A0 6C A8 57 70 DB 58 F7"); client->setFingerprint("5B:5F:CA:EA:D0:43:FC:52:2F:D9:E2:EC:A0:6C:A8:57:70:DB:58:F7"); String url = "http://api.binance.com/api/v1/ticker/price?symbol="; http.begin(*client,url + cryptos[i] + "USDT"); //http.begin(*client, "http://api.binance.com/api/v1/ticker/price?symbol=" + cryptos[i] + "USDT" ); int httpCode = http.GET(); StaticJsonDocument<96> doc; DeserializationError error = deserializeJson(doc, http.getString()); if (error) { Serial.print(F("deserializeJson() failed: ")); Serial.println(error.f_str()); } const char* symbol = doc["symbol"]; const char* price = doc["price"]; //float price = doc[cryptos[i]][currency]; Serial.println(price); display.clear(); display.setFont(ArialMT_Plain_16); display.drawString(64, 0, (cryptosShow[i])); display.setFont(ArialMT_Plain_24); display.drawString(64, 18, (dollars + String(price))); display.setFont(ArialMT_Plain_10); //display.drawString(64, 48, "24h: " + String(change24h) + "%"); display.display(); delay(50); http.end(); i++; if (i == amountOfCryptos) i = 0; screenChangeDue = timeNow + screenChangeDelay; } }
Вот второй код, он подключается, но работает один цикл,а дальше нет данных
Выведи в Serial http.getString() - наверняка там нет валидного JSON.
82 строка
Спасибо. Прописал - а там пусто,
Решил поставить другой сайт coingecko и опечаток .
Вывел
{"bitcoin":{"usd":49988,"usd_24h_change":0.3287443542125438}}
Выбросил из кода все и сделал прямой запрос на binance
вывел
{"symbol":"BTCUSDT","price":"49950.00000000"}
Значит косяк в построени запроса где url+ cryptos +
84 строчка
Буду дальше разбираться
Спасибо большое
А что там?
Так это этот сайт ставит
"<a href= и a
Строку #69 для отладки я бы ставил куда-нить на #60. Мало ли чего там насуёшь посередине.
С ARDUINOJSON_USE_LONG_LONG 1 сталкивались ? Что она делает? А то решил запросить {"symbol":"BTCUSDT","priceChange":"302.23000000","priceChangePercent":"0.605","weightedAvgPrice":"49569.69987942","prevClosePrice":"49964.95000000","lastPrice":"50267.18000000","lastQty":"0.02004000","bidPrice":"50267.18000000","bidQty":"0.87996000","askPrice":"50267.19000000",
"askQty":"0.05000000","openPrice":"49964.95000000","highPrice":"50485.00000000","lowPrice":"48316.84000000","volume":"49375.35092500","quoteVolume":"2447521326.79306930","openTime":1630579597995,"closeTime":1630665997995,"firstId":1034477753,"lastId":1035839227,"count":1361475}
Буфер поднял на 1024
Не сталкивался, но предполагаю, что при активации этот парсер начинает оперировать в JsonVariant не uint32_t (long), а uint64_t (long long). Если значения более, чем 2,147,483,647 не прилетают, то смысла в этой опции не вижу.
С буфером можно так замутить, если пока не уверен в размере инпута:
Правда, я с ESP32 развлекаюсь.