doc["some_text"] = "volume_increase", "volume_decrease", "device_on", "device_off", "timer_increase", "timer_decrease", "state";
int volume_value;
boolean on_value;
long time_value;
StaticJsonDocument<256> doc;
doc["volume"] = volume_value;
doc["on"] = on_value;
doc["time"] = time_value;
String output;
serializeJson(doc, output);
server.send(200, "application/json", output);
Спасибо большое. Покажите пожалуйста - можно где отправляется ответ? И где он формируется? Можете обьяснить? Спасибо большое.Нет не так, для запросов /volume_increase /volume_decrease /device_on /device_off /timer_increase /timer_decrease /state
в обработчике not found выполнять поиск server.uri().indexOf("/volume_increase") и прочих урлов
если урло найдено, выполнять соответствующее действие, подготавливать ответ
и отправлять его клиентуКод:int volume_value; boolean on_value; long time_value; StaticJsonDocument<256> doc; doc["volume"] = volume_value; doc["on"] = on_value; doc["time"] = time_value; String output; serializeJson(doc, output); server.send(200, "application/json", output);
Просто я ответ хочу отправлять постоянно. Ибо хочу сделать таймер именно на МК - и данные Таймера в реалтайм отправлять подключившемуся устройству.Спасибо большое. Покажите пожалуйста - можно где отправляется ответ? И где он формируется? Можете обьяснить? Спасибо большое.
Вы выбрали протокол http, со стороны клиента (андроид) используете HttpURLConnection который выполняет метод GET, т.е. клиент строит запрос, соединяется с сервером, отправляет запрос и получает на него ответ.Просто я ответ хочу отправлять постоянно. Ибо хочу сделать таймер именно на МК - и данные Таймера в реалтайм отправлять подключившемуся устройству.
Вы ждете кода который вам напишут? Немножко не тот раздел выбрали.А. Я только щас допер - что вы мне дали ответы!!! И их обработку. А как принять и обработать запрос? server.uri().indexOf("/volume_increase") - как это оформляется?
Неожиданный поворот, я в вашем коде указал где это выполняется (HttpWorker.getSource), а вы не можете это найти...Я не могу найти где в коде происходит обработка конкретных get запросов?
Стоп - но это же в приложении. А мне нужно слушать GET запросы и не только отправлять ответ, а допустим при приходе какой то команды отправлять в serial чтолибо.Неожиданный поворот, я в вашем коде указал где это выполняется (HttpWorker.getSource), а вы не можете это найти...
Вы уверены что вам это нужно?
Выше я отправлял ссылку на приложение. И судя по тому что пишет Алексей, он с ней ознакомился. Приложение отправляет GET на ЕСП. А ЕСП, должно принять эти запросы и отправить соответствующие команды арде по сериалу. Я просто хочу понять как мне обрабатывать конкретные запросы...@Mestniy2496 что вам мешает отправлять? И что такое "приложение"?
Вы для себя и для помощников хоть схему обрисуйте, а то совсем ничего непонятно что вы говорите.
#include <Arduino.h>
#include <ArduinoJson.h>
#ifdef ARDUINO_ARCH_ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#define WebServerImpl ESP8266WebServer
#elif ARDUINO_ARCH_ESP32
#include <WiFi.h>
#include <WebServer.h>
#define WebServerImpl WebServer
#else
#error Unsupported architecture, use ARDUINO_ARCH_ESP8266 or ARDUINO_ARCH_ESP32
#endif
// Это ip адрес по которому будет доступен веб-сервер
IPAddress local_ip(192, 168, 4, 22);
// Это ip адрес шлюза, этот шлюз будут использовать wifi клиенты подключившиеся к точке доступа
IPAddress gateway (192, 168, 4, 9);
// Это маска подсети
IPAddress subnet (255, 255, 255, 0);
// Экземпляр веб-сервера
WebServerImpl server(80);
// Это обработчик для запроса корневого url
void handle_root() {
// Отвечаем текстом что выполнен запрос корневого url
server.send(200, "text/plain", "This is response for root url.");
}
// Это обработчик для url /my-status
void handle_my_status() {
// Строим документ
StaticJsonDocument<256> doc;
// Добавляем строковый элемент с именем "some_text" и значением "bla-bla"
doc["some_text"] = "bla-bla";
// Добавляем числовой элемент с именем "my_millis" и значением полученных millis
doc["my_millis"] = millis();
String output;
// Серилизуем в строку
serializeJson(doc, output);
// Отправляем ответ клиенту
server.send(200, "application/json", output);
}
// Это обработчик для всех остальных запросов
void handle_not_found() {
// Отвечаем запросившему всё что мы о нем думаем
// и отправляем обратно то, что он прислал в запросе.
String message = "File Not Found\n\n";
// Добавляем uri
message += "URI: ";
message += server.uri();
// Добавляем запрошенный метод
message += "\nMethod: ";
message += server.method() == HTTP_GET ? "GET" : "POST";
// Если в строке запроса есть ещё аргументы, добавим их в сообщение
if (server.args() > 0) {
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);
}
void setup() {
// Инициализируем wifi
// Отключаем сохранение параметров во флеш
WiFi.persistent(false);
// Выключаем wifi совсем
WiFi.mode(WIFI_OFF);
// Зачем-то спим немножко
delay(100);
// Устанавливаем параметры ip для интерфейса AP
WiFi.softAPConfig(local_ip, gateway, subnet);
// Выбираем режим работы wifi
WiFi.mode(WIFI_AP);
// Задаем идентификатор SSID
WiFi.softAP("MY-ESP");
// Настраиваем веб-сервер
// Устанавливаем обработчик корневого url
server.on("/", HTTP_GET, handle_root);
// Устанавливаем обработчик для url /my-status
server.on("/my-status", HTTP_GET, handle_my_status);
// Устанавливаем обработчик для всего остального не обработанного
server.onNotFound(handle_not_found);
// Запускаем сервер
server.begin();
}
void loop() {
// Даем серверу обрабатывать запросы
server.handleClient();
}
Библиотека веб-сервера та что есть в СДК, заголовочные файлы в примере.Но я просто не втыкаю от куда это все береться? Какая библиотека? Как мне добавить чтение и обработку GET ?
#include <Arduino.h>
#include <ArduinoJson.h>
#ifdef ARDUINO_ARCH_ESP8266
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#define WebServerImpl ESP8266WebServer
#elif ARDUINO_ARCH_ESP32
#include <WiFi.h>
#include <WebServer.h>
#define WebServerImpl WebServer
#else
#error Unsupported architecture, use ARDUINO_ARCH_ESP8266 or ARDUINO_ARCH_ESP32
#endif
// Это ip адрес по которому будет доступен веб-сервер
IPAddress local_ip(192, 168, 4, 22);
// Это ip адрес шлюза, этот шлюз будут использовать wifi клиенты подключившиеся к точке доступа
IPAddress gateway (192, 168, 4, 9);
// Это маска подсети
IPAddress subnet (255, 255, 255, 0);
// Экземпляр веб-сервера
WebServerImpl server(80);
// Статические переменные, отправляемые на каждом get запросе в котором присутствует нужная url
int volume_value = 0;
boolean on_value = false;
long time_value = 0;
// Это обработчик для всех запросов GET POST и т.д.
void handle_not_found() {
// Предварительно установим код ответа
int response_code = 404;
// Обрабатываем только GET запросы, на все остальные отвечаем 404-м кодом
if (server.method() == HTTP_GET) {
if (server.uri().indexOf("/volume_increase") >= 0) {
// TODO Вот тут что то делаем, был запрошен /volume_increase
// Устанавливаем значение volume_value, чтоб как-то проинформировать
// что обрабатывался запрос /volume_increase
volume_value = 10;
// Устанавливаем код ответа
response_code = 200;
} else if (server.uri().indexOf("/volume_decrease") >= 0) {
// TODO
volume_value = 20;
response_code = 200;
} else if (server.uri().indexOf("/device_on") >= 0) {
// TODO
volume_value = 30;
response_code = 200;
} else if (server.uri().indexOf("/device_off") >= 0) {
volume_value = 40;
// TODO
response_code = 200;
} else if (server.uri().indexOf("/timer_increase") >= 0) {
// TODO
volume_value = 50;
response_code = 200;
} else if (server.uri().indexOf("/timer_decrease") >= 0) {
// TODO
volume_value = 60;
response_code = 200;
} else if (server.uri().indexOf("/state") >= 0) {
response_code = 200;
}
}
// Код ответа ответа был установлен отличным от 404, значит нужно ответить статусом
if (response_code != 404) {
// Строим json документ
StaticJsonDocument<256> doc;
// Устанавливаем значение "volume"
doc["volume"] = volume_value;
// Устанавливаем значение "on"
doc["on"] = on_value;
// Устанавливаем значение "time"
doc["time"] = time_value;
// Серилизуем json документ в строку
String output;
serializeJson(doc, output);
// Отправляем ответ
server.send(response_code, "application/json", output);
} else {
// Отправляем ответ
server.send(response_code, "text/plain", "File Not Found\n\n");
}
}
void setup() {
// Инициализируем wifi
// Отключаем сохранение параметров во флеш
WiFi.persistent(false);
// Выключаем wifi совсем
WiFi.mode(WIFI_OFF);
// Устанавливаем параметры ip для интерфейса AP
WiFi.softAPConfig(local_ip, gateway, subnet);
// Выбираем режим работы wifi
WiFi.mode(WIFI_AP);
// Задаем идентификатор SSID
WiFi.softAP("MY-ESP");
// Настраиваем веб-сервер
// Устанавливаем обработчик для всех запросов, определять методы и запрошенные url будем в нем
server.onNotFound(handle_not_found);
// Запускаем сервер
server.begin();
}
void loop() {
// Даем серверу обрабатывать запросы
server.handleClient();
}