Эксперимент 66. Wi-Fi термометр в режиме точки доступа

В прошлом эксперименте мы сделали полноценный термометр с доступом по IP адресу. Он подключается к существующей сети Wi-Fi, и пользователь тоже подключается к той же сети для соединения с термометром. В такой схеме подключения задействованы три устройства: сам ночник, Wi-Fi роутер и устройство клиента (смартфон или компьютер).

Но наша плата может работать сама в режиме точки доступа. В таком случае можно установить соединение между платой и клиентским устройством (смартфоном или ноутбуком) напрямую. Для этого нужно настроить микроконтроллер на работу в режиме точки доступа.

Схему прошлого эксперимента оставляем без изменений, но немного изменим код.

Программный код эксперимента

Exp66.ino
  1. #include <ESP8266WiFi.h>
  2. #include <ESP8266WebServer.h>
  3. #include <OneWire.h>
  4. #include <DallasTemperature.h>
  5.  
  6. #define AP_NAME "WIFI_TEMP"
  7. #define AP_PASSWORD "12345678"
  8. #define BUS_PIN 12 //the device is on GPIO12
  9.  
  10. OneWire oneWire(BUS_PIN);
  11. DallasTemperature sensors(&oneWire);
  12.  
  13. ESP8266WebServer server(80);
  14.  
  15. void showMessage() {
  16. sensors.requestTemperatures();
  17. float tempC = sensors.getTempCByIndex(0);
  18. server.send(200, "text/html", String(tempC));
  19. }
  20.  
  21. void setup() {
  22. Serial.begin(9600);
  23. Serial.println();
  24.  
  25. WiFi.mode(WIFI_AP);
  26. WiFi.softAP(AP_NAME, AP_PASSWORD);
  27. IPAddress IP = WiFi.softAPIP();
  28. Serial.print("AP set IP address: ");
  29. Serial.println(IP);
  30.  
  31. server.on("/", showMessage);
  32. server.begin();
  33. }
  34.  
  35. void loop() {
  36. server.handleClient();
  37. }

Переключаем WiFi в режим точки доступа:

  1. WiFi.mode(WIFI_AP);

Настраиваем свойства точки доступа, а именно устанавливаем имя сети и пароль:

  1. WiFi.softAP(AP_NAME, AP_PASSWORD);

Получаем IP адрес и печатаем его в последовательный порт:

  1. IPAddress IP = WiFi.softAPIP();
  2. Serial.print("AP set IP address: ");
  3. Serial.println(IP);

Других принципиальных отличий программы от программы из предыдущего эксперимента нет.

После запуска программы видим нашу сеть среди списка доступных на смартфоне или на ноутбуке

Необходимо подключиться к нашей точке доступа. Сообщение об отсутствии интернета — нормально. Ведь откуда ему взяться в нашей сети? Ведь сейчас микроконтроллер не подключен к сети, в которой есть интернет. Сейчас он сам точка доступа. Однако отсутствие интернета никак не помешает подключиться к нашему веб-серверу и посмотреть температуру как раньше, ведь интернет для этого не нужен. Обмен данными происходит внутри локальной сети, образованной микроконтроллером и клиентским устройством.

После установки соединения в терминал будет выведен IP адрес, который принадлежит микроконтроллеру. В нашем случае это 192.168.4.1. Именно этот адрес и нужно теперь вводить в адресную строку браузера. Адрес из прошлого эксперимента уже не подойдет, ведь теперь у нас совсем другая сеть.