Общие сведения:
В этом проекте мы настроим Piranha ESP32 на работу в качестве точки доступа WiFi и будем управлять встроенным светодиодом через веб-сайт, размещённый на веб-сервере внутри ESP32. При подключении к серверу (через браузер с телефона или ПК), который запущен на Piranha ESP32, в браузере будет отображена страница с ссылками для управления встроенным в плату светодиодом.
Помимо библиотек WiFi и WiFiClient нам понадобиться библиотека WiFiAP для создания точки доступа.
Для управления встроенным в плату светодиодом необходимо подключиться с телефона, планшета или любого другого устройства с технологией WiFi и браузером к точке доступа esp32asAP с паролем password12345, затем в адресной строке браузера ввести адрес точки доступа (по умолчанию 192.168.4.1).
Видео:
редактируется ...
Нам понадобится:
Подключение:

Скетч проекта:
// Подключаем библиотеки
#include <WiFi.h>
#include <WiFiClient.h>
#include <WiFiAP.h>
// Определяем название и пароль точки доступа
const char *ssid = "esp32asAP";
const char *password = "password12345";
// Создаём объект Веб-сервера
WiFiServer server(80);
void setup() {
// Устанавливаем режим работы вывода светодиода
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
Serial.println();
Serial.println("Инициируем точку доступа WiFi");
// Инициируем точку доступа WiFi
WiFi.softAP(ssid, password);
IPAddress myIP = WiFi.softAPIP();
// Выводим IP-адрес Веб-сервера
Serial.print("IP-адрес точки доступа: ");
Serial.println(myIP);
// Инициируем сервер
server.begin();
Serial.println("Сервер запущен.");
}
// Функция ответа клиенту
inline bool respToClient(WiFiClient& client, String& currentLine)
{
// Читаем байт и выводим его в последовательный порт
char c = client.read();
Serial.write(c);
// Если байт - символ новой строки
if (c == '\n') {
// Если текущая строка пуста, значит был получен
// символ новой строки два раза подряд
// Это означает конец клиентского HTTP-запроса.
if (currentLine.length() == 0) {
// Посылаем HTTP заголовок
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println();
// Посылаем текст страницы
client.print("<html><meta charset=\"UTF-8\"><body>");
client.print(
"<H1 style=\"font-size: 4em;\">Нажмите "
"<a href=\"/H\">сюда</a> "
"для включения светодиода.</H1>"
);
client.print(
"<H1 style=\"font-size: 4em;\">Нажмите "
"<a href=\"/L\">сюда</a> "
"для выключения светодиода.</H1>"
);
client.print("</body></html>");
// посылаем пустую строку
client.println();
// необходимые данные клиенту переданы -
// выходим из функции с флагом true
return true;
}
// иначе (строка не пуста)
else {
// стираем текущую строку
currentLine = "";
}
}
// иначе (байт не символ новой строки),
// если байт - не символ возврата каретки
else if (c != '\r') {
// добавляем его в текущую строку
currentLine += c;
}
// Проверяем какой запрос сделал клиент.
// Если GET /H
if (currentLine.endsWith("GET /H")) {
// Включаем светодиод
digitalWrite(LED_BUILTIN, HIGH);
}
// Если GET /L
if (currentLine.endsWith("GET /L")) {
// Выключаем светодиод
digitalWrite(LED_BUILTIN, LOW);
}
return false;
}
// Функция обработки клиента
inline void handleClient(WiFiClient& client)
{
// выводим сообщение в последовательный порт
Serial.println("Новый клиент.");
//Создаём строковый объект для хранения входных данных
String currentLine = "";
// Входим в цикл пока клиент подсоединён
while (client.connected()) {
// Если есть данные для чтения
if (client.available()) {
// Вызываем функцию ответа клиенту
bool resp = respToClient(client, currentLine);
// Если функция передала все данные клиенту
if (resp == true)
// прерываем цикл
break;
}
}
// Закрываем соединение
client.stop();
Serial.println("Клиент отключён.");
}
void loop() {
// Создаём объект клиента и проверяем, есть ли подключённые клиенты
WiFiClient client = server.available();
// Если клиенты есть
if (client) {
// Вызываем функцию обработки клиента
handleClient(client);
}
}

Обсуждение