• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

Mestniy2496

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

Mestniy2496

Member
Т.е. мне просто нужно принять GET зпрос, в таком виде, который я написал и отправить JSON ответ.
 

Алексей.

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

Mestniy2496

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

Mestniy2496

Member
Доброго дня. Кто знает, где здесь пример приема get запроса?
Код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>

const char* ssid = "........";
const char* password = "........";

ESP8266WebServer server(80);

const int led = 13;

void handleRoot() {
  digitalWrite(led, 1);
  server.send(200, "text/plain", "hello from esp8266!");
  digitalWrite(led, 0);
}

void handleNotFound(){
  digitalWrite(led, 1);
  String message = "File Not Found\n\n";
  message += "URI: ";
  message += server.uri();
  message += "\nMethod: ";
  message += (server.method() == HTTP_GET)?"GET":"POST";
  message += "\nArguments: ";
  message += server.args();
  message += "\n";
  for (uint8_t i=0; i<server.args(); i++){
    message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  }
  server.send(404, "text/plain", message);
  digitalWrite(led, 0);
}

void setup(void){
  pinMode(led, OUTPUT);
  digitalWrite(led, 0);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");

  // Wait for connection
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());

  if (MDNS.begin("esp8266")) {
    Serial.println("MDNS responder started");
  }

  server.on("/", handleRoot);

  server.on("/inline", [](){
    server.send(200, "text/plain", "this works as well");
  });

  server.onNotFound(handleNotFound);

  server.begin();
  Serial.println("HTTP server started");
}

void loop(void){
  server.handleClient();
}
 

Алексей.

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

Алексей.

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