Как на этом микроконтроллере ESP8266 можно поднять локальный wi-fi сервер с помощью которого можно  управлять различными видами нагрузки используя домашнюю wi-fi сеть.

Преимущество данного способа очевидно потому что во-первых модуль работает в закрытой wi-fi сети доступ которой не имеет никто извне, а управление можно осуществлять с любого устройства которое имеет доступ к вашему wi-fi роутеру мобильный телефон компьютер.

 

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
MDNSResponder mdns; // Wi-Fi const char* ssid = "AIRPORT"; const char* password = "1803200820082008"; byte arduino_mac[] = { 0xDE, 0xED, 0xBA, 0xFE, 0xFE, 0xED }; IPAddress ip(192,168,1,35); IPAddress gateway(192,168,1,1); IPAddress subnet(255,255,255,0); ESP8266WebServer server(80); int D0_pin = 16; int D2_pin = 2; int D1_pin = 5; void setup(void){ // preparing GPIOs pinMode(D0_pin, OUTPUT); digitalWrite(D0_pin, LOW); pinMode(D2_pin, OUTPUT); digitalWrite(D2_pin, LOW); pinMode(D1_pin, OUTPUT); digitalWrite(D1_pin, LOW); delay(100); Serial.begin(115200); WiFi.begin(ssid, password); WiFi.config(ip, gateway, subnet); Serial.println(""); // Wait for connection while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.print("Connected to "); Serial.println(ssid); Serial.print("IP address: "); Serial.println(WiFi.localIP()); if (mdns.begin("esp8266", WiFi.localIP())) { Serial.println("MDNS responder started"); } //+++++++++++++++++++++++ START LED-1 ++++++++++++++++++++ server.on("/", [](){ server.send(200, "text/html", webPage()); }); server.on("/socket1On", [](){ digitalWrite(D0_pin, HIGH); server.send(200, "text/html", webPage()); delay(100); }); server.on("/socket1Off", [](){ digitalWrite(D0_pin, LOW); server.send(200, "text/html", webPage()); delay(100); //+++++++++++++++++++++++ END LED-1 ++++++++++++++++++++ //+++++++++++++++++++++++ START LED-2 ++++++++++++++++++++ }); server.on("/socket2On", [](){ digitalWrite(D2_pin, HIGH); server.send(200, "text/html", webPage()); delay(100); }); server.on("/socket2Off", [](){ digitalWrite(D2_pin, LOW); server.send(200, "text/html", webPage()); delay(100); // +++++++++++++++++++++++ END LED-2 ++++++++++++++++++++ //+++++++++++++++++++++++ START LED-3 ++++++++++++++++++++ }); server.on("/socket3On", [](){ digitalWrite(D1_pin, HIGH); server.send(200, "text/html", webPage()); delay(100); }); server.on("/socket3Off", [](){ digitalWrite(D1_pin, LOW); server.send(200, "text/html", webPage()); delay(100); // +++++++++++++++++++++++ END LED-3 ++++++++++++++++++++ }); server.begin(); Serial.println("HTTP server started"); } void loop(void){ server.handleClient(); } String webPage()
{
String web;
web += "<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"/> <meta charset=\"utf-8\"><title>ESP 8266</title><style>button{color:red;padding: 10px 27px;}</style></head>";
web += "<h1 style=\"text-align: center;font-family: Open sans;font-weight: 100;font-size: 20px;\">ESP8266 Web Server</h1><div>";
//++++++++++ LED-1 +++++++++++++
web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">----LED 1----</p>";
if (digitalRead(D0_pin) == 1)
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #43a209;margin: 0 auto;\">ON</div>";
}
else
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #ec1212;margin: 0 auto;\">OFF</div>";
}
web += "<div style=\"text-align: center;margin: 5px 0px;\"> <a href=\"socket1On\"><button>ON</button></a>&nbsp;<a href=\"socket1Off\"><button>OFF</button></a></div>";
// ++++++++ LED-1 +++++++++++++

//++++++++++ LED-2 +++++++++++++
web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">----LED 2----</p>";
if (digitalRead(D2_pin) == 1)
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #43a209;margin: 0 auto;\">ON</div>";
}
else
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #ec1212;margin: 0 auto;\">OFF</div>";
}
web += "<div style=\"text-align: center;margin: 5px 0px;\"> <a href=\"socket2On\"><button>ON</button></a>&nbsp;<a href=\"socket2Off\"><button>OFF</button></a></div>";
// ++++++++ LED-2 +++++++++++++

//++++++++++ LED-3 +++++++++++++
web += "<p style=\"text-align: center;margin-top: 0px;margin-bottom: 5px;\">----LED 3----</p>";
if (digitalRead(D1_pin) == 1)
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #43a209;margin: 0 auto;\">ON</div>";
}
else
{
web += "<div style=\"text-align: center;width: 98px;color:white ;padding: 10px 30px;background-color: #ec1212;margin: 0 auto;\">OFF</div>";
}
web += "<div style=\"text-align: center;margin: 5px 0px;\"> <a href=\"socket3On\"><button>ON</button></a>&nbsp;<a href=\"socket3Off\"><button>OFF</button></a></div>";
// ++++++++ LED-2 +++++++++++++

// ========REFRESH=============
web += "<div style=\"text-align:center;margin-top: 20px;\"><a href=\"/\"><button style=\"width:158px;\">REFRESH</button></a></div>";
// ========REFRESH=============


web += "</div>";
return(web);
}

Не ограничено давайте я вам покажу сейчас на примере как у нас это всё работает и происходит как мы видим У нашего микроконтроллера есть свой IP адрес этот IP адрес мы устанавливаем самостоятельно независимо от того раздаёт ли wi-fi роутер IP адреса автоматически то есть работает функция DHCP Либо мы назначаем это всё вручную то есть у нас IP адрес всегда один и тот же у нас есть два основных точнее три основны бло это управление первым светодиодом и управление вторым светодиодом также у нас есть кнопка рефреш которая обновляет нас показания на экране давайте рассмотрим чем мы будем управлять на нашем микроконтроллере мы можем управлять красным светодиодом и синим они соответственно подключены к выходу d0 и выходу D2 заранее предупреждаю о том что эти светодиоды они инверсные это значит когда на у нас находится низкий уровень то есть ноль напряжение равно нулю светодиод светодиод загорается когда на выходе d0 у нас высокий уровень Высокое напряжение
светодиод тухнет то же самое касается и третьего поэтому мы в нашей панели управления когда включаем on у нас тухнет светодиод мы вот таким вот образом и осуществляем управление отклик происходит мгновенно всё работает безотказно теперь давайте рассмотрим работу с мобильным телефонам страничка адаптирована для работы с мобильными устройствами Это значит что она будет хорошо и удобно выглядеть не только на экране компьютера но и мобильного телефона опять же с помощью наших кнопок мы можем управлять Как видите оно всё
отрабатывает следующим этапом является кнопка рефреш э предположим такую ситуацию кто-то из ваших домочадцев включил светодиод смотрите наша панель отображает что они у нас два включено То есть ни один сведёт не горит мы Выключаем и видим светодиод загорелся для того чтобы нам обновить статус наши индикации мы нажимаем рефреш и мы сразу видим что у нас включено А что у нас нет то есть вы всегда будете иметь знать текущее состояние выходов э вашего микроконтроллера Давайте перейдём к скетчу и рассмотрим о том как это у нас
работает на базе микроконтроллера мы поднимаем wi-fi сервер значит изначально у нас идёт импорт необходимых библиотек дальше у нас идёт настройка подключение к нашей домашней WiFi C то есть имя и пароль дальше у нас необходимые параметры для подключения к локальной сети это у нас MAC адрес IP Wii назначит именно Торес которы здесь IP адреса могут поменяться в произвольном порядке В зависимости от того ну в каком адресном пространстве Работаете Вы А дальше мы указываем что мы будем дальше мы указываем что будем работать
на 0м порту и наши пины пин d0 и пин D2 Помните я вам уже рассказывал о том что соответствие пинов которые написаны на плате и те которые мы указываем в ардуина немного отличаются поэтому для этого есть специальная картинка с соответствующими обозначениями Сейчас вы видите её на экране А также она будет прикреплена к описанию Итак дальше мы проводим инициализацию наших пинов пин d0 и пин D2 дальше у нас происходит непосредственно сам процесс подключения и для отладки мы будем использовать seral Port для того чтобы смотреть
текущие параметры и то как работает скетч А значит у нас идёт отображение у нас идёт отображение текущего процесса подключения так и А я специально комментариями разбил на части э те элементы те разделы скетча которые отвечают за э свой Ну за каждый светодиод в первом случае мы пишем указываем здесь так называемый ссылки по переходу по которым у нас будет происходить действие а именно включаться светодиод высокое Ну включаться диод или выключаться то есть Когда у нас будет написано наш ipset 1 on значит зт включится когда мы
нажмём socket о о он выключится мы будем переходить на соответствующие страницы то же самое справедливо для диода номер д здесь у нас вот уже вот эта часть пошло непосредственно сам код нашей странички то есть всё то что необходимо для того чтобы красиво отображалось и работало так как мы этого хотим А значит во второй строке мы можем исправить название сервера то есть вот эту вот часть Мы можем изменить по своему усмотрению А дальше у нас идёт блок который отвечает за отображение диода LED 1 то есть вот этот вот
блок в этом блоке у нас показывает текущее состояние и управляющие элементы а также подписан блок как LED 1 вот мы подписан наш блок так а затем у нас идёт вот текущая текст текущего отображения on и Off здесь мы можем написать любой текст например Let 1 on следующее у нас идёт управляющие кнопки и как Видите вот эти кнопки у нас перенаправляет на ссылки соответствующие в результате которых у нас ТДТ либо включается либо выключается тоже самое для L 2 и у нас здесь обделена кнопка котора у нас обновляет тее показа
конечно в таком виде скетч Возможно не представляет большого интереса поэтому сейчас мы с Вами рассмотрим что нам нужно сделать чтобы добавить ещё один светодиод Сначала мы подключим светодиод подключаться мы будем к пину D1 к D1 мы подключим наш светодиод подключим уже Ну так как необходимо значит а резистор 1 ком и потом через рер у нас идёт плюс и мы подключаем его непосредственно к земле То есть он у нас не инверсный это значит что при подаче высокого напряжения он у нас загорится Так теперь давайте посмотрим
на скеч и поду томм так чтобы у нас появился блок для управления третьим светодиодом для начала Нам необходимо проинициализировать спины наши поэтому мы копируем часть этого кода вставляем обозначим пин как D1 и Согласно нашему рисунку это будет пятый выход для среды ардуина опять же нам необходимо произвести инициализацию и установить пин D1 в низкое положение по включению делаем вот таким вот образом сделали дальше нам необходимо назначить ссылки которые будут управлять нашим светодиодом LED 3 копируем блок LED
2 исправляем его на Т соответственно поправ ссылки забываем исправить что мы будем управлять пином D1 Здесь тоже самое ставим 3 и пин D1 исправим здесь L 3 ссылки мы настроили для управления третьим светодиодом теперь нам необходимо ещё скопировать блок L 2 вставить его ниже и исправляем опять же на три необходимые нам параметры Вот это у нас будет название блока исправим его на лет 3 пин Кстати забыл сказать что вот в этой части у нас происходит проверка если у нас пин высокого уровня То есть у нас там единица то при обновлении страницы
контроллер выдаст нам он будет либо либо выключен то есть вот вот этой частью кода у нас идт проверка текущего состояния и выдача соответствующего кода но здесь не забываем поменять пин D1 так хорошо и теперь нам нужно ещё подправить ссылки вот здесь вот D3 Socket 3 точнее и сот 3 of Всё теперь мы буквально за пару секунд адаптировали наш скетч и добавили в него 30 светодиод Теперь давайте подготовим контроллер к прошивке нажимаем reset нажимаем фш отпускаем reset и отпускаем фш и нажимаем в грузить наш скетч не забываем о том что мы
установили IP адрес как э 192 168 135 И опять же на этом IP адресе мы будем искать у нас по идее должно вот после этого блока добавится ещё третий блок с помощью которого мы сможем управлять светодиодом так микроконтроллер подключился при этом точнее мы можем включить seral по и посмотреть сде сбросим контроллер ещё раз мы видим в по у нас идёт подключение подключились к Airport наш IP адрес на котором нам стоит искать страничку нашего сервера и что у нас всё хорошо работает закрываем переходим и можем нажать прош Как видите у нас появился L
3 Теперь мы попробуем поупражняться у нас ещё осталось два светодиода нажимаем кнопку рефреш и теперь у нас отображается три Давайте включим третий светодиод замечательно выключим первый потому что они у нас инверсные и включим всё работает таким образом используя домашнюю wi-fi сеть А вы можете построить в принципе даже несколько таких устройств назначив каждому соответственные IP адреса и дистанционно управлять вашим домашним умным домом.