Проблемы с json esp8266

kol4661
Offline
Зарегистрирован: 27.04.2020

Здравствуйте, я нечего не понимаю в программировании и мне нужна ваша помощь.
Суть проблемы не могу залить готовый скетч. Скетч и библиотеки (Скачать).

Сам скетч

001 /*
002   Connections:
003   GPS TX -> Wemos RX (disconnect to upload this sketch) or Soft port D7
004   GPS RX -> Wemos TX  or Soft port D8
005   Screen SDA -> Wemos SDA (D2)
006   Screen SCL -> Wemos SCL (D1)
007 */
008 #include <Arduino.h>
009 #include "LCD.h"
010  
011 #include "UbloxGPS.h"
012 #include "ALServer.h"
013  
014 ALServer srv;
015 LCD lcd;
016  
017 Metering metering;
018 Metering meterings[10];
019  
020 FullData fullData;
021  
022 void setup() {
023   Serial.begin(115200);
024   serial.begin(115200);
025   delay(500);
026  
027   metering = {0.0, 0.0, 0.0, 0.0};
028  
029   gpsSetup();
030   srv.createAP();
031   lcd.init();
032 }
033  
034 unsigned long lastScreenUpdate = 0; // Частота обновления дисплея
035  
036 float latitude  = 0.0;           // Ширина
037 float longitude = 0.0;           // Долгота
038  
039 float meteringTime  = 0.0;       // Время замера
040 bool onlySpeedMeter = false;     // Режим спидометра
041  
042 unsigned long startMillis   = 0; // Начало отсчета
043 unsigned long startITOW     = 0; // Начало отсчета из GPS
044 unsigned long currentMillis = 0; // Текущее время
045  
046 bool start        = false;       // Начало замера
047 bool meteringSave = false;       // Сохранён ли последний замер
048  
049 double startLat  = 0.0;
050 double startLon  = 0.0;
051 double finishLat = 0.0;
052 double finishLon = 0.0;
053  
054 void loop() {
055   currentMillis = millis(); // текущее время в миллисекундах
056   int msgType = processGPS();
057   if ( msgType == MT_NAV_PVT ) {
058     fullData.numSV = ubxMessage.navPvt.numSV;
059     fullData.gSpeedKm = ubxMessage.navPvt.gSpeed * 0.0036;
060     sprintf(fullData.gpsTime, "%02d:%02d:%02d", ubxMessage.navPvt.hour, ubxMessage.navPvt.minute, ubxMessage.navPvt.second);
061     latitude = (float)(ubxMessage.navPvt.lat / 10000000.0f);
062     longitude = (float)(ubxMessage.navPvt.lon / 10000000.0f);
063     dtostrf(latitude, 8, 6, fullData.bufLatitude);
064     dtostrf(longitude, 8, 6, fullData.bufLongitude);
065     fullData.hAcc = ubxMessage.navPvt.hAcc / 1000.0f;
066   }
067  
068   // ---------------------- Замер ----------------------
069   // Если движемся
070   if (fullData.gSpeedKm > 0) {
071  
072     // Время замера
073     meteringTime = (float)(ubxMessage.navPvt.iTOW - startITOW) / 1000;   //TODO: в начало
074  
075  
076     // Если это был старт
077     if (!start) {
078       start = true;
079       meteringSave = false;
080       startMillis = millis();
081       startITOW = ubxMessage.navPvt.iTOW;
082       metering = {0.0, 0.0, 0.0, 0.0};
083       startLat = latitude;
084       startLon = longitude;
085       finishLat = 0.0;
086       finishLon = 0.0;
087       onlySpeedMeter = false;
088     else if (meteringTime > 99) {
089       // Если замер длится дольше 99 секунд TODO
090       onlySpeedMeter = true;
091     }
092  
093     // Замеры разгона
094     if (!onlySpeedMeter) {
095       if (0.0 == metering.accel30 && fullData.gSpeedKm >= 30) {
096         // Разгон до 30км/ч
097         metering.accel30 = meteringTime;
098       }
099       else if (0.0 == metering.accel60 && fullData.gSpeedKm >= 60) {
100         // Разгон до 60км/ч
101         metering.accel60 = meteringTime;
102       }
103       else if (0.0 == metering.accel100 && fullData.gSpeedKm >= 100) {
104         // Разгон до 100км/ч
105         metering.accel100 = meteringTime;
106       }
107     }
108  
109   }
110   // Если была ложная тревога
111   else if (start && 0 == fullData.gSpeedKm) {
112     start = false;
113     meteringSave = false;
114     startMillis = 0;
115     meteringTime = 0;
116     startLat = 0.0;
117     startLon = 0.0;
118     finishLat = 0.0;
119     finishLon = 0.0;
120   }
121   // -------------------- END Замер --------------------
122  
123   // Если замер завершен
124   if (!meteringSave && 0.0 != metering.accel100) {
125  
126     //------------- последний результат всегда сверху
127     Metering *meteringsNew = new Metering[10];
128     memcpy(meteringsNew, meterings, sizeof(meterings[0]) * 10);
129     meterings[0] = metering;
130     for (int i = 0; i < 9; i++)
131     {
132       meterings[i + 1] = meteringsNew[i];
133     }
134     delete[] meteringsNew;
135     //-------------
136     srv.setData(meterings, (int)(sizeof(meterings) / sizeof(meterings[0])));
137     meteringSave = true;
138   }
139  
140   // ---------------------- Экран ----------------------
141   unsigned long now = millis();
142   if (now - lastScreenUpdate > 100) {
143     if (0 == fullData.numSV) {
144       lcd.gpsScreen();
145     else {
146       lcd.updateScreen(&fullData, &metering);
147     }
148     lastScreenUpdate = now;
149   }
150   // -------------------- END Экран --------------------
151  
152   // Ждём подключения только если не делаем замер
153   if (!start || onlySpeedMeter) {
154     srv.serverHandle();
155   }
156 }

Ошибка





C:\Users\Kol4661\AppData\Local\Temp\arduino_build_680759\sketch\ALServer.cpp: In member function 'void ALServer::handleResults()':

C:\Users\Kol4661\AppData\Local\Temp\arduino_build_680759\sketch\ALServer.cpp:56:3: error: 'StaticJsonBuffer' was not declared in this scope

StaticJsonBuffer<2000> jsonBuffer;

^

C:\Users\Kol4661\AppData\Local\Temp\arduino_build_680759\sketch\ALServer.cpp:56:26: error: 'jsonBuffer' was not declared in this scope

StaticJsonBuffer<2000> jsonBuffer;

^

C:\Users\Kol4661\AppData\Local\Temp\arduino_build_680759\sketch\ALServer.cpp:75:10: error: 'class ArduinoJson::JsonArray' has no member named 'printTo'

arrayJ.printTo(buffer, sizeof(buffer));

^

exit status 1

Ошибка компиляции для платы LOLIN(WEMOS) D1 R2 & mini.


 

ALServer.cpp

01 #include "ALServer.h"
02  
03 const char *ssid     = "ARDULOGIC";  // Название сети WiFi
04 const char *password = "1234567890"// Пароль для подключения
05  
06 ESP8266WebServer server(80);         // Создаем веб сервер на 80 порту
07  
08 ALServer::ALServer()
09 {
10 }
11  
12 void ALServer::serverHandle()
13 {
14   server.handleClient(); // Ждёи подлючения
15 }
16  
17 void ALServer::setData(Metering* meterings, size_t n)
18 {
19   _meterings = meterings;
20   _n = n;
21 }
22  
23 void ALServer::createAP()
24 {
25   WiFi.softAP(ssid, password); // Создаём точку WiFi
26   delay(500);
27  
28   // Указываем по каким роутам какие методы запускать
29   server.on("/", [this]() {
30     handleRoot();
31   });
32  
33   server.on("/style.css", [this]() {
34     handleStyle();
35   });
36  
37   server.on("/results", [this]() {
38     handleResults();
39   });
40  
41   server.begin();
42 }
43  
44 // Метод формирует стартовую страницу <a href="http://192.168.4.1" title="http://192.168.4.1" rel="nofollow">http://192.168.4.1</a>
45 void ALServer::handleRoot()
46 {
47   server.send(200, "text/html", data_indexHTML);
48 }
49  
50 void ALServer::handleStyle() {
51   server.send(200, "text/css", data_styleCSS);
52 }
53  
54 void ALServer::handleResults()
55 {
56   StaticJsonBuffer<2000> jsonBuffer;
57   JsonArray& arrayJ = jsonBuffer.createArray();
58  
59   for (int i = 0; i < _n; i++) {
60     if (0.0 != _meterings[i].accel30) {
61       JsonObject& object = jsonBuffer.createObject();
62       dtostrf(_meterings[i].accel30, 3, 1, buf30);
63       object["a30"] = (String)buf30;
64  
65       dtostrf(_meterings[i].accel60, 3, 1, buf60);
66       object["a60"] = (String)buf60;
67  
68       dtostrf(_meterings[i].accel100, 3, 1, buf100);
69       object["a100"] = (String)buf100;
70       arrayJ.add(object);
71     }
72   }
73  
74   char buffer[512];
75   arrayJ.printTo(buffer, sizeof(buffer));
76  
77   server.send(200, "text/html", buffer);
78 }

ALServer.h

01 #ifndef ALServer_h
02 #define ALServer_h
03  
04 #include <ESP8266WiFi.h>
05 #include <ESP8266WebServer.h>
06 #include <ArduinoJson.h>
07 #include "data.h"
08  
09 // структура результатов
10 struct Metering
11 {
12   float accel30;
13   float accel60;
14   float accel100;
15   float quarter;
16 };
17  
18 class ALServer
19 {
20   private:
21     Metering* _meterings;
22     size_t _n;
23     char buf30[5], buf60[5], buf100[5];
24  
25   public:
26     ALServer();
27     void createAP();
28     void serverHandle();
29     void setData(Metering* meterings, size_t n);
30  
31     void handleRoot();
32     void handleStyle();
33     void handleResults();
34 };
35  
36 #endif

 

BOOM
BOOM аватар
Offline
Зарегистрирован: 14.11.2018

Судя по гуглу, много у кого такие ошибки по StaticJsonBuffer<2000>

Maka
Offline
Зарегистрирован: 24.10.2015

 

 
78 ALServer.h
01 #ifndef ALServer_h
02 #define ALServer_h
03  
04 #include <ESP8266WiFi.h>
05 #include <ESP8266WebServer.h>
06 #include <ArduinoJson.h>
07 #include "data.h"
[/quote]
 
А библиотека "ArduinoJson" установлена?
Похоже на то что ALServer хочет ArduinoJson.