#include #include #include #include "./local.h" // defines ssid and password WiFiClient wifiClient; PubSubClient mqttClient(wifiClient); #define BUTTON_PIN 14 #define LED_PIN 2 long lastMsg = 0; long lastButtonState = LOW; // High/1 by default, Low/0 when pressed // Reconnect to the wifi / MQTT if required void reconnect() { if (WiFi.status() != WL_CONNECTED) { WiFi.begin(ssid, password); } while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("waiting for wifi, status="); Serial.println(WiFi.status()); } while (!mqttClient.connected()) { Serial.println("attempting mqtt connection..."); mqttClient.setServer(mqtt_broker, mqtt_port); if (!mqttClient.connect("Bark-Button")) { Serial.print("failed to connect to mqtt, rc="); Serial.println(mqttClient.state()); delay(2000); } } } // On button press, send a message to the MQTT broker void buttonPress() { char buf[40]; reconnect(); sprintf(buf, "barks/%d.mp3", random(n_bark_sounds)); mqttClient.publish(mqtt_topic, buf); mqttClient.publish("time-since-last/reset", "bark"); mqttClient.publish("display/g1/windowled/colour", "255,0,255"); mqttClient.publish("display/g1/windowled/text", "arf! arf! wrrufff!"); } void setup() { Serial.begin(9600); reconnect(); pinMode(BUTTON_PIN, INPUT_PULLUP); pinMode(LED_PIN, OUTPUT); randomSeed(analogRead(0)); } // Wait for button press void loop() { mqttClient.loop(); int buttonState = digitalRead(BUTTON_PIN); if (buttonState == LOW) { digitalWrite(LED_PIN, HIGH); buttonPress(); delay(3000); digitalWrite(LED_PIN, LOW); } lastButtonState = buttonState; }