Hola, llevo un tiempo trasteando con una esp8266 y me he quedado atascado intentando parsear los datos que recibo en el post.
Codigo Arduino hasta el momento
// Import required libraries
#include <Arduino.h>
#include <ESP8266WiFi.h>
#include <Hash.h>
#include <ESPAsyncTCP.h>
#include <ESPAsyncWebServer.h>
#include <ArduinoJson.h>
const char* ssid = "test";
const char* password = "123456789";
StaticJsonBuffer<200> jsonBuffer;
// Create AsyncWebServer object on port 80
AsyncWebServer server(80);
void setup(){
Serial.begin(115200);
Serial.print("Setting AP (Access Point)…");
WiFi.softAP(ssid, password);
IPAddress IP = WiFi.softAPIP();
Serial.print("AP IP address: ");
Serial.println(IP);
// Print ESP8266 Local IP Address
Serial.println(WiFi.localIP());
server.on(
"/",
HTTP_POST,
[](AsyncWebServerRequest *request){
int paramsNr = request->params();
Serial.println(paramsNr);
for(int i=0;i<paramsNr;i++){
AsyncWebParameter* p = request->getParam(i);
Serial.print("Header");
Serial.print("Param name: ");
Serial.println(p->name());
Serial.print("Param value: ");
Serial.println(p->value());
Serial.println("------");
}
},
NULL,
[](AsyncWebServerRequest * request, uint8_t *data, size_t len, size_t index, size_t total){
Serial.print("Pruebas ->");
const char* requestBody = (const char*) data;
Serial.println(requestBody);
Serial.println("Valor del body ->");
JsonObject& root = jsonBuffer.parseObject(requestBody);
if(!root.success()) {
Serial.println("parseObject() failed");
return false;
}
request->send(200, "text/plain", "message received");
});
server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
int paramsNr = request->params();
Serial.println(paramsNr);
for(int i=0;i<paramsNr;i++){
AsyncWebParameter* p = request->getParam(i);
Serial.print("Header");
Serial.print("Param name: ");
Serial.println(p->name());
Serial.print("Param value: ");
Serial.println(p->value());
Serial.println("------");
}
});
// Start server
server.begin();
}
void loop(){
}
Mi llamada desde la aplicación de Ionic es la siguiente:
let data = {
array: [[255,255,255],[255,255,255],[255,255,255]]
}
this.httpClient.post('http://192.168.4.1/',data)
.subscribe(res=> console.log(res))
Lo que me escribe en el Monitor Serie
Pruebas ->{"array":[[255,255,0],[255,255,0],[255,255,0]]}420⸮>|⸮?d⸮?f16e⸮⸮User-Agent
Valor del body ->
parseObject() failed
Estoy usando la versión 5.13.5 de ArduinoJson
He probado con la version 6 de ArduinoJson pero me crashea en algún punto del parseo.
He buscado en stackoverflow y por el foro pero no encuentro nada.
Alguna idea?