Как на этом микроконтроллере 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> <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> <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> <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 адреса и дистанционно управлять вашим домашним умным домом.