/*************************************************** 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"); }