From cba09e7499b2d0ce8a6a07bbd04a9820d026bac3 Mon Sep 17 00:00:00 2001 From: ladyada Date: Mon, 8 Aug 2016 20:13:27 -0400 Subject: [PATCH] add a demo too! --- .../adafruitio_anon_time_esp8266.ino | 122 ++++++++++++++++++ 1 file changed, 122 insertions(+) create mode 100644 examples/adafruitio_anon_time_esp8266/adafruitio_anon_time_esp8266.ino diff --git a/examples/adafruitio_anon_time_esp8266/adafruitio_anon_time_esp8266.ino b/examples/adafruitio_anon_time_esp8266/adafruitio_anon_time_esp8266.ino new file mode 100644 index 0000000..8175895 --- /dev/null +++ b/examples/adafruitio_anon_time_esp8266/adafruitio_anon_time_esp8266.ino @@ -0,0 +1,122 @@ +/*************************************************** + Adafruit MQTT Library ESP8266 Adafruit IO Anonymous Time Query + + Must use the latest version of ESP8266 Arduino from: + https://github.com/esp8266/Arduino + + Works great with Adafruit's Huzzah ESP board & Feather + ----> https://www.adafruit.com/product/2471 + ----> https://www.adafruit.com/products/2821 + + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + Written by Adafruit Industries. + MIT license, all text above must be included in any redistribution + ****************************************************/ +#include +#include "Adafruit_MQTT.h" +#include "Adafruit_MQTT_Client.h" + +/************************* WiFi Access Point *********************************/ +#define WLAN_SSID "network" +#define WLAN_PASS "password" + +/************************* Adafruit.io Setup *********************************/ +#define AIO_SERVER "io.adafruit.com" +#define AIO_SERVERPORT 8883 + +WiFiClientSecure client; +Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT); + +Adafruit_MQTT_Subscribe timefeed = Adafruit_MQTT_Subscribe(&mqtt, "time/seconds"); + +// set timezone offset from UTC +int timeZone = -4; // UTC - 4 eastern daylight time (nyc) +int interval = 4; // trigger every X hours + +int last_min = -1; + +void timecallback(uint32_t current) { + // adjust to local time zone + current += (timeZone * 60 * 60); + int curr_hour = (current / 60 / 60) % 24; + int curr_min = (current / 60 ) % 60; + int curr_sec = (current) % 60; + + Serial.print("Time: "); + Serial.print(curr_hour); Serial.print(':'); + Serial.print(curr_min); Serial.print(':'); + Serial.println(curr_sec); + + // only trigger on minute change + if(curr_min != last_min) { + last_min = curr_min; + + Serial.println("This will print out every minute!"); + } +} + +void setup() { + + Serial.begin(115200); + delay(10); + + Serial.print(F("\nAdafruit IO anonymous Time Demo")); + + WiFi.begin(WLAN_SSID, WLAN_PASS); + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print(F(".")); + } + Serial.println(F(" WiFi connected.")); + + timefeed.setCallback(timecallback); + mqtt.subscribe(&timefeed); + +} + +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(); + + // wait 10 seconds for subscription messages + // since we have no other tasks in this example. + mqtt.processPackets(10000); + + // keep the connection alive + mqtt.ping(); + +} + +// 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; + } + + Serial.print("Connecting to MQTT... "); + + uint8_t retries = 3; + while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected + Serial.println(mqtt.connectErrorString(ret)); + Serial.println("Retrying MQTT connection in 5 seconds..."); + mqtt.disconnect(); + delay(5000); // wait 5 seconds + retries--; + if (retries == 0) { + // basically die and wait for WDT to reset me + while (1); + } + } + + Serial.println("MQTT Connected!"); +} \ No newline at end of file