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

Как правильно принять JSON – массив, отправленный ESP8266?

Тема в разделе "Раздел для начинающих", создана пользователем Dmtr, 6 окт 2017.

  1. Mestniy2496

    Mestniy2496 Новичок

    Сообщения:
    46
    Симпатии:
    0
    Так. С Самого начала. Сервер - Арда. Клиент - приложение. В арде нужно прописать этот адрес к которому будет подключаться приложение. При подключении приложения к арде, нужно принимать данные в виде стринг по get. Иотправлять ответ в json.
     
  2. Mestniy2496

    Mestniy2496 Новичок

    Сообщения:
    46
    Симпатии:
    0
    • Т.е. будет приходить запрос:
    • http://127.0.0.1:8080/ "volume_increase"
    • К примеру
     
  3. Mestniy2496

    Mestniy2496 Новичок

    Сообщения:
    46
    Симпатии:
    0
    Т.е. мне просто нужно принять GET зпрос, в таком виде, который я написал и отправить JSON ответ.
     
  4. Алексей.

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

    Сообщения:
    625
    Симпатии:
    73
    Никаких сложностей нет, как я сказал выше, добавьте ещё на esp установку ip адреса для интерфейса AP, используйте адрес из диапазона адресов для локального использования #rfc1918 например 192.168.25.1, адрес 127.0.0.1 использовать не нужно.
     
    Mestniy2496 нравится это.
  5. Mestniy2496

    Mestniy2496 Новичок

    Сообщения:
    46
    Симпатии:
    0
    Спасибо большое. Не могу найти толком прием html запроса.
     
  6. Алексей.

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

    Сообщения:
    625
    Симпатии:
    73
    В примерах (в СДК), простой ESP8266WebServer
    libraries/ESP8266WebServer/examples/HelloServer/HelloServer.ino
     
  7. Mestniy2496

    Mestniy2496 Новичок

    Сообщения:
    46
    Симпатии:
    0
    Примного благодарен. Спасибо!!! Буду разьираться как это все всобачить в проект.
     
  8. Mestniy2496

    Mestniy2496 Новичок

    Сообщения:
    46
    Симпатии:
    0
    Доброго дня. Кто знает, где здесь пример приема get запроса?
    Код (C):
    1. #include <ESP8266WiFi.h>
    2. #include <WiFiClient.h>
    3. #include <ESP8266WebServer.h>
    4. #include <ESP8266mDNS.h>
    5.  
    6. const char* ssid = "........";
    7. const char* password = "........";
    8.  
    9. ESP8266WebServer server(80);
    10.  
    11. const int led = 13;
    12.  
    13. void handleRoot() {
    14.   digitalWrite(led, 1);
    15.   server.send(200, "text/plain", "hello from esp8266!");
    16.   digitalWrite(led, 0);
    17. }
    18.  
    19. void handleNotFound(){
    20.   digitalWrite(led, 1);
    21.   String message = "File Not Found\n\n";
    22.   message += "URI: ";
    23.   message += server.uri();
    24.   message += "\nMethod: ";
    25.   message += (server.method() == HTTP_GET)?"GET":"POST";
    26.   message += "\nArguments: ";
    27.   message += server.args();
    28.   message += "\n";
    29.   for (uint8_t i=0; i<server.args(); i++){
    30.     message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
    31.   }
    32.   server.send(404, "text/plain", message);
    33.   digitalWrite(led, 0);
    34. }
    35.  
    36. void setup(void){
    37.   pinMode(led, OUTPUT);
    38.   digitalWrite(led, 0);
    39.   Serial.begin(115200);
    40.   WiFi.begin(ssid, password);
    41.   Serial.println("");
    42.  
    43.   // Wait for connection
    44.   while (WiFi.status() != WL_CONNECTED) {
    45.     delay(500);
    46.     Serial.print(".");
    47.   }
    48.   Serial.println("");
    49.   Serial.print("Connected to ");
    50.   Serial.println(ssid);
    51.   Serial.print("IP address: ");
    52.   Serial.println(WiFi.localIP());
    53.  
    54.   if (MDNS.begin("esp8266")) {
    55.     Serial.println("MDNS responder started");
    56.   }
    57.  
    58.   server.on("/", handleRoot);
    59.  
    60.   server.on("/inline", [](){
    61.     server.send(200, "text/plain", "this works as well");
    62.   });
    63.  
    64.   server.onNotFound(handleNotFound);
    65.  
    66.   server.begin();
    67.   Serial.println("HTTP server started");
    68. }
    69.  
    70. void loop(void){
    71.   server.handleClient();
    72. }
     
  9. Алексей.

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

    Сообщения:
    625
    Симпатии:
    73
    В вашем коде пример приема запросов для url-лов "/" "/inline" и обработчик всех остальных "onNotFound". Без ограничения выполняемых методов (get post и т.д).
    Установили обработчики запросов явно не указывая какой метод обрабатывает этот обработчик
    Например для запроса корневого url установили server.on("/", handleRoot);
    Или для запроса /inline установили
    Код (C):
    1. server.on("/inline", [](){
    2.   server.send(200, "text/plain", "this works as well");
    3. });
    Таким образом при выполнение любых методов перечисленных в
    Код (C):
    1. enum HTTPMethod { HTTP_ANY, HTTP_GET, HTTP_HEAD, HTTP_POST, HTTP_PUT, HTTP_PATCH, HTTP_DELETE, HTTP_OPTIONS };
    будут вызываться ваши обработчики.
    Вы можете ограничить вызов обработчика конкретным методом, например get
    Код (C):
    1. server.on("/inline", HTTP_GET, [](){
    2.   server.send(200, "text/plain", "this works as well");
    3. });
     
  10. Mestniy2496

    Mestniy2496 Новичок

    Сообщения:
    46
    Симпатии:
    0
    А как получать строки?
    Код (C):
    1. String i = server.handleClient();
    ?
     
  11. Алексей.

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

    Сообщения:
    625
    Симпатии:
    73
    Какие строки?
    Вызывая handleClient даете поработать серверу, если запрос от клиента получен и есть обработчик для запрошенного url - будет вызван этот обработчик.
    В обработчике используйте методы сервера для получения от него каких либо данных.
    Если если те строки, которые вы хотели найти это то что указываете в url, например: http://my-server/inline?param1=value1&param2=value2
    то передаваемые параметры получайте от сервера, всё-же есть в вашем коде.
    Код (C):
    1. for (uint8_t i=0; i<server.args(); i++){
    2.   message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
    3. }
     
  12. Сергей_Ф

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

    Сообщения:
    2.278
    Симпатии:
    238
    @Mestniy2496 настоятельно рекомендую пользоваться Гуглом или Яндексом.
    Вопрос к теме отношения не имеет. Пока просто предупреждаю. Одна из первых ссылок:
    ESP8266 Webserver: Getting query parameters
     

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