Categories
DIY

ESP

Пока окружающее народонаселение не подбухивает, автор тоже не употребляет алкоголь, но странные мысли не перестают посещать воспаленный мозг. В этот раз появилась идея вайфаизации уже всего обиталища, и, так как в убежище уже существует 3 куска светодиодной ленты, которыми можно управлять, не вторгаясь в некоторое подобие электрических проводок многоквартирных холуп.

А если в башне по***нь, то что **ень, что ни **ень.

Ленинград

Пока окружающее народонаселение не подбухивает, автор тоже не употребляет алкоголь, но странные мысли не перестают посещать воспаленный мозг. В этот раз появилась идея вайфаизации уже всего обиталища, и, так как в убежище уже существует 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. И, собственно, все. Собираем все это на силовой проводке, и радуемся.

Неплохой корпус получился из распределительной коробки, правда, с эстетикой у этой коробки явные проблемы.

Как это выглядит:

И веб-интерфейс:

What’s your Reaction?
+1
0
+1
0
+1
0

By root

In Unix-like computer OSes (such as Linux), root is the conventional name of the user who has all rights or permissions (to all files and programs) in all modes (single- or multi-user). Alternative names include baron in BeOS and avatar on some Unix variants. BSD often provides a toor ("root" written backward) account in addition to a root account.
Regardless of the name, the superuser always has a user ID of 0. The root user can do many things an ordinary user cannot, such as changing the ownership of files and binding to network ports numbered below 1024.