В сетях Wi-Fi микроконтроллер ESP32 может работать и как станция, и как точка доступа, и в обоих режимах одновременно. В этом руководстве мы покажем, как настроить ESP32 в качестве точки доступа с использованием среды программирования Arduino IDE.
В большинстве проектов мы подключали микроконтроллер ESP32 к беспроводному маршрутизатору. При этом появляется доступ к ESP32 через локальную сеть. Тогда маршрутизатор служил точкой доступа, а ESP32 был настроен как станция. А для управления микроконтроллером ESP32 необходимо было подключиться к маршрутизатору (локальной сети).
Но если вы настроите микроконтроллер ESP32 как точку доступа (как в местах общественного беспроводного доступа), вы сможете подключиться к ESP32 с помощью любого устройства с интерфейсом Wi-Fi без необходимости соединения с маршрутизатором.
Простыми словами, когда вы настраиваете ESP32 как точку доступа, вы создаёте свою собственную сеть Wi-Fi, а находящиеся поблизости устройства с интерфейсом Wi-Fi (станции) могут подсоединяться к микроконтроллеру (например, смартфон или компьютер).
Здесь мы покажем, как настроить ESP32 как точку доступа для своего проекта с веб-сервером. В этом случае вам не понадобится подключаться к маршрутизатору для управления микроконтроллером ESP32. Так как ESP32 не подключается далее к более широкой сети (в отличие от маршрутизатора), она называется мягкая точка доступа (soft Access Point).
Установка ESP32 в Arduino IDE
Для среды Arduino IDE существует дополнение, которое позволяет программировать микросхему ESP32 посредством этой среды и её языка программирования.
Код для создания точки доступа на ESP32
В этом примере мы модифицируем веб-сервер на микроконтроллере ESP32 из прошлого руководства, чтобы добавить возможность работы в качестве точки доступа. То, что мы здесь представим, должно отлично работать с любым примером, представляющим собой веб-сервер на ESP32.
Загрузите приведённый ниже код, чтобы настроить микроконтроллер ESP32 как точку доступа.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
/********* Rui Santos Complete project details at https://randomnerdtutorials.com *********/ // Load Wi-Fi library #include <WiFi.h> // Replace with your network credentials const char* ssid = "ESP32-Access-Point"; const char* password = "123456789"; // Set web server port number to 80 WiFiServer server(80); // Variable to store the HTTP request String header; // Auxiliar variables to store the current output state String output26State = "off"; String output27State = "off"; // Assign output variables to GPIO pins const int output26 = 26; const int output27 = 27; void setup() { Serial.begin(115200); // Initialize the output variables as outputs pinMode(output26, OUTPUT); pinMode(output27, OUTPUT); // Set outputs to LOW digitalWrite(output26, LOW); digitalWrite(output27, LOW); // Connect to Wi-Fi network with SSID and password Serial.print("Setting AP (Access Point)…"); // Remove the password parameter, if you want the AP (Access Point) to be open WiFi.softAP(ssid, password); IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); server.begin(); } void loop(){ WiFiClient client = server.available(); // Listen for incoming clients if (client) { // If a new client connects, Serial.println("New Client."); // print a message out in the serial port String currentLine = ""; // make a String to hold incoming data from the client while (client.connected()) { // loop while the client's connected if (client.available()) { // if there's bytes to read from the client, char c = client.read(); // read a byte, then Serial.write(c); // print it out the serial monitor header += c; if (c == '\n') { // if the byte is a newline character // if the current line is blank, you got two newline characters in a row. // that's the end of the client HTTP request, so send a response: if (currentLine.length() == 0) { // HTTP headers always start with a response code (e.g. HTTP/1.1 200 OK) // and a content-type so the client knows what's coming, then a blank line: client.println("HTTP/1.1 200 OK"); client.println("Content-type:text/html"); client.println("Connection: close"); client.println(); // turns the GPIOs on and off if (header.indexOf("GET /26/on") >= 0) { Serial.println("GPIO 26 on"); output26State = "on"; digitalWrite(output26, HIGH); } else if (header.indexOf("GET /26/off") >= 0) { Serial.println("GPIO 26 off"); output26State = "off"; digitalWrite(output26, LOW); } else if (header.indexOf("GET /27/on") >= 0) { Serial.println("GPIO 27 on"); output27State = "on"; digitalWrite(output27, HIGH); } else if (header.indexOf("GET /27/off") >= 0) { Serial.println("GPIO 27 off"); output27State = "off"; digitalWrite(output27, LOW); } // Display the HTML web page client.println("<!DOCTYPE html><html>"); client.println("<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">"); client.println("<link rel=\"icon\" href=\"data:,\">"); // CSS to style the on/off buttons // Feel free to change the background-color and font-size attributes to fit your preferences client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}"); client.println(".button { background-color: #4CAF50; border: none; color: white; padding: 16px 40px;"); client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}"); client.println(".button2 {background-color: #555555;}</style></head>"); // Web Page Heading client.println("<body><h1>ESP32 Web Server</h1>"); // Display current state, and ON/OFF buttons for GPIO 26 client.println("<p>GPIO 26 - State " + output26State + "</p>"); // If the output26State is off, it displays the ON button if (output26State=="off") { client.println("<p><a href=\"/26/on\"><button class=\"button\">ON</button></a></p>"); } else { client.println("<p><a href=\"/26/off\"><button class=\"button button2\">OFF</button></a></p>"); } // Display current state, and ON/OFF buttons for GPIO 27 client.println("<p>GPIO 27 - State " + output27State + "</p>"); // If the output27State is off, it displays the ON button if (output27State=="off") { client.println("<p><a href=\"/27/on\"><button class=\"button\">ON</button></a></p>"); } else { client.println("<p><a href=\"/27/off\"><button class=\"button button2\">OFF</button></a></p>"); } client.println("</body></html>"); // The HTTP response ends with another blank line client.println(); // Break out of the while loop break; } else { // if you got a newline, then clear currentLine currentLine = ""; } } else if (c != '\r') { // if you got anything else but a carriage return character, currentLine += c; // add it to the end of the currentLine } } } // Clear the header variable header = ""; // Close the connection client.stop(); Serial.println("Client disconnected."); Serial.println(""); } } |
Настройка идентификатора SSID и пароля
Вам необходимо прописать идентификатор SSID и пароль для доступа к микроконтроллеру ESP32. В этом примере для ESP32 мы установили идентификатор SSID «ESP32-Access-Point» (ESP32-точка-доступа), но вы можете ввести любое имя по желанию.
Пароль — 123456789, его тоже можно изменить.
1 2 3 |
// You can customize the SSID name and change the password const char* ssid = "ESP32-Access-Point"; const char* password = "123456789"; |
Настройка ESP32 как точки доступа
В функции setup() есть фрагмент, в котором с помощью метода softAP() настраивают ESP32 как точку доступа.
1 |
WiFi.softAP(ssid, password); |
Предусмотрены также опциональные параметры, которые можно передать методу softAP(). Вот все параметры:
1 |
.softAP(const char* ssid, const char* password, int channel, int ssid_hidden, int max_connection) |
- SSID (описан выше): максимум 63 символа;
- password (описан выше): минимум 8 символов; установите в NULL, если хотите, чтобы точка доступа была открыта;
- channel: номер канала Wi-Fi (1—13);
- ssid_hidden: (0 = широковещательный SSID, 1 = скрытый SSID);
- max_connection: максимальное количество одновременно подключённых клиентов (1—4).
Далее нам нужно вывести в окно последовательного COM-порта (Serial Monitor) IP-адрес точки доступа, используя метод softAPIP().
1 2 3 |
IPAddress IP = WiFi.softAPIP(); Serial.print("AP IP address: "); Serial.println(IP); |
Эти фрагменты кода необходимо добавить в примеры с веб-сервером, чтобы настроить микроконтроллер ESP32 как точку доступа.
Необходимые компоненты для создания точки доступа на ESP32
Для этого руководства вам понадобятся следующие элементы:
Плата разработчика с микроконтроллером ESP32
2 светодиода 5 мм
2 резистора 330 Ом
Макетная плата
Проволочные перемычки
Схема подключения компонентов
Начнём собирать схему. Подключите два светодиода к микроконтроллеру ESP32, как показано на следующей схеме: один к выводу общего назначения GPIO 26, а второй к — GPIO 27.
Примечание: в этом проекте используется плата разработчика ESP32 DEVKIT DOIT с 36 выводами. Перед сборкой схемы проверьте назначение выводов вашей платы.
Настройка IP адреса
Загрузите код в микроконтроллер ESP32 (убедитесь, что выбрали правильные плату и COM-порт). Откройте окно последовательного COM-порта (Serial Monitor) и настройте скорость передачи на 115 200 бод. Нажмите кнопку «Enable» на плате с микроконтроллером ESP32.
Будет выведен IP-адрес, необходимый для доступа к ESP32. В нашем случае это 192.168.4.1.
Подключение к точке доступа на ESP32
При запущенной на микроконтроллере ESP32 программе откройте настройки сети Wi-Fi в вашем смартфоне и нажмите «ESP32-Access-Point network» (Сеть ESP32-точка-доступа):
Введите пароль, который вы задали ранее.
Откройте веб-браузер и введите IP-адрес 192.168.4.1. Должна загрузиться страница веб-сервера:
Чтобы подключиться к точке доступа с компьютера, пройдите в «Network» (Сеть) и «Internet Settings» (Настойки Интернет) и выберите «ESP32-Access-Point».
Введите пароль, который задали ранее.
Всё готово! Теперь, чтобы открыть веб-страницу сервера на ESP32, вам нужно просто ввести IP-адрес микроконтроллера в браузере.
Запуск!
Это всего лишь простое руководство, показывающее, как добавить настройку точки доступа на микроконтроллере ESP32 в примеры с веб-сервером. Как только ESP32 будет настроен как точка доступа, устройства с интерфейсом Wi-Fi смогут подключаться к нему напрямую.
9 комментариев. Оставить новый
Хорошо написанная статья! А как сделать так чтобы первичная настройка осуществлялась через режим точки доступа а на веб странице были поля для ввода ssid и пароля для подключения к уже существующей точки доступа? Либо печаталось на первичной веб странице список обнаруженных вай фай сетей, при нажатии на одну из них предлагалось бы ввести пароль к ней. Ну и другие параметры (переменные) чтобы можно было менять.
Поищите скрипт под ESP32, который называется “autoconnect”. Он как раз реализовывает запрашиваемую вами задачу.
Шикарно, но я хочу чтобы при появлении телефона рядом с ESP включалось реле, то есть нужно вывести RSSI , а я вообще не вижу в программе где вывод в консоль..
При подключении пишет
dhcps: send_offer>>udp_sendto result 0
А поиском по программе не находит “send_offer”
А как правильно добавит в этот код камеру для наружного наблюдения (модуль esp32 с интегрируемой камерой OC2640) для удаленного подключения к ней через её Wi-Fi (как веб-сервер в скетче камеры на esp только с точкой доступа от модуля, а не с подключением к существующему WiFi)
Здравствуйте! Подскажите пожалуйста, как в данном примере, вместо второй кнопки добавить слайдер – транслирующий значение положения слайдера через функцию analogWrite на выбранный контакт
Здравствуйте. Все интерактивные функции типа слайделв, тогглов и тд добавляются через установку jquery и последующую их настройку на нужные функции
Что нужно изменить или добавить в скетч, чтобы прописать две точки доступа (то есть две WiFi сети)?
Если одна не работает, то будет само подключаться к другой ?
Приветствую! Можно ли запустить режим ОТА в такой точке доступа? делаю железку на ЕСП32+ардуино ,но никаких wifi сетей вокруг не будет.А обновлять ПО–требуется,лучше без вскрытия аппарата )).
Пример не захотел работать. получилось заставить работать только так:
// Load Wi-Fi library
//#include
#include