From 8c8ba766c39ac144a76ebfa48e2a081a1be91667 Mon Sep 17 00:00:00 2001 From: ladyada Date: Wed, 20 Jan 2016 18:24:23 -0500 Subject: [PATCH] atwinc demo --- examples/mqtt_winc1500/mqtt_winc1500.ino | 165 +++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 examples/mqtt_winc1500/mqtt_winc1500.ino diff --git a/examples/mqtt_winc1500/mqtt_winc1500.ino b/examples/mqtt_winc1500/mqtt_winc1500.ino new file mode 100644 index 0000000..8b1824c --- /dev/null +++ b/examples/mqtt_winc1500/mqtt_winc1500.ino @@ -0,0 +1,165 @@ +/*************************************************** + Adafruit MQTT Library WINC1500 Example + + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + Written by Limor Fried/Ladyada for Adafruit Industries. + MIT license, all text above must be included in any redistribution + ****************************************************/ +#include +#include "Adafruit_MQTT.h" +#include "Adafruit_MQTT_Client.h" +#include + + +/************************* WiFI Setup *****************************/ +#define WINC_CS 8 +#define WINC_IRQ 7 +#define WINC_RST 4 + +Adafruit_WINC1500 WiFi(WINC_CS, WINC_IRQ, WINC_RST); + +char ssid[] = "yournetwork"; // your network SSID (name) +char pass[] = "yourpassword"; // your network password (use for WPA, or use as key for WEP) +int keyIndex = 0; // your network key Index number (needed only for WEP) + +int status = WL_IDLE_STATUS; + +/************************* Adafruit.io Setup *********************************/ + +#define AIO_SERVER "io.adafruit.com" +#define AIO_SERVERPORT 1883 +#define AIO_USERNAME "adafruit2" +#define AIO_KEY "3e148db54389a8b7c3efa9ddd2cd388317bcbf58" + +/************ Global State (you don't need to change this!) ******************/ + +//Set up the wifi client +Adafruit_WINC1500Client client; + +// Store the MQTT server, client ID, username, and password in flash memory. +// This is required for using the Adafruit MQTT library. +const char MQTT_SERVER[] PROGMEM = AIO_SERVER; +// Set a unique MQTT client ID using the AIO key + the date and time the sketch +// was compiled (so this should be unique across multiple devices for a user, +// alternatively you can manually set this to a GUID or other random value). +const char MQTT_CLIENTID[] PROGMEM = __TIME__ AIO_USERNAME; +const char MQTT_USERNAME[] PROGMEM = AIO_USERNAME; +const char MQTT_PASSWORD[] PROGMEM = AIO_KEY; + +Adafruit_MQTT_Client mqtt(&client, MQTT_SERVER, AIO_SERVERPORT, MQTT_CLIENTID, MQTT_USERNAME, MQTT_PASSWORD); + +// You don't need to change anything below this line! +#define halt(s) { Serial.println(F( s )); while(1); } + +/****************************** Feeds ***************************************/ + +// Setup a feed called 'photocell' for publishing. +// Notice MQTT paths for AIO follow the form: /feeds/ +const char PHOTOCELL_FEED[] PROGMEM = AIO_USERNAME "/feeds/photocell"; +Adafruit_MQTT_Publish photocell = Adafruit_MQTT_Publish(&mqtt, PHOTOCELL_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); + +/*************************** Sketch Code ************************************/ + +#define LEDPIN 13 + +void setup() { + pinMode(WINC_EN, OUTPUT); + digitalWrite(WINC_EN, HIGH); + + //while (!Serial); + Serial.begin(115200); + + Serial.println(F("Adafruit MQTT demo for WINC1500")); + + // Initialise the Client + Serial.print(F("\nInit the WiFi module...")); + // check for the presence of the breakout + if (WiFi.status() == WL_NO_SHIELD) { + Serial.println("WINC1500 not present"); + // don't continue: + while (true); + } + Serial.println("ATWINC OK!"); + + pinMode(LEDPIN, OUTPUT); + mqtt.subscribe(&onoffbutton); +} + +uint32_t x=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(); + + // this is our 'wait for incoming subscription packets' busy subloop + Adafruit_MQTT_Subscribe *subscription; + while ((subscription = mqtt.readSubscription(5000))) { + if (subscription == &onoffbutton) { + Serial.print(F("Got: ")); + Serial.println((char *)onoffbutton.lastread); + + if (0 == strcmp((char *)onoffbutton.lastread, "OFF")) { + digitalWrite(LEDPIN, LOW); + } + if (0 == strcmp((char *)onoffbutton.lastread, "ON")) { + digitalWrite(LEDPIN, HIGH); + } + } + } + + // Now we can publish stuff! + Serial.print(F("\nSending photocell val ")); + Serial.print(x); + Serial.print("..."); + if (! photocell.publish(x++)) { + Serial.println(F("Failed")); + } else { + Serial.println(F("OK!")); + } + +} + +// 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; + + // attempt to connect to Wifi network: + while (WiFi.status() != WL_CONNECTED) { + Serial.print("Attempting to connect to SSID: "); + Serial.println(ssid); + // Connect to WPA/WPA2 network. Change this line if using open or WEP network: + status = WiFi.begin(ssid, pass); + + // wait 10 seconds for connection: + uint8_t timeout = 10; + while (timeout && (WiFi.status() != WL_CONNECTED)) { + timeout--; + delay(1000); + } + } + + // Stop if already connected. + if (mqtt.connected()) { + return; + } + + Serial.print("Connecting to MQTT... "); + + 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 + } + Serial.println("MQTT Connected!"); +}