КОРЗИНА
магазина
8 (499) 500-14-56 | ПН. - ПТ. 12:00-18:00
ЛЕСНОРЯДСКИЙ ПЕРЕУЛОК, 18С2, БЦ "ДМ-ПРЕСС"

Piranha ESP32 как точка доступа WiFi

Общие сведения:

В этом проекте мы настроим 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);
    }
}

Ссылки




Обсуждение

Гарантии и возврат Используя сайт Вы соглашаетесь с условями