Houston1337
New member
Привет! Помогите пожалуйста разобраться. Есть html страница, которую esp отправляет пользователю, пользователь на этой станице выбирает какие- то параметры и отправляет данные в виде json обратно на esp. Они приходят. Как их поместить в буфер JsonObject? Распарсить сам думаю смогу. Спасибо
что выводиться в консоли:
JavaScript:
/*функция отправки данных */
$('#send').click(function (){
xhr = new XMLHttpRequest();
var led = {
num_sing: number_single,
col_sing: color_single,
num_s_rain: number_start_rainbow,
num_e_rain: number_end_rainbow
}
xhr.open("POST", '/myledstrip', true);
xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
xhr.send(JSON.stringify(led));
});
Код:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <FS.h>
#include <ESP8266FtpServer.h>
#include <ArduinoJson.h>
const byte relay = 4;
const char *ssid = "MyESP";
ESP8266WebServer HTTP(80); // Определяем объект и порт сервера для работы с HTTP
FtpServer ftpSrv; // Определяем объект для работы с модулем по FTP (для отладки HTML)
void setup() {
pinMode(relay,OUTPUT); // Определяем пин реле как исходящий
Serial.begin(9600); // Инициализируем вывод данных на серийный порт со скоростью 9600 бод
WiFi.softAP(ssid); // Создаём точку доступа
SPIFFS.begin(); // Инициализируем работу с файловой системой
HTTP.begin(); // Инициализируем Web-сервер
ftpSrv.begin("relay","relay"); // Поднимаем FTP-сервер для удобства отладки работы HTML (логин: relay, пароль: relay)
Serial.print("\nMy IP to connect via Web-Browser or FTP: "); // Выводим на монитор серийного порта сообщение о том, что сейчас будем выводить локальный IP
Serial.println(WiFi.softAPIP()); // Выводим локальный IP-адрес ESP8266
Serial.println("\n");
// Обработка HTTP-запросов
HTTP.on("/myledstrip", myledstrip);
HTTP.onNotFound([](){ // Описываем действия при событии "Не найдено"
if(!handleFileRead(HTTP.uri()))
HTTP.send(404, "text/plain", "Not Found");
});
}
void loop() {
HTTP.handleClient(); // Обработчик HTTP-событий (отлавливает HTTP-запросы к устройству и обрабатывает их в соответствии с выше описанным алгоритмом)
ftpSrv.handleFTP(); // Обработчик FTP-соединений
}
void myledstrip() { // Функция обработки json
Serial.println("данные\n"); // ЗДЕСЬ НЕПОНЯТНО
}
bool handleFileRead(String path){ // Функция работы с файловой системой
if(path.endsWith("/")) path += "index.html"; // Если устройство вызывается по корневому адресу, то должен вызываться файл index.html (добавляем его в конец адреса)
String contentType = getContentType(path); // С помощью функции getContentType (описана ниже) определяем по типу файла (в адресе обращения) какой заголовок необходимо возвращать по его вызову
if(SPIFFS.exists(path)){ // Если в файловой системе существует файл по адресу обращения
File file = SPIFFS.open(path, "r"); // Открываем файл для чтения
size_t sent = HTTP.streamFile(file, contentType); // Выводим содержимое файла по HTTP, указывая заголовок типа содержимого contentType
file.close(); // Закрываем файл
return true; // Завершаем выполнение функции, возвращая результатом ее исполнения true (истина)
}
return false; // Завершаем выполнение функции, возвращая результатом ее исполнения false (если не обработалось предыдущее условие)
}
String getContentType(String filename){ // Функция, возвращающая необходимый заголовок типа содержимого в зависимости от расширения файла
if (filename.endsWith(".html")) return "text/html"; // Если файл заканчивается на ".html", то возвращаем заголовок "text/html" и завершаем выполнение функции
else if (filename.endsWith(".css")) return "text/css"; // Если файл заканчивается на ".css", то возвращаем заголовок "text/css" и завершаем выполнение функции
else if (filename.endsWith(".js")) return "application/javascript"; // Если файл заканчивается на ".js", то возвращаем заголовок "application/javascript" и завершаем выполнение функции
else if (filename.endsWith(".png")) return "image/png"; // Если файл заканчивается на ".png", то возвращаем заголовок "image/png" и завершаем выполнение функции
else if (filename.endsWith(".jpg")) return "image/jpeg"; // Если файл заканчивается на ".jpg", то возвращаем заголовок "image/jpg" и завершаем выполнение функции
else if (filename.endsWith(".gif")) return "image/gif"; // Если файл заканчивается на ".gif", то возвращаем заголовок "image/gif" и завершаем выполнение функции
else if (filename.endsWith(".ico")) return "image/x-icon"; // Если файл заканчивается на ".ico", то возвращаем заголовок "image/x-icon" и завершаем выполнение функции
return "text/plain"; // Если ни один из типов файла не совпал, то считаем что содержимое файла текстовое, отдаем соответствующий заголовок и завершаем выполнение функции
}