diff --git a/examples/adafruitio_secure_esp32/.esp8266.test.skip b/examples/adafruitio_secure_esp32/.esp8266.test.skip new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/examples/adafruitio_secure_esp32/.esp8266.test.skip @@ -0,0 +1 @@ + diff --git a/examples/adafruitio_secure_esp32/.zero.test.skip b/examples/adafruitio_secure_esp32/.zero.test.skip new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/examples/adafruitio_secure_esp32/.zero.test.skip @@ -0,0 +1 @@ + diff --git a/examples/adafruitio_secure_esp32/adafruitio_secure_esp32.ino b/examples/adafruitio_secure_esp32/adafruitio_secure_esp32.ino new file mode 100644 index 0000000..f573ede --- /dev/null +++ b/examples/adafruitio_secure_esp32/adafruitio_secure_esp32.ino @@ -0,0 +1,160 @@ +/*********************************************************************** + Adafruit MQTT Library ESP32 Adafruit IO SSL/TLS example + + Use the latest version of the ESP32 Arduino Core: + https://github.com/espressif/arduino-esp32 + + Works great with Adafruit Huzzah32 Feather and Breakout Board: + https://www.adafruit.com/product/3405 + https://www.adafruit.com/products/4172 + + 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. + Modified by Brent Rubell for Adafruit Industries + MIT license, all text above must be included in any redistribution + **********************************************************************/ +#include +#include "WiFiClientSecure.h" +#include "Adafruit_MQTT.h" +#include "Adafruit_MQTT_Client.h" + +/************************* WiFi Access Point *********************************/ + +#define WLAN_SSID "WLAN_SSID" +#define WLAN_PASS "WIFI_PASSWORD" + +/************************* 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!) ******************/ + +// WiFiFlientSecure for SSL/TLS support +WiFiClientSecure client; + +// Setup the MQTT client class by passing in the WiFi client and MQTT server and login details. +Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY); + +// io.adafruit.com root CA +const char* adafruitio_root_ca = \ + "-----BEGIN CERTIFICATE-----\n" \ + "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n" \ + "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n" \ + "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n" \ + "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n" \ + "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n" \ + "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n" \ + "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n" \ + "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n" \ + "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n" \ + "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n" \ + "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n" \ + "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n" \ + "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n" \ + "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n" \ + "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n" \ + "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n" \ + "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n" \ + "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n" \ + "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n" \ + "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n" \ + "-----END CERTIFICATE-----\n"; + +/****************************** 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() { + Serial.begin(115200); + delay(10); + + Serial.println(F("Adafruit IO MQTTS (SSL/TLS) Example")); + + // Connect to WiFi access point. + Serial.println(); Serial.println(); + Serial.print("Connecting to "); + Serial.println(WLAN_SSID); + + delay(1000); + + WiFi.begin(WLAN_SSID, WLAN_PASS); + delay(2000); + + while (WiFi.status() != WL_CONNECTED) { + delay(500); + Serial.print("."); + } + Serial.println(); + + Serial.println("WiFi connected"); + Serial.println("IP address: "); Serial.println(WiFi.localIP()); + + // Set Adafruit IO's root CA + client.setCACert(adafruitio_root_ca); +} + +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!"); +} \ No newline at end of file diff --git a/library.properties b/library.properties index 957bb7e..3b57b38 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=Adafruit MQTT Library -version=2.1.0 +version=2.1.1 author=Adafruit maintainer=Adafruit sentence=MQTT library that supports the FONA, ESP8266, Yun, and generic Arduino Client hardware.