#include #include #include // https://github.com/tzapu/WiFiManager #include WiFiManager wm; WiFiUDP Udp; #define BUTTON_PIN D1 #define ALLOW_RST_PIN D0 #define LED_PIN D2 ADC_MODE(ADC_VCC); void sendEmergencyBroadcast() { Serial.println("emergency-button"); Udp.begin(31337); Udp.beginPacket("255.255.255.255", 31337); Udp.write("emergency-button\n"); Udp.endPacket(); } void sendVCC() { char numberArray[20]; itoa(ESP.getVcc(), numberArray, 10); Udp.begin(31337); Udp.beginPacket("255.255.255.255", 31337); Udp.write("button-vcc "); Udp.write(numberArray); Udp.write("\n"); Udp.endPacket(); } void setup() { WiFi.mode(WIFI_STA); Serial.begin(115200); wm.setConnectTimeout(60); //Autoconnect to Wifi (or do soft AP) bool res; res = wm.autoConnect(); if(!res) { Serial.println("Failed to connect"); } else { Serial.println("connected..."); } pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, 0); pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(ALLOW_RST_PIN, OUTPUT); digitalWrite(ALLOW_RST_PIN, 0); sendEmergencyBroadcast(); //Start webPortal std::vector menu = {"wifi","info","param","sep","erase", "restart"}; wm.setMenu(menu); wm.startWebPortal(); ArduinoOTA.begin(); // We don't care about incoming traffic WiFi.setSleepMode(WIFI_LIGHT_SLEEP, 3); // Automatic Light Sleep, DTIM listen interval = 3 } const unsigned long AWAKE_SECONDS = 30; static uint32_t millis_last_reset = 0; void loop() { wm.process(); ArduinoOTA.handle(); if (!digitalRead(BUTTON_PIN)) { sendEmergencyBroadcast(); while (!digitalRead(BUTTON_PIN)) { // now wait for them to release the pushbutton delay(10); } millis_last_reset = millis(); } //Fadeout effect over approx 25 secs analogWrite(LED_PIN, ((millis()-millis_last_reset)/100)); if (millis()-millis_last_reset > AWAKE_SECONDS * 1000) { sendVCC(); Serial.println("Going to sleep"); digitalWrite(LED_PIN, 1); digitalWrite(ALLOW_RST_PIN, 1); delay(500); ESP.deepSleep(0); } }