Перезагрузка фермы майнинг
Устройство удаленной перезагрузки фермы
Так как это сейчас актуально , пришлось сделать механизм для удаленной перезагрузки зависшей фермы к которому можно подключиться с любого компа в той же локальной сети (например с соседней фермы).
Само устройство состоит из платы Wemos D1 и релейного модуля на 4 реле , хотя количество реле можно увеличить до 12 , по сути ограничение только в количестве выходов GPIO на плате Wemos.
Платы вставляються друг в друга (релейный модуль сверху Wemos) , нормально разомкнутые контакты реле подключаються к материнской плате фермы паралельно кнопке включения (PwrSw).
Выходы GPIO для такого релейного модуля будут соответствовать:
1 реле — GPIO 13
2 реле — GPIO 12
3 реле — GPIO 14
4 реле — GPIO 4
Вообще включать\выключать с помощью него можно все что угодно — свет,розетки,чайники,вентиляторы и т.п. в пределах 10 ампер на одно реле.
IP-адрес который получило устройство можно узнать любым сканером сети или зайдя на роутер в раздел «Клиенты DHCP» и советую сопоставить мак-адрес устройства какому нибудь ip-адресу что бы оно все время получало один и тот же айпишник.
Собственно сам скеч:
#include <ESP8266WiFi.h>
#include <ESP8266mDNS.h>
#include <ESP8266WebServer.h>
#include <WiFiClient.h>
// GPIO, куда подключено реле
int rele1 = 13;
int rele2 = 12;
int rele3 = 14;
int rele4 = 4;
bool PowerRele1 = true; //Состояние реле после подачи питания
bool PowerRele2 = true;
bool PowerRele3 = true;
bool PowerRele4 = true;
// Имя хоста
const char* host = «REMOTE2»;
// параметры вашей WiFi сети. (Те что всегда вводите на тел. и планшете)
const char* ssid = «Имя сети WiFi»;
const char* password = «Пароль от сети WiFi»;
ESP8266WebServer server(80);
void setup() {
pinMode(rele1 , OUTPUT);
digitalWrite(rele1 , PowerRele1);
pinMode(rele2 , OUTPUT);
digitalWrite(rele2 , PowerRele2);
pinMode(rele3 , OUTPUT);
digitalWrite(rele3 , PowerRele3);
pinMode(rele4 , OUTPUT);
digitalWrite(rele4 , PowerRele4);
// Подлючение к WiFi
WiFi.mode(WIFI_AP_STA);
WiFi.begin(ssid, password);
if(WiFi.waitForConnectResult() == WL_CONNECTED){
// Запускаем сервер
MDNS.begin(host);
server.on ( «/», HTTP_handleRoot );
server.onNotFound ( HTTP_handleRoot );
server.begin();
}
}
void loop() {
server.handleClient();
delay(50);
}
void HTTP_handleRoot(void) {
bool statrele1 = false;
bool statrele2 = false;
bool statrele3 = false;
bool statrele4 = false;
// Реле 1
if( server.hasArg("statrele1″) ){
if( strncmp(server.arg("statrele1").c_str(),"1",1) == 0 )
statrele1 = true;
}
else {
statrele1 = PowerRele1;
}
// Реле 2
if( server.hasArg("statrele2″) ){
if( strncmp(server.arg("statrele2").c_str(),"1",1) == 0 )
statrele2 = true;
}
else {
statrele2 = PowerRele2;
}
// Реле 3
if( server.hasArg("statrele3″) ){
if( strncmp(server.arg("statrele3").c_str(),"1",1) == 0 )
statrele3 = true;
}
else {
statrele3 = PowerRele3;
}
// Реле 4
if( server.hasArg("statrele4″) ){
if( strncmp(server.arg("statrele4").c_str(),"1",1) == 0 )
statrele4 = true;
}
else {
statrele4 = PowerRele4;
}
// Формируем HTML страницу
String out = "";
out =
"<html>\
<head>\
<meta charset=\"utf-8\" />\
<title>ФЕРМЫ</title>\
<style>\
body { background-color: #cccccc; font-family: Arial, Helvetica, Sans-Serif; Color: #000088; }\
</style>\
</head>\
<body>\
";
// Для реле 1
if( statrele1 ){
out+="\
<hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele1=0\">Перезагрузить 1 ферму</a></h3>\
";
}
else {
out+="\
<hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele1=1\">Перезагрузить 1 ферму</a></h3>\
";
}
// Для реле 2
if( statrele2 ){
out+="\
<hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele2=0\">Перезагрузить 2 ферму</a></h3>\
";
}
else {
out+="\
<hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele2=1\">Перезагрузить 2 ферму</a></h3>\
";
}
// Для реле 3
if( statrele3 ){
out+="\
<hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele3=0\">Перезагрузить 3 ферму</a></h3>\
";
}
else {
out+="\
<hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele3=1\">Перезагрузить 3 ферму</a></h3>\
";
}
// Для реле 4
if( statrele4 ){
out+="\
<hr width=100 size=30 align=left color=red><h2><a href=\"/?statrele4=0\">Перезагрузить 4 ферму</a></h3>\
";
}
else {
out+="\
<hr width=100 size=30 align=left color=green><h2><a href=\"/?statrele4=1\">Перезагрузить 4 ферму</a></h3>\
«;
}
// Общее
out+= «\
</body>\
</html>»;
server.send ( 200, «text/html», out );
// Для реле 1
if( statrele1 != PowerRele1 ){
PowerRele1 = statrele1;
digitalWrite(rele1 , PowerRele1);
}
// Для реле 2
if( statrele2 != PowerRele2 ){
PowerRele2 = statrele2;
digitalWrite(rele2 , PowerRele2);
}
// Для реле 3
if( statrele3 != PowerRele3 ){
PowerRele3 = statrele3;
digitalWrite(rele3 , PowerRele3);
}
// Для реле 4
if( statrele4 != PowerRele4 ){
PowerRele4 = statrele4;
digitalWrite(rele4 , PowerRele4);
}
// Скобку оставить!
}