Files
@ ec770b41aaac
Branch filter:
Location: ChaosStuff/spaceapibutton/SpaceApiButton.ino - annotation
ec770b41aaac
3.9 KiB
text/x-arduino
Let the LED flash, when there is an error and the button restarts
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 | 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae ec770b41aaac 6716eabd0aae 6716eabd0aae 6716eabd0aae ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac ec770b41aaac 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae ec770b41aaac 6716eabd0aae ec770b41aaac 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae ec770b41aaac 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae ec770b41aaac ec770b41aaac 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae 6716eabd0aae | #include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <ESP8266mDNS.h>
#include <ESP8266HTTPUpdateServer.h>
#include <MQTT.h>
#include <ArduinoJson.h>
#include "Config.h"
WiFiClient WiFiclient;
MQTTClient client;
ESP8266WebServer httpServer(80);
ESP8266HTTPUpdateServer httpUpdater;
// Variables will change:
int buttonState; // the current reading from the input pin
int lastButtonState = LOW; // the previous reading from the input pin
int send_trigger = 0;
// the following variables are unsigned longs because the time, measured in
// milliseconds, will quickly become a bigger number than can be stored in an int.
unsigned long lastDebounceTime = 0; // the last time the output pin was toggled
unsigned long debounceDelay = 50; // the debounce time; increase if the output flickers
const size_t bufferSize = JSON_OBJECT_SIZE(4) + 70;
void connect() {
digitalWrite(LED_BUILTIN, HIGH);
Serial.print("\nChecking WiFi...");
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Reboot...");
digitalWrite(D2, LOW);
digitalWrite(LED_BUILTIN, LOW);
delay(250);
digitalWrite(D2, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
delay(250);
digitalWrite(D2, LOW);
digitalWrite(LED_BUILTIN, LOW);
delay(250);
digitalWrite(D2, HIGH);
digitalWrite(LED_BUILTIN, HIGH);
delay(250);
digitalWrite(D2, LOW);
digitalWrite(LED_BUILTIN, LOW);
delay(4000);
ESP.restart();
}
Serial.println("Connected to WiFi!");
Serial.print("Connected to: ");
Serial.println(WiFi.SSID());
Serial.print("IP: ");
Serial.println(WiFi.localIP());
Serial.print("Connecting to MQTT Server...");
while (!client.connect(MQTT_CLIENT_ID, MQTT_USERNAME, MQTT_PASSWORD)) {
Serial.print(".");
digitalWrite(LED_BUILTIN, LOW);
delay(1000);
digitalWrite(LED_BUILTIN, HIGH);
}
Serial.println("\nConnected to MQTT!");
client.publish(MQTT_AVAILABILITY_TOPIC, "online", true, 2);
client.subscribe(MQTT_STATE_TOPIC);
digitalWrite(LED_BUILTIN, LOW);
}
void on_state_received(String &topic, String &payload) {
StaticJsonDocument<bufferSize> jb;
auto error = deserializeJson(jb, payload);
if (not error) {
if (jb["open"]) {
digitalWrite(D2, HIGH);
} else {
digitalWrite(D2, LOW);
}
} else {
digitalWrite(D2, LOW);
}
}
void handle_root() {
char temp[400];
snprintf(temp, 400, "<html><body>This is the spaceapibutton!</body></html>");
httpServer.send(200, "text/html", temp);
}
void setup() {
Serial.begin(115200);
Serial.println("Booting...");
pinMode(LED_BUILTIN, OUTPUT);
pinMode(D2, OUTPUT);
pinMode(D1, INPUT);
WiFi.hostname(HOSTNAME);
WiFi.mode(WIFI_STA);
WiFi.begin(WIFI_SSID, WIFI_PASS);
client.begin(MQTT_SERVER, WiFiclient);
client.setWill(MQTT_AVAILABILITY_TOPIC, "offline", true, 2);
client.onMessage(on_state_received);
connect();
Serial.println("Starting MDNS...");
MDNS.begin(HOSTNAME);
Serial.println("Starting HTTP server...");
httpUpdater.setup(&httpServer);
httpServer.on("/", handle_root);
httpServer.begin();
Serial.println("Adding HTTP server to MDNS...");
MDNS.addService("http", "tcp", 80);
Serial.printf("HTTPUpdateServer ready! Open http://%s.local/update in your browser\n", HOSTNAME);
}
void loop() {
client.loop();
httpServer.handleClient();
MDNS.update();
delay(10);
if (!client.connected()) {
connect();
}
int reading = digitalRead(D1);
if (reading != lastButtonState) {
lastDebounceTime = millis();
}
if ((millis() - lastDebounceTime) > debounceDelay) {
digitalWrite(LED_BUILTIN, LOW);
if (reading != buttonState) {
buttonState = reading;
if (buttonState == HIGH) {
send_trigger = 1;
}
}
}
lastButtonState = reading;
//Serial.println(send_trigger);
if (send_trigger == 1) {
client.publish(MQTT_TRIGGER_TOPIC, "1", false, 2);
send_trigger = 0;
}
digitalWrite(LED_BUILTIN, HIGH);
}
|