===== Эксперимент 64. Режим точки доступа =====
В прошлом эксперименте мы сделали полноценный цветной ночник. Он подключается к существующей сети Wi-Fi, и пользователь тоже подключается к той же сети для управления. В такой схеме подключения задействованы три устройства: сам ночник, Wi-Fi роутер и устройство клиента (смартфон или компьютер).
{{ :products:esp-iot:exp37_net.png?nolink |}}
Но наша плата может работать сама в режиме точки доступа. В таком случае можно установить соединение между платой и клиентским устройством (смартфоном или ноутбуком) напрямую. Для этого нужно настроить микроконтроллер на работу в режиме точки доступа.
{{ :products:esp-iot:exp37_net2.png?nolink |}}
==== Программный код эксперимента ====
#include
#include
#define AP_NAME "RGB_light"
#define AP_PASSWORD "12345678"
#define PIN_LED_R 13
#define PIN_LED_G 14
#define PIN_LED_B 15
ESP8266WebServer server(80);
void indexPage() {
String html_color = "#4AD686";
if (server.hasArg("color")) html_color = server.arg("color");
int duty_r = strtol(html_color.substring(1,3).c_str(), NULL, 16);
int duty_g = strtol(html_color.substring(3,5).c_str(), NULL, 16);
int duty_b = strtol(html_color.substring(5).c_str(), NULL, 16);
analogWrite(PIN_LED_R, 255 - duty_r);
analogWrite(PIN_LED_G, 255 - duty_g);
analogWrite(PIN_LED_B, 255 - duty_b);
String page = "";
page += "";
page += "";
page += "";
page += "";
page += "Select color:
";
page += R"(";
page += "";
page += "";
page.replace("<=VALUE=>", html_color);
server.send(200, "text/html", page);
}
void setup() {
Serial.begin(9600);
Serial.println();
pinMode(PIN_LED_R, OUTPUT);
pinMode(PIN_LED_G, OUTPUT);
pinMode(PIN_LED_B, OUTPUT);
analogWriteRange(256);
analogWrite(PIN_LED_R, 255);
analogWrite(PIN_LED_G, 255);
analogWrite(PIN_LED_B, 255);
WiFi.mode(WIFI_AP);
WiFi.softAP(AP_NAME, AP_PASSWORD);
IPAddress IP = WiFi.softAPIP();
Serial.print("AP set IP address: ");
Serial.println(IP);
server.on("/", indexPage);
server.begin();
}
void loop() {
server.handleClient();
}
Переключаем WiFi в режим точки доступа:
WiFi.mode(WIFI_AP);
Настраиваем свойства точки доступа, а именно устанавливаем имя сети и пароль:
WiFi.softAP(AP_NAME, AP_PASSWORD);
Получаем IP адрес и печатаем его в последовательный порт:
IPAddress IP = WiFi.softAPIP();
Serial.print("AP set IP address: ");
Serial.println(IP);
Других принципиальных отличий программы от программы из предыдущего эксперимента нет.
После запуска программы видим нашу сеть среди списка доступных на смартфоне или на ноутбуке
{{ :products:esp-iot:bea98dc5-e6f2-4e58-a4ec-043f58e25fea.jpg?nolink |}}
Необходимо подключиться к нашей точке доступа. Сообщение об отсутствии интернета — нормально. Ведь откуда ему взяться в нашей сети? Ведь сейчас микроконтроллер не подключен к сети, в которой есть интернет. Сейчас он сам точка доступа. Однако отсутствие интернета никак не помешает подключиться к нашему веб-серверу и управлять светодиодом как раньше, ведь интернет для этого не нужен. Обмен данными происходит внутри локальной сети, образованной микроконтроллером и клиентским устройством.
После установки соединения в терминал будет выведен IP адрес, который принадлежит микроконтроллеру. В нашем случае это ''192.168.4.1''. Именно этот адрес и нужно теперь вводить в адресную строку браузера. Адрес из прошлого эксперимента уже не подойдет, ведь теперь у нас совсем другая сеть.