Скрыть объявление
На нашем форуме недоступен просмотр изображений для неавторизованных пользователей. Если Вы уже зарегистрированы на нашем форуме, то можете войти. Если у Вас еще нет аккаунта, мы будем рады, если Вы к нам присоединитесь. Зарегистрироваться Вы можете здесь.

Нужна помощь получение json

Тема в разделе "NodeMCU", создана пользователем Houston1337, 9 окт 2019.

  1. Houston1337

    Houston1337 Новичок

    Сообщения:
    1
    Симпатии:
    0
    Привет! Помогите пожалуйста разобраться. Есть html страница, которую esp отправляет пользователю, пользователь на этой станице выбирает какие- то параметры и отправляет данные в виде json обратно на esp. Они приходят. Как их поместить в буфер JsonObject? Распарсить сам думаю смогу. Спасибо
    Код (Javascript):
    1. /*функция отправки данных */
    2.         $('#send').click(function (){
    3.             xhr = new XMLHttpRequest();
    4.             var led = {
    5.             num_sing: number_single,
    6.             col_sing: color_single,
    7.             num_s_rain: number_start_rainbow,
    8.             num_e_rain: number_end_rainbow
    9.             }
    10.             xhr.open("POST", '/myledstrip', true);
    11.             xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
    12.             xhr.send(JSON.stringify(led));
    13.         });
    Код (Text):
    1. #include <ESP8266WiFi.h>                                              
    2. #include <ESP8266WebServer.h>                                        
    3. #include <FS.h>                                                      
    4. #include <ESP8266FtpServer.h>                                        
    5. #include <ArduinoJson.h>
    6.  
    7. const byte relay = 4;                                                  
    8. const char *ssid = "MyESP";                                          
    9.  
    10. ESP8266WebServer HTTP(80);                                              // Определяем объект и порт сервера для работы с HTTP
    11. FtpServer ftpSrv;                                                       // Определяем объект для работы с модулем по FTP (для отладки HTML)
    12.  
    13. void setup() {
    14.   pinMode(relay,OUTPUT);                                                // Определяем пин реле как исходящий
    15.   Serial.begin(9600);                                                   // Инициализируем вывод данных на серийный порт со скоростью 9600 бод
    16.   WiFi.softAP(ssid);                                                    // Создаём точку доступа
    17.   SPIFFS.begin();                                                       // Инициализируем работу с файловой системой                        
    18.   HTTP.begin();                                                         // Инициализируем Web-сервер
    19.   ftpSrv.begin("relay","relay");                                        // Поднимаем FTP-сервер для удобства отладки работы HTML (логин: relay, пароль: relay)
    20.  
    21.   Serial.print("\nMy IP to connect via Web-Browser or FTP: ");          // Выводим на монитор серийного порта сообщение о том, что сейчас будем выводить локальный IP
    22.   Serial.println(WiFi.softAPIP());                                      // Выводим локальный IP-адрес ESP8266
    23.   Serial.println("\n");
    24.  
    25. // Обработка HTTP-запросов
    26. HTTP.on("/myledstrip", myledstrip);                                
    27.      
    28.   HTTP.onNotFound([](){                                                 // Описываем действия при событии "Не найдено"
    29.   if(!handleFileRead(HTTP.uri()))                                      
    30.       HTTP.send(404, "text/plain", "Not Found");                      
    31.   });
    32. }
    33.  
    34. void loop() {
    35.     HTTP.handleClient();                                                // Обработчик HTTP-событий (отлавливает HTTP-запросы к устройству и обрабатывает их в соответствии с выше описанным алгоритмом)
    36.     ftpSrv.handleFTP();                                                 // Обработчик FTP-соединений
    37. }
    38.  
    39. void myledstrip() {                                                 // Функция обработки json
    40. Serial.println("данные\n");                                             // ЗДЕСЬ НЕПОНЯТНО                                
    41. }
    42.  
    43. bool handleFileRead(String path){                                       // Функция работы с файловой системой
    44.   if(path.endsWith("/")) path += "index.html";                          // Если устройство вызывается по корневому адресу, то должен вызываться файл index.html (добавляем его в конец адреса)
    45.   String contentType = getContentType(path);                            // С помощью функции getContentType (описана ниже) определяем по типу файла (в адресе обращения) какой заголовок необходимо возвращать по его вызову
    46.   if(SPIFFS.exists(path)){                                              // Если в файловой системе существует файл по адресу обращения
    47.     File file = SPIFFS.open(path, "r");                                 //  Открываем файл для чтения
    48.     size_t sent = HTTP.streamFile(file, contentType);                   //  Выводим содержимое файла по HTTP, указывая заголовок типа содержимого contentType
    49.     file.close();                                                       //  Закрываем файл
    50.     return true;                                                        //  Завершаем выполнение функции, возвращая результатом ее исполнения true (истина)
    51.   }
    52.   return false;                                                         // Завершаем выполнение функции, возвращая результатом ее исполнения false (если не обработалось предыдущее условие)
    53. }
    54.  
    55. String getContentType(String filename){                                 // Функция, возвращающая необходимый заголовок типа содержимого в зависимости от расширения файла
    56.   if (filename.endsWith(".html")) return "text/html";                   // Если файл заканчивается на ".html", то возвращаем заголовок "text/html" и завершаем выполнение функции
    57.   else if (filename.endsWith(".css")) return "text/css";                // Если файл заканчивается на ".css", то возвращаем заголовок "text/css" и завершаем выполнение функции
    58.   else if (filename.endsWith(".js")) return "application/javascript";   // Если файл заканчивается на ".js", то возвращаем заголовок "application/javascript" и завершаем выполнение функции
    59.   else if (filename.endsWith(".png")) return "image/png";               // Если файл заканчивается на ".png", то возвращаем заголовок "image/png" и завершаем выполнение функции
    60.   else if (filename.endsWith(".jpg")) return "image/jpeg";              // Если файл заканчивается на ".jpg", то возвращаем заголовок "image/jpg" и завершаем выполнение функции
    61.   else if (filename.endsWith(".gif")) return "image/gif";               // Если файл заканчивается на ".gif", то возвращаем заголовок "image/gif" и завершаем выполнение функции
    62.   else if (filename.endsWith(".ico")) return "image/x-icon";            // Если файл заканчивается на ".ico", то возвращаем заголовок "image/x-icon" и завершаем выполнение функции
    63.   return "text/plain";                                                  // Если ни один из типов файла не совпал, то считаем что содержимое файла текстовое, отдаем соответствующий заголовок и завершаем выполнение функции
    64. }
    65.  
    что выводиться в консоли:
    [​IMG]
     
  2. Сергей_Ф

    Сергей_Ф Moderator Команда форума

    Сообщения:
    2.210
    Симпатии:
    229
  3. Алексей.

    Алексей. Авторитетный участник сообщества

    Сообщения:
    578
    Симпатии:
    66
    Houston1337,
    Он вам уж в выводе говорит что у него (у сервера) есть key/value пары
    и ключ "plain" содержит значение того джейсона которого вы ждете, берите этот plain и парсите
    Код (Text):
    1. String s = HTTP.arg("plain");
    2. if (s.length() > 0) {
    3.    DynamicJsonDocument doc(1024);
    4.    DeserializationError error = deserializeJson(doc, s);
    5.    if (error) {
    6.        // TODO
    7.    } else {
    8.        JsonObject root = doc.as<JsonObject>();
    9.        if (root.containsKey("num_string")) {
    10.            String num_string = root["num_string"];
    11.        }
    12.    }
    13. }
    14.  
     
    Houston1337 нравится это.

Поделиться этой страницей