diff --git a/examples/adafruitio_secure_pyportal/adafruitio_secure_pyportal.ino b/examples/adafruitio_secure_pyportal/adafruitio_secure_pyportal.ino new file mode 100644 index 0000000..73f67d2 --- /dev/null +++ b/examples/adafruitio_secure_pyportal/adafruitio_secure_pyportal.ino @@ -0,0 +1,167 @@ +/*************************************************** + Adafruit MQTT Library PyPortal Adafruit IO SSL/TLS Example + + Must use the latest version of nina-fw from: + https://github.com/adafruit/nina-fw + + Adafruit PyPortal: https://www.adafruit.com/product/4116 + + Adafruit invests time and resources providing this open source code, + please support Adafruit and open-source hardware by purchasing + products from Adafruit! + + Written by Brent Rubell for Adafruit Industries. + MIT license, all text above must be included in any redistribution + ****************************************************/ +#include +#include +#include "Adafruit_MQTT.h" +#include "Adafruit_MQTT_Client.h" + +/************************* WiFi Access Point *********************************/ + +#define WLAN_SSID "WLAN_SSID" +#define WLAN_PASS "WLAN_PASSWORD" +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" +// Using port 8883 for MQTTS +#define AIO_SERVERPORT 8883 +// Adafruit IO Account Configuration +// (to obtain these values, visit https://io.adafruit.com and click on Active Key) +#define AIO_USERNAME "YOUR_ADAFRUIT_IO_USERNAME" +#define AIO_KEY "YOUR_ADAFRUIT_IO_KEY" + +/************ Global State (you don't need to change this!) ******************/ + +// WiFiSSLClient for SSL/TLS support +WiFiSSLClient client; + +// Setup the MQTT client class by WLAN_PASSing in the WiFi client and MQTT server and login details. +Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); +/****************************** Feeds ***************************************/ + +// Setup a feed called 'test' for publishing. +// Notice MQTT paths for AIO follow the form: /feeds/ +Adafruit_MQTT_Publish test = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/test"); + +/*************************** Sketch Code ************************************/ + +void setup() +{ + //Initialize serial and wait for port to open: + Serial.begin(115200); + while (!Serial) + { + ; // wait for serial port to connect. Needed for native USB port only + } + + // check for the WiFi module: + if (WiFi.status() == WL_NO_MODULE) + { + Serial.println("Communication with WiFi module failed!"); + // don't continue + while (true) + ; + } + + String fv = WiFi.firmwareVersion(); + if (fv < "1.0.0") + { + Serial.println("Please upgrade the firmware"); + } + + // attempt to connect to WiFi network: + while (status != WL_CONNECTED) + { + Serial.print("Attempting to connect to WLAN_SSID: "); + Serial.println(WLAN_SSID); + // Connect to WPA/WPA2 network. Change this line if using open or WEP network: + status = WiFi.begin(WLAN_SSID, WLAN_PASS); + + // wait 10 seconds for connection: + delay(10000); + } + Serial.println("Connected to wifi"); + printWiFiStatus(); +} + +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(); + + // Now we can publish stuff! + Serial.print(F("\nSending val ")); + Serial.print(x); + Serial.print(F(" to test feed...")); + if (!test.publish(x++)) + { + Serial.println(F("Failed")); + } + else + { + Serial.println(F("OK!")); + } + + // wait a couple seconds to avoid rate limit + delay(2000); +} + +// 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!"); +} + +void printWiFiStatus() +{ + // print the SSID of the network you're attached to: + Serial.print("SSID: "); + Serial.println(WiFi.SSID()); + + // print your board's IP address: + IPAddress ip = WiFi.localIP(); + Serial.print("IP Address: "); + Serial.println(ip); + + // print the received signal strength: + long rssi = WiFi.RSSI(); + Serial.print("signal strength (RSSI):"); + Serial.print(rssi); + Serial.println(" dBm"); +} \ No newline at end of file