Something went wrong. Try again.
Something went wrong. Try again.
1.7 kB · 72 lines
C++
at main
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273#include <WiFi.h>#include <PubSubClient.h>#include <Arduino.h>#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 requiredvoid 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 brokervoid 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 pressvoid loop() { mqttClient.loop();
int buttonState = digitalRead(BUTTON_PIN); if (buttonState == LOW) { digitalWrite(LED_PIN, HIGH); buttonPress(); delay(3000); digitalWrite(LED_PIN, LOW); } lastButtonState = buttonState;
}