// Include the esp wifi lib #include // Include the mqtt client lib #include // Include the settings.h. #include "window_control_settings.h" #define buzzer 2 #define motorForward 1 #define motorReverse 0 #define sense 3 WiFiClient espClient; PubSubClient client; void setup() { setup_wifi(); client.setClient(espClient); client.setServer(MQTT_SERVER, MQTT_PORT); client.setCallback(callback); // Initalize some pins! // Initalize buzzer pin pinMode(buzzer, OUTPUT); digitalWrite(buzzer, LOW); // Initalize motor directions pinMode(motorReverse, OUTPUT); digitalWrite(motorReverse, LOW); pinMode(motorForward, OUTPUT); digitalWrite(motorForward, LOW); // Initalize Sense Pin pinMode(sense, INPUT); // use "digitalRead(sense);" to read } void setup_wifi() { delay(10); // Set our hostname WiFi.hostname("ESP-" WINDOW_NAME); // Connect to the wifi! WiFi.begin(WIFI_SSID, WIFI_PASS); // For as long as we're not connected.. while (WiFi.status() != WL_CONNECTED) { delay(950); // Wait... tone(buzzer, 1200, 50); // Beep... //Serial.println("Not yet connected.. Waiting 1s to check again.."); } //Serial.println(""); //Serial.println("WiFi connected"); //Serial.println("IP address: "); //Serial.println(WiFi.localIP()); } void reconnect() { // Loop until we're reconnected while (!client.connected()) { //Serial.print("Attempting MQTT connection..."); // Attempt to connect if (client.connect("ESP8266Client", MQTT_USER, MQTT_PASS)) { //Serial.println("connected"); ; } else { //Serial.print("failed, rc="); //Serial.print(client.state()); //Serial.println(" try again in 5 seconds"); // Wait 5 seconds before retrying delay(5000); } } } void callback(char* topic, byte* message, unsigned int length) { //Serial.print("Message arrived on topic: "); //Serial.print(topic); //Serial.print(". Message: "); String messageString; // Reconstruct a string from the mqtt contents. for (int i = 0; i < length; i++) { messageString += (char)message[i]; } if (String(topic) == MQTT_ROOT "/request_state") { //Serial.print("Changing output to "); if(messageString == "open"){ //Serial.println("Opening window."); digitalWrite(motorForward, HIGH); digitalWrite(motorReverse, LOW); tone(buzzer, 2000, 200); delay(200); tone(buzzer, 2000, 200); delay(200); tone(buzzer, 2000, 200); delay(200); client.publish(MQTT_ROOT "/current_state", "open", true); } else if(messageString == "close"){ //Serial.println("Closing window"); digitalWrite(motorForward, LOW); digitalWrite(motorReverse, HIGH); tone(buzzer, 2000, 200); delay(200); tone(buzzer, 2000, 200); delay(200); tone(buzzer, 2000, 200); delay(200); client.publish(MQTT_ROOT "/current_state", "close", true); } } } void loop() { // If we ever disconnect, reconnect. if (!client.connected()) { reconnect(); } // Run the client loop client.loop(); client.subscribe(MQTT_ROOT "/request_state"); delay(1000); }