initial commit

This commit is contained in:
leca 2025-04-10 00:32:30 +03:00
parent 2c16e6a71d
commit 3cd3051149
4 changed files with 88 additions and 1 deletions

3
.gitignore vendored
View File

@ -32,3 +32,6 @@
*.out
*.app
# Secrets
src/secrets.h

View File

@ -1,3 +1,21 @@
# deadmans_hand
Simple program for ESP-32 to power up my server in case of power cut
Simple program for ESP-32 to power up my server in case of power cut.
## Usage
**/!\ WARNING /!\ The author (leca) is not responsible for any damage you've caused to your hardware with your own hand /!\ WARNING /!\\**
1. Set up the sketch
```bash
git clone https://git.foxarmy.org/leca/deadmans_hand
cd deadmans_hand
cp src/secrets.h.template src/secrets.h
# Open the file with your favorite editor and insert Wi-Fi SSID and password.
nano src/secrets.h
```
If you wish to change GPIO pins, please, do it in ``src/src.info``
Flash the sketch in your board
2. Connect pin STATUS_PIN to anything in your server that has voltage when the server is running (usually some led on the forward panel)
3. Connect pin WAKE_PIN to power pin on your motherboard
4. Connect GND to motherboard's ground.
5. Make sure that the board has some power supply (usually you want to use 18650 Li-ion batteries) to be online when the power is down.

8
src/secrets.h.template Normal file
View File

@ -0,0 +1,8 @@
/*
* This is a template for secrets.
* Copy this file as secrets.h and
* adjust it to your needs
*/
#define WIFI_SSID "your_wifi_ssid"
#define WIFI_PASSWORD "your_wifi_password"

58
src/src.ino Normal file
View File

@ -0,0 +1,58 @@
#include "secrets.h"
#if defined(ARDUINO_ARCH_ESP32) || defined(ESP32)
# include <WiFi.h>
#elif defined(ARDUINO_ARCH_ESP8266) || defined(ESP8266)
# include <ESP8266WiFi.h>
#else
# error "Unsupported board, please contact the developer"
#endif
#define STATUS_PIN D5
#define WAKE_PIN D6
static bool wifi_lost = false;
static bool server_is_off = false;
void setup() {
Serial.begin(9600);
WiFi.mode(WIFI_STA);
WiFi.disconnect();
Serial.println("Connecting to a Wi-Fi network");
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() == WL_IDLE_STATUS) delay(100);
Serial.println("Wi-Fi connected");
pinMode(STATUS_PIN, INPUT);
pinMode(WAKE_PIN, OUTPUT);
}
void loop() {
wifi_lost = WiFi.status() == 1 || WiFi.status() == 5 || WiFi.status() == 7;
server_is_off = digitalRead(STATUS_PIN) != HIGH;
Serial.println("Checking the status");
Serial.print("WiFi lost: ");
Serial.println(wifi_lost? "true" : "false");
Serial.print("Server is off: ");
Serial.println(server_is_off? "true" : "false");
if (wifi_lost && server_is_off) {
Serial.println("The power seems to be down. Waiting for the power to restore and send turn on signal to the server.");
// Wait untill Wi-Fi is available (i.e. the power is back)
while (WiFi.status() != WL_CONNECTED) delay(100);
digitalWrite(WAKE_PIN, HIGH);
delay(100);
digitalWrite(WAKE_PIN, LOW);
Serial.println("Signal sent");
} else {
Serial.println("Everyting's okay, sleeping 5 secs");
}
delay(5000);
}