В прошлом эксперименте мы управляли светодиодом. Его можно было включить при обращении к одной странице и выключить, при обращении к другой. Но как быть, если нам нужно управлять яркостью светодиода? Ранее мы управляли яркостью светодиода с помощью ШИМ и помним, что яркость задавалась числом от 0 до 1023. Мы не можем же сделать 1024 страницы, по одной для каждого варианта яркости. Конечно это делается не так.
При обращении к серверу клиент может передать некоторые данные. Один из способов сделать это — передать в виде параметров в адресе URL.
Рассмотрим основные части URL
Остановимся подробнее на параметрах. Параметры состоят из пар имя=значение, отделяется от адреса символом ?
, и между собой пары разделяются символом &
.
Если параметр один, то он записывается http://site.ru?a=1
, если их несколько, то друг от друга пары разделяются амперсандом http://site.ru?a=1&b=2
. В качестве значений могут использоваться буквы, цифры и некоторые символы.
Как раз с помощью параметра мы и можем передавать нашему серверу значение яркости светодиода. Например так: http://192.168.43.195?duty=512
.
#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #define WIFI_NAME "WiFi_Name" #define WIFI_PASSWORD "WiFi_Password" #define PIN_LED 13 ESP8266WebServer server(80); void indexPage() { if (server.hasArg("duty")) { server.send(200, "text/html", "Duty is: " + server.arg("duty")); } else { server.send(200, "text/html", "No Duty param"); } } void setup() { analogWriteRange(1024); WiFi.mode(WIFI_STA); WiFi.begin(WIFI_NAME, WIFI_PASSWORD); while (WiFi.status() != WL_CONNECTED) { } server.on("/", indexPage); server.begin(); } void loop() { server.handleClient(); }
Первым делом в коде программы нужно заменить WiFi_Name
на имя нужной сети, а WiFi_Password
на пароль от нее.
При обращении к главной странице сервиса происходит вызов функции indexPage()
server.on("/", indexPage);
Сначала мы проверяем наличие параметра duty
if (server.hasArg("duty")) {
если такого параметра не было передано серверу, то сервер отвечает строкой No Duty param
. Если duty
было задано, то значение этого параметра используем в качестве коэффициента заполнения ШИМ и выводим в браузер строку с указанием принятого значения.
server.send(200, "text/html", "Duty is: " + server.arg("duty"));
Так как URL передается в виде строки и, соответственно, параметры тоже, то перед использованием значения параметра его необходимо конвертировать в число с помощью функции toInt()
.
Попробуй отправлять запрос на сервер с разными значениями параметра duty