Разбор HTML-запроса GET с параметрами с помощью WiFiEsp
Итак, я настраиваю веб-сервер с помощью esp-01f+arduino uno. Я использую библиотеку WiFiEsp. Я хочу включить светодиод. Пин будет предоставлен в GET-запросе по URL-адресу. Пример: host.com/?ledpin=9 Как я могу разобрать его, а затем получить число 9?
Код:
#include "WiFiEsp.h"
// Эмулируем Serial1 на контактах 6/7, если они отсутствуют
#ifndef HAVE_HWSERIAL1
#include "SoftwareSerial.h"
SoftwareSerial Serial1(6, 7); // прием, передача
#endif
char ssid[] = "Twim"; // SSID вашей сети (имя)
char pass[] = "12345678"; // ваш сетевой пароль
int status = WL_IDLE_STATUS;
int ledStatus = LOW;
WiFiEspServer server(80);
// используем кольцевой буфер для увеличения скорости и уменьшения выделения памяти
RingBuffer buf(8);
void setup()
{
pinMode(LED_BUILTIN, OUTPUT); // инициализируем цифровой вывод LED_BUILTIN как выход.
Serial.begin(115200); // инициализируем серийный номер для отладки
Serial1.begin(9600); // инициализируем серийный номер для модуля ESP
WiFi.init(&Serial1); // инициализируем модуль ESP
// проверяем наличие щита
if (WiFi.status() == WL_NO_SHIELD) {
Serial.println("WiFi shield not present");
// не продолжать
while (true);
}
// попытка подключения к сети Wi-Fi
while (status != WL_CONNECTED) {
Serial.print("Attempting to connect to WPA SSID: ");
Serial.println(ssid);
// Подключиться к сети WPA/WPA2
status = WiFi.begin(ssid, pass);
}
Serial.println("You're connected to the network");
printWifiStatus();
// запускаем веб-сервер на порту 80
server.begin();
}
void loop()
{
WiFiEspClient client = server.available(); // прослушивание входящих клиентов
if (client) { // если у вас есть клиент,
Serial.println("New client"); // вывести сообщение из последовательного порта
buf.init(); // инициализируем кольцевой буфер
while (client.connected()) { // цикл, пока клиент подключен
if (client.available()) { // если есть байты для чтения от клиента,
char c = client.read(); // прочитать байт, затем
buf.push(c); // помещаем его в кольцевой буфер
// вывод потока на последовательный монитор замедлится
// получение данных от ESP, заполняющих последовательный буфер
//Серийный.запись(с);
// вы получили два символа новой строки подряд
// это конец HTTP-запроса, поэтому отправьте ответ
if (buf.endsWith("\r\n\r\n")) {
sendHttpResponse(client);
break;
}
// Проверяем, был ли запрос клиента "GET /H" или "GET /L":
if (buf.endsWith("GET /H")) {
Serial.println("Turn led ON");
ledStatus = HIGH;
digitalWrite(LED_BUILTIN, HIGH); // включаем светодиод (HIGH - уровень напряжения)
}
else if (buf.endsWith("GET /L")) {
Serial.println("Turn led OFF");
ledStatus = LOW;
digitalWrite(LED_BUILTIN, LOW); // выключаем светодиод, понижая напряжение
}
}
}
// закрываем соединение
client.stop();
Serial.println("Client disconnected");
}
}
void sendHttpResponse(WiFiEspClient client)
{
// Заголовки HTTP всегда начинаются с кода ответа (например, HTTP/1.1 200 OK)
// и тип контента, чтобы клиент знал, что придет, затем пустая строка:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
// содержимое ответа HTTP следует за заголовком:
client.print("The LED is ");
client.print(ledStatus);
client.println("<br>");
client.println("<br>");
client.println("Click <a href=\"/H\">here</a> turn the LED on<br>");
client.println("Click <a href=\"/L\">here</a> turn the LED off<br>");
// Ответ HTTP заканчивается еще одной пустой строкой:
client.println();
}
void printWifiStatus()
{
// вывести SSID сети, к которой вы подключены
Serial.print("SSID: ");
Serial.println(WiFi.SSID());
// напечатать IP-адрес вашего WiFi-экрана
IPAddress ip = WiFi.localIP();
Serial.print("IP Address: ");
Serial.println(ip);
// печатать куда идти в браузере
Serial.println();
Serial.print("To see this page in action, open a browser to http://");
Serial.println(ip);
Serial.println();
}
Details дает мне только это:
GET /favicon.ico HTTP/1.1
Host: 192.168.0.165:5000
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36
Accept: image/webp,image/apng,image/*,*/*;q=0.8
Referer: http://192.168.0.165:5000/H
Accept-Encoding: gzip, deflate
Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7
@TheGamerCoder, 👍-1
Обсуждение1 ответ
Лучший ответ:
Смотрите также:
- ESP8266 не подключается к Wi-Fi
- Как подключить Wi-Fi Shield ESP-12E-ESP8266-UART-WIFI-Wireless-Shield к Arduino
- Можно ли отключить WiFi на ESP8266?
- Как отключить или остановить точку доступа в ESP8266?
- ESP8266 — действительно ли у него по умолчанию плохой радиус действия Wi-Fi?
- Как подключить ESP8266 с помощью адаптера ESP-01 к Arduino Uno?
- ESP8266 на Wi-Fi без пароля, возможно?
- ESP8266 Аналоговое чтение мешает Wi-Fi?
Сначала напечатайте в Serial все полученные запросы. Тогда смотри и думай. Откуда вы знаете, что полезная нагрузка равна 9? Что отличает его настолько, что вы всегда можете идентифицировать его в запросе? Что ты ищешь? Как только вы сможете ответить на них, вы сможете сформулировать более конкретный вопрос, чтобы узнать, как реализовать свой алгоритм, или просто использовать Google, чтобы найти нужные функции., @SoreDakeNoKoto
Можете ли вы легко сказать, как разобрать GET /pin=9?, @TheGamerCoder
И еще вопрос как его записать в серийник?, @TheGamerCoder
Я откатил правку. Не меняйте вопрос полностью. Возможно, кто-то работает над ответом., @Juraj
ХОРОШО. Спасибо. Юрай, @TheGamerCoder
Юрай, можешь ответить? Или я должен объяснить больше, @TheGamerCoder
Эй. Кто-нибудь жив?, @TheGamerCoder
Откуда вы скопировали этот код/скетч? Существует несколько стандартных функций C/C++, которые могут помочь в разборе запроса. Также класс Arduino String содержит для этого несколько функций-членов. Хотите, чтобы мы написали/обновили скетч для вас?, @Mikael Patel
Вот учебник https://techtutorialsx.com/2016/10/22/esp8266-webserver-getting-query-parameters/, @Mikael Patel
Микаэль Патель, если можно, @TheGamerCoder
Учебник работает только при прошивке esp8266., @TheGamerCoder
пожалуйста, обновите мой скетч, @TheGamerCoder
ЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕЕУ, @TheGamerCoder
ЭЙ, пожалуйста, обновите мой скетч пожалуйста, ПОЖАЛУЙСТА, ПОЖАЛУЙСТА, @TheGamerCoder
ЭЙ. Любой . Обновите мой скетч пожалуйста, @TheGamerCoder