wi-fi модуль NodeMcu v3 с чипом ESP8266 (ESP-12e)(Удаленное управление нагрузкой)

Используя модуль NodeMcu v3 с чипом ESP8266 можно управлять устройствами из Интернета (так же локально), а точнее подключить к выходам модуля несколько реле которые будут включать или отключать нагрузку.

Если Вы не знаете как прошить модуль NodeMcu v3, то ознакомьтесь со следующей статьей wi-fi модуль NodeMcu v3 с чипом ESP8266 (ESP-12e)(Arduino IDE).

Загрузите следующий скетч при помощи Arduino IDE:

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
MDNSResponder mdns;
// впишите сюда данные, соответствующие вашей сети:
const char* ssid = "логин";
const char* password = "пароль";
ESP8266WebServer server(81);
 
int d0,d1,d2,d3,d4;
String webPage = "";
String d = "<tr><td align='center'>Состояние выходов</td><td align='center'>";
String dd = "</td><td align='center'><a href=\"obn\"><button>Обновить</button></a></td></html>";
 
void setup(void){
       webPage += "<!DOCTYPE HTML>";
       webPage += "<html>";
       webPage += "<meta charset='utf-8'><meta name='viewport' content='width=480, user-scalable=no' />";
     //webPage += "<meta http-equiv='Refresh' content='5; URL=/obn' />"; // автоматическое обновление страницы каждые 5 секунд
       webPage += "<TABLE align='center' width='350' BORDER='1' cellspacing='0' cellpadding='5'>";
       webPage += "<td align='center'>Номер выхода</td><td align='center'>Включить</td><td align='center'>Выключить</td>";
 
       webPage += "<tr><td align='center'>D0</td><td align='center'><a href=\"socket16On\"><button>ON</button></a></td>";
       webPage += "<td align='center'><a href=\"socket16Off\"><button>OFF</button></a></td>";
 
       webPage += "<tr><td align='center'>D1</td><td align='center'><a href=\"socket5On\"><button>ON</button></a></td>";
       webPage += "<td align='center'><a href=\"socket5Off\"><button>OFF</button></a></td>";
 
       webPage += "<tr><td align='center'>D2</td><td align='center'><a href=\"socket4On\"><button>ON</button></a></td>";
       webPage += "<td align='center'><a href=\"socket4Off\"><button>OFF</button></a></td>";
 
       webPage += "<tr><td align='center'>D3</td><td align='center'><a href=\"socket0On\"><button>ON</button></a></td>";
       webPage += "<td align='center'><a href=\"socket0Off\"><button>OFF</button></a></td>";
 
       webPage += "<tr><td align='center'>D4</td><td align='center'><a href=\"socket2On\"><button>ON</button></a></td>";
       webPage += "<td align='center'><a href=\"socket2Off\"><button>OFF</button></a></td>";
 
  pinMode(16, OUTPUT);digitalWrite(16, LOW);
  pinMode(5, OUTPUT);digitalWrite(5, LOW);
  pinMode(4, OUTPUT);digitalWrite(4, LOW);
  pinMode(0, OUTPUT);digitalWrite(0, LOW);
  pinMode(2, OUTPUT);digitalWrite(2, LOW);
 
  delay(1000);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");
 
  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");}
 
  server.on("/", [](){server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+dd);});
  server.on("/obn", [](){server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+dd);});
  server.on("/socket16On", [](){d0=1;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+dd);digitalWrite(16, HIGH);delay(300);});
  server.on("/socket16Off", [](){d0=0;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+dd);digitalWrite(16, LOW);delay(300);});
 
  server.on("/socket5On", [](){d1=1;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+dd);digitalWrite(5, HIGH);delay(300);});
  server.on("/socket5Off", [](){d1=0;server.send(200, "text/html",webPage+d+d0+d1+d2+d3+d4+dd);digitalWrite(5, LOW);delay(300);});
 
  server.on("/socket4On", [](){d2=1;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+dd);digitalWrite(4, HIGH);delay(300);});
  server.on("/socket4Off", [](){d2=0;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+dd);digitalWrite(4, LOW);delay(300);});
 
  server.on("/socket0On", [](){d3=1;server.send(200, "text/html",  webPage+d+d0+d1+d2+d3+d4+dd);digitalWrite(0, HIGH);delay(300);});
  server.on("/socket0Off", [](){d3=0;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+dd);digitalWrite(0, LOW);delay(300);});
 
  server.on("/socket2On", [](){d4=1;server.send(200, "text/html",  webPage+d+d0+d1+d2+d3+d4+dd);digitalWrite(2, HIGH);delay(300);});
  server.on("/socket2Off", [](){d4=0;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+dd);digitalWrite(2, LOW);delay(300);});
 
  server.begin();
  Serial.println("HTTP server started");
}
 
void loop(void){
  server.handleClient();
}

После загрузки скетча откройте монитор порта, далее нажмите кнопку «RST», после чего Вы увидите примерно следующее:

Как видно на примере модуль использует IP адрес 192.168.1.65, чтобы управлять устройствами из Интернета, Вам необходимо выполнить переадресацию портов на маршрутизаторе, а так же указать в настройках маршрутизатора, чтобы IP адрес модуля был постоянный.

Как видно на примерах, IP адрес 192.168.1.65 был помечен как постоянный, а при переадресации портов использует порт 81. По умолчанию используется порт 80, но так как этот порт был занят используется порт 81.

Теперь можно использовать можно использовать WEB страницу для управления нагрузкой в локальной сети, для этого введите в строке запроса браузера IP адрес:

http://192.168.1.65:81

(Если Вы используете порт 80, то указывать его в строке запроса не нужно)

 
WEB страница позволяет управлять выходами D0…D4, а так же выводит состояние выходов. При желании можно добавить еще несколько выходов для управления нагрузкой.

Для управления платой через Интернет необходимо использовать статический внешний IP, а в строке запроса браузера указывать следующее:

http://xxx.xxx.xxx.xxx:81

Где xxx.xxx.xxx.xxx Ваш внешний IP адрес.

Подключение цифрового датчика температуры 18B20

Следующий скетч аналогичен первому, при помощи его так же можно управлять нагрузкой используя цифровые выходы D0…D4 и дополнительно можно удаленно измерять температуру при помощи цифрового датчика 18B20 который подключен в цифровому входу D5.

#include <ESP8266WiFi.h>
#include <WiFiClient.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <OneWire.h>
#include <DallasTemperature.h>
OneWire oneWire(14);// вход датчика 18b20
DallasTemperature t(&oneWire);
MDNSResponder mdns;
// впишите сюда данные, соответствующие вашей сети:
const char* ssid = "логин";
const char* password = "пароль";
ESP8266WebServer server(81);
 
int d0,d1,d2,d3,d4;float temper;
String webPage = "";
String d = "<tr><td align='center'>Состояние выходов</td><td align='center'><a href=\"obn\"><button>Обновить</button></a></td><td align='center'>";
String tt= "</td><tr><td align='center'>Температура</td><td align='center'><a href=\"obn\"><button>Обновить</button></a></td><td align='center'>";
String ttt = " &#176;C</td></html>";
 
void setup(void){
       webPage += "<!DOCTYPE HTML>";
       webPage += "<html>";
       webPage += "<meta charset='utf-8'><meta name='viewport' content='width=480, user-scalable=no' />";
       webPage += "<TABLE align='center' width='350' BORDER='1' cellspacing='0' cellpadding='5'>";
     //webPage += "<meta http-equiv='Refresh' content='5; URL=/obn' />"; // автоматическое обновление страницы каждые 5 секунд
       webPage += "<td align='center'>Номер выхода</td><td align='center'>Включить</td><td align='center'>Выключить</td>";
 
       webPage += "<tr><td align='center'>D0</td><td align='center'><a href=\"socket16On\"><button>ON</button></a></td>";
       webPage += "<td align='center'><a href=\"socket16Off\"><button>OFF</button></a></td>";
 
       webPage += "<tr><td align='center'>D1</td><td align='center'><a href=\"socket5On\"><button>ON</button></a></td>";
       webPage += "<td align='center'><a href=\"socket5Off\"><button>OFF</button></a></td>";
 
       webPage += "<tr><td align='center'>D2</td><td align='center'><a href=\"socket4On\"><button>ON</button></a></td>";
       webPage += "<td align='center'><a href=\"socket4Off\"><button>OFF</button></a></td>";
 
       webPage += "<tr><td align='center'>D3</td><td align='center'><a href=\"socket0On\"><button>ON</button></a></td>";
       webPage += "<td align='center'><a href=\"socket0Off\"><button>OFF</button></a></td>";
 
       webPage += "<tr><td align='center'>D4</td><td align='center'><a href=\"socket2On\"><button>ON</button></a></td>";
       webPage += "<td align='center'><a href=\"socket2Off\"><button>OFF</button></a></td>";
 
 
  pinMode(16, OUTPUT);digitalWrite(16, LOW);
  pinMode(5, OUTPUT);digitalWrite(5, LOW);
  pinMode(4, OUTPUT);digitalWrite(4, LOW);
  pinMode(0, OUTPUT);digitalWrite(0, LOW);
  pinMode(2, OUTPUT);digitalWrite(2, LOW);
 
  t.begin();t.setResolution(11);//11 бит 
 
  delay(1000);
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println("");
 
  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");}
 
  server.on("/", [](){server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);});
  server.on("/obn", [](){t.requestTemperatures();temper=t.getTempCByIndex(0);server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);});
 
  server.on("/socket16On", [](){d0=1;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);digitalWrite(16, HIGH);delay(300);});
  server.on("/socket16Off", [](){d0=0;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);digitalWrite(16, LOW);delay(300);});
 
  server.on("/socket5On", [](){d1=1;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);digitalWrite(5, HIGH);delay(300);});
  server.on("/socket5Off", [](){d1=0;server.send(200, "text/html",webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);digitalWrite(5, LOW);delay(300);});
 
  server.on("/socket4On", [](){d2=1;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);digitalWrite(4, HIGH);delay(300);});
  server.on("/socket4Off", [](){d2=0;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);digitalWrite(4, LOW);delay(300);});
 
  server.on("/socket0On", [](){d3=1;server.send(200, "text/html",  webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);digitalWrite(0, HIGH);delay(300);});
  server.on("/socket0Off", [](){d3=0;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);digitalWrite(0, LOW);delay(300);});
 
  server.on("/socket2On", [](){d4=1;server.send(200, "text/html",  webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);digitalWrite(2, HIGH);delay(300);});
  server.on("/socket2Off", [](){d4=0;server.send(200, "text/html", webPage+d+d0+d1+d2+d3+d4+tt+temper+ttt);digitalWrite(2, LOW);delay(300);});
 
  server.begin();
  Serial.println("HTTP server started");
}
 
void loop(void){
  server.handleClient();
}

Для снятия показаний температуры необходимо нажать кнопку «Обновить», wi-fi модуль NodeMcu снимет показания температуры с датчика и выведет их на WEB страницу.


webPage += «<meta http-equiv=’Refresh’ content=’5; URL=/obn’ />»; // автоматическое обновление страницы каждые 5 секунд

Раскомментируйте строчку если необходимо обновлять данные каждые 5 секунд

Добавить комментарий

Войти с помощью: