Перезагрузка фермы майнинг

Устройство удаленной перезагрузки фермы

Так как это сейчас актуально , пришлось сделать механизм для удаленной перезагрузки зависшей фермы к которому можно подключиться с любого компа в той же локальной сети (например с соседней фермы).

Само устройство состоит из платы 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);

}

// Скобку оставить!

}

Источник