Here's the Arduino Yun sketch I am using for the driveway sensors connected to the Dakota Wireless unit:
Note I have not yet added the web server like I did above, but wouldn't be too hard to modify.
Note I have not yet added the web server like I did above, but wouldn't be too hard to modify.
Code:
/*************************************************** Adafruit MQTT Library Arduino Yun Example Make sure your Arduino Yun is connected to a WiFi access point which has internet access. Also note this sketch uses the Console class for debug output so make sure to connect to the Yun over WiFi and open the serial monitor to see the console output. Works great with the Arduino Yun: ----> https://www.adafruit.com/products/1498 Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! Written by Tony DiCola for Adafruit Industries. MIT license, all text above must be included in any redistribution ****************************************************/ #include <Bridge.h> #include <Console.h> #include <YunClient.h> #include "Adafruit_MQTT.h" #include "Adafruit_MQTT_Client.h" /************************* Adafruit.io Setup *********************************/ #define AIO_SERVER "MQTT_SERVER_REPLACE" #define AIO_SERVERPORT 1883 #define AIO_USERNAME "optional_username_replace" #define AIO_KEY "optional_password_replace" #define AIO_FEEDNAME "/raw/arduino01/driveway" /************ Global State (you don't need to change this!) ******************/ // Create a YunClient instance to communicate using the Yun's brighe & Linux OS. YunClient client; // Store the MQTT server, username, and password in flash memory. // This is required for using the Adafruit MQTT library. const char MQTT_SERVER[] PROGMEM = AIO_SERVER; const char MQTT_USERNAME[] PROGMEM = AIO_USERNAME; const char MQTT_PASSWORD[] PROGMEM = AIO_KEY; const char MQTT_FEEDNAME[] PROGMEM = AIO_FEEDNAME; // Setup the MQTT client class by passing in the WiFi client and MQTT server and login details. Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, AIO_SERVERPORT, MQTT_USERNAME, MQTT_PASSWORD); /****************************** Feeds ***************************************/ const char VEHICLESENSOR_FEED[] PROGMEM = AIO_FEEDNAME "/vehicle"; const char MOTIONSENSOR_FEED[] PROGMEM = AIO_FEEDNAME "/motion"; const char MAILBOXSENSOR_FEED[] PROGMEM = AIO_FEEDNAME "/mailbox"; // Adafruit_MQTT_Publish photocell = Adafruit_MQTT_Publish(&mqtt, PHOTOCELL_FEED); Adafruit_MQTT_Publish vehicleSensor = Adafruit_MQTT_Publish(&mqtt, VEHICLESENSOR_FEED); Adafruit_MQTT_Publish motionSensor = Adafruit_MQTT_Publish(&mqtt, MOTIONSENSOR_FEED); Adafruit_MQTT_Publish mailboxSensor = Adafruit_MQTT_Publish(&mqtt, MAILBOXSENSOR_FEED); // Setup a feed called 'onoff' for subscribing to changes. // const char ONOFF_FEED[] PROGMEM = AIO_USERNAME "/feeds/onoff"; // Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, ONOFF_FEED); /*************************** Digital Input Pins *****************************/ int VehicleSensor_Pin = 8; int MotionSensor_Pin = 9; int MailboxSensor_Pin = 10; /*************************** Sketch Code ************************************/ void setup() { Bridge.begin(); Console.begin(); Console.println(F("MQTT Server")); pinMode(VehicleSensor_Pin, INPUT); pinMode(MotionSensor_Pin, INPUT); pinMode(MailboxSensor_Pin, INPUT); digitalWrite(VehicleSensor_Pin, LOW); digitalWrite(MotionSensor_Pin, LOW); digitalWrite(MailboxSensor_Pin, LOW); // Setup MQTT subscription for onoff feed. // mqtt.subscribe(&onoffbutton); } // uint32_t x=0; uint32_t vehicleSensorSet = 0; uint32_t motionSensorSet = 0; uint32_t mailboxSensorSet = 0; void loop() { // Ensure the connection to the MQTT server is alive (this will make the first // connection and automatically reconnect when disconnected). See the MQTT_connect // function definition further below. MQTT_connect(); if (digitalRead(VehicleSensor_Pin) == HIGH && vehicleSensorSet == 0) { Serial.println ("Vehicle Sensor Trigged"); vehicleSensorSet = 1; if (! vehicleSensor.publish("1")) { Console.println(F("Failed")); } else { Console.println(F("OK!")); } } if (digitalRead(VehicleSensor_Pin) == LOW && vehicleSensorSet == 1) { vehicleSensorSet = 0; if (! vehicleSensor.publish("0")) { Console.println(F("Failed")); } else { Console.println(F("OK!")); } } if (digitalRead(MotionSensor_Pin) == HIGH && motionSensorSet == 0) { Serial.println ("Motion Sensor Trigged"); motionSensorSet = 1; if (! motionSensor.publish("1")) { Console.println(F("Failed")); } else { Console.println(F("OK!")); } } if (digitalRead(MotionSensor_Pin) == LOW && motionSensorSet == 1) { motionSensorSet = 0; if (! motionSensor.publish("0")) { Console.println(F("Failed")); } else { Console.println(F("OK!")); } } if (digitalRead(MailboxSensor_Pin) == HIGH && mailboxSensorSet == 0) { Serial.println ("Mailbox Sensor Trigged"); mailboxSensorSet = 1; if (! mailboxSensor.publish("1")) { Console.println(F("Failed")); } else { Console.println(F("OK!")); } } if (digitalRead(MailboxSensor_Pin) == LOW && mailboxSensorSet == 1) { mailboxSensorSet = 0; if (! mailboxSensor.publish("0")) { Console.println(F("Failed")); } else { Console.println(F("OK!")); } } // ping the server to keep the mqtt connection alive if(! mqtt.ping()) { Console.println(F("MQTT Ping failed.")); } delay(200); } // Function to connect and reconnect as necessary to the MQTT server. // Should be called in the loop function and it will take care if connecting. void MQTT_connect() { int8_t ret; // Stop if already connected. if (mqtt.connected()) { return; } Console.print("Connecting to MQTT server" + String(AIO_SERVER) + " on port " + String(AIO_SERVERPORT) + "... "); while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected Console.println(mqtt.connectErrorString(ret)); Console.println("Retrying MQTT connection in 5 seconds..."); mqtt.disconnect(); delay(5000); // wait 5 seconds } Console.println("MQTT Connected!"); }
Comment