Проблемы с json esp8266
- Войдите на сайт для отправки комментариев
Здравствуйте, я нечего не понимаю в программировании и мне нужна ваша помощь.
Суть проблемы не могу залить готовый скетч. Скетч и библиотеки (Скачать).
Сам скетч
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 |
Судя по гуглу, много у кого такие ошибки по StaticJsonBuffer<2000>
78
расечатать?
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"