Эксперимент 58. Управление светодиодом по WiFi

В прошлом эксперименте мы создали простейший веб- сервер. В нем была всего одна страница — главная. При обращении к ней мы видели в браузере приветствие. Можно расширять функционал сервера, добавив дополнительные страницы и другие функции. Но на микроконтроллере никогда не получится сделать полноценный веб-сервер, на котором можно было бы запустить какой-то сайт, ведь объем памяти и вычислительная мощность микроконтроллера очень ограничены.

На микроконтроллерах создают веб серверы для других целей. Их создают в качестве интерфейса для настройки или управления устройством. Например, твой Wi-Fi роутер имеет веб- интерфейс для настройки. А можно сделать электрический чайник с веб-интерфейсом. Представь, что ты заходишь на «сайт» своего чайника и смотришь какая температура воды в нем сейчас. Видишь, что вода холодная и нажимаешь прямо на этом сайте кнопку, которая включает чайник. Это и есть интернет вещей, когда вещи подключаются к сети. В скором будущем такие чайники, и другие самые разные устройства, будут иметь выход в сеть.

Сейчас мы сделаем веб- интерфейс для управления светодиодом. Мы доработаем веб-сервер из прошлого эксперимента. Добавим ему пару страниц. При заходе на страницу on светодиод будет включаться, а если зайти на страницу off — выключаться.

Схема эксперимента

Подключим светодиод к 13 пину Рисунок 1. Монтажная схема эксперимента

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

Exp58.ino
  1. #include <ESP8266WiFi.h>
  2. #include <ESP8266WebServer.h>
  3.  
  4. #define WIFI_NAME "WiFi_Name"
  5. #define WIFI_PASSWORD "WiFi_Password"
  6. #define PIN_LED 13
  7.  
  8. ESP8266WebServer server(80);
  9.  
  10. void showMessage() {
  11. server.send(200, "text/html", "HELLO WORLD!");
  12. }
  13.  
  14. void ledOn() {
  15. digitalWrite(PIN_LED, HIGH);
  16. server.send(200, "text/html", "ON");
  17. }
  18.  
  19. void ledOff() {
  20. digitalWrite(PIN_LED, LOW);
  21. server.send(200, "text/html", "OFF");
  22. }
  23.  
  24. void setup() {
  25. Serial.begin(9600);
  26. Serial.println();
  27. pinMode(PIN_LED, OUTPUT);
  28. digitalWrite(PIN_LED, LOW);
  29.  
  30. Serial.print("Connecting to WiFi");
  31. WiFi.mode(WIFI_STA);
  32. WiFi.begin(WIFI_NAME, WIFI_PASSWORD);
  33. while (WiFi.status() != WL_CONNECTED) {
  34. Serial.print(".");
  35. delay(500);
  36. }
  37. Serial.println();
  38. Serial.println("WiFi connected");
  39. Serial.print("IP address: ");
  40. Serial.println(WiFi.localIP());
  41.  
  42. server.on("/", showMessage);
  43. server.on("/on", ledOn);
  44. server.on("/off", ledOff);
  45. server.begin();
  46. }
  47. void loop() {
  48. server.handleClient();
  49. }

Первым делом в коде программы нужно заменить WiFi_Name на имя нужной сети, а WiFi_Password на пароль от нее.

По сравнению с кодом прошлого эксперимента мы добавили 2 страницы

  1. server.on("/on", ledOn);
  2. server.on("/off", ledOff);

При обращении клиента к странице on вызывается функция ledOn()

  1. void ledOn() {
  2. digitalWrite(PIN_LED, HIGH);
  3. server.send(200, "text/html", "ON");
  4. }

В этой функции включается светодиод и в браузер отправляется слово ON.

При обращении клиента к странице off вызывается функция do_off

  1. void ledOff() {
  2. digitalWrite(PIN_LED, LOW);
  3. server.send(200, "text/html", "OFF");
  4. }

В этой функции светодиод выключается и в браузер отправляется слово OFF.