Пока окружающее народонаселение не подбухивает, автор тоже не употребляет алкоголь, но странные мысли не перестают посещать воспаленный мозг. В этот раз появилась идея вайфаизации уже всего обиталища, и, так как в убежище уже существует 3 куска светодиодной ленты, которыми можно управлять, не вторгаясь в некоторое подобие электрических проводок многоквартирных холуп.
Скоуп был обозначен следующими характеристиками – необходимо включать свет по Wi-Fi, потенциальное расширение дополнительными датчика, ну и некоторый веб-интерфейс, который помог бы усправлять всем этим хозяйством.
Собственно, предыдущие эксперименты с Raspberry Pi родили своим результатом некую веб-морду и некие навыки для работы с этим. Для основной шилды я решил взять ESP8266 Cloud Witty. Плюс тут очевиден – эта штуковина умеет питаться от 5 вольт, имеет стандартное расстояние между пинами, что дает нам адекватную возможность для подключения всего этого счастья.
А еще одно немаловажное открытие – это то, что IDE в данном случае будет Arduino.
Итак, приступим.
Для начала нам необходимо добавить доп. репозиторий к нашей Arduino (это, конечно, при учете, что у нас есть ESP8266 Cloud Witty и реле). Делается это добавлением в пункт Additional Boards Manager URLs вот этот адрес http://arduino.esp8266.com/stable/package_esp8266com_index.json
После чего у нас появляется возможность работать с нашей удивительной платой. Итак, внешние сенсоры можно использовать 3.3 Вольта, поэтому вопрос с реле более чем актуален. Как показала практика, китайские механические реле вполне себе срабатывали. Еще один интересный момент – была попытка использования твердотельных реле Omron. Ничего плохого нельзя сказать, кроме того, что необходимо адаптировать под него код.
Итак, подключаем всю эту систему в ардуино IDE, и подсовываем следующий код:
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
// GPIO, куда подцелено реле
uint8_t PowerPin = 2;
bool PowerOn = false;
// Имя хоста
const char* host = "Hostname";
// Вместо звездочек свои параметры WiFi сети
const char* ssid = "SSID";
const char* password = "Password";
ESP8266WebServer server(80);
void setup() {
// Последовательный порт для отладки
Serial.begin(115200);
Serial.printf("\n\nFree memory %d\n",ESP.getFreeHeap());
// Инициализация выхода реле
pinMode(PowerPin , OUTPUT);
digitalWrite(PowerPin , PowerOn);
// Подлючение к WiFi
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
if(WiFi.waitForConnectResult() == WL_CONNECTED){
// Запуск WEB-сервера
MDNS.begin(host);
server.on ( "/", HTTP_handleRoot );
server.onNotFound ( HTTP_handleRoot );
server.begin();
Serial.printf( "HTTP server ok! Open http://%s.local in your browser\n", host);
}
else {
Serial.printf("WiFi started is fail");
}
}
void loop() {
server.handleClient();
delay(50);
}
/*
*/
void HTTP_handleRoot(void) {
bool stat = false;
if( server.hasArg("stat") ){
if( strncmp(server.arg("stat").c_str(),"1",1) == 0 )stat = true;
}
else {
stat = PowerOn;
}
String out = "";
out =
"<html>\
<head>\
<meta charset=\"utf-8\" />\
<title>WiFi kitchen</title>\
<style>\
body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
</style>\
</head>\
<body>\
<h1>Home Control</h1>\n";
if( stat ){
out+="\
<h2>Status: On</br>\
<a href=\"/?stat=0\">Turn Off</a></h2>\
";
}
else {
out+="\
<h2>Status: Off</br>\
<a href=\"/?stat=1\">Turn On</a><h2>\
";
}
out+= "\
</body>\
</html>";
server.send ( 200, "text/html", out );
if( stat != PowerOn ){
PowerOn = stat;
digitalWrite(PowerPin , PowerOn);
if( PowerOn )Serial.println("Power is ON");
else Serial.println("Power is OFF");
}
}
По итогам загрузки, мы должны подключиться на это удивительное устройство посредством WiFi по адресу, который забираем с роутера – и, вуаля, в теории должны наблюдать интерфейс полученного устройства. Код взят для примера откуда-то, но при этом оно работает.
После этого упражнения собираем все это, подключаем реле. В данном коде раскладка такая – DC+ – VCC, DC- GRD, GPIO2 – Data. И, собственно, все. Собираем все это на силовой проводке, и радуемся.
Неплохой корпус получился из распределительной коробки, правда, с эстетикой у этой коробки явные проблемы.
Как это выглядит:
И веб-интерфейс: