17 #ifndef Wippersnapper_ESP32_H    18 #define Wippersnapper_ESP32_H    20 #ifdef ARDUINO_ARCH_ESP32    23 #include "Adafruit_MQTT.h"    24 #include "Adafruit_MQTT_Client.h"    27 #include "WiFiMulti.h"    28 #include <NetworkClient.h>    29 #include <NetworkClientSecure.h>    76     if ((ssidPassword != NULL) && (strlen(ssidPassword) == 0)) {
   109 #if defined(ARDUINO_ADAFRUIT_QTPY_ESP32S2) ||                                  \   110     defined(ARDUINO_ADAFRUIT_QTPY_ESP32S3_NOPSRAM) ||                          \   111     defined(ARDUINO_ADAFRUIT_QTPY_ESP32S3_N4R2) ||                             \   112     defined(ARDUINO_ADAFRUIT_QTPY_ESP32C3) ||                                  \   113     defined(ARDUINO_ADAFRUIT_QTPY_ESP32_PICO)   114     WiFi.setTxPower(WIFI_POWER_15dBm);
   118     int n = WiFi.scanNetworks();
   124     bool foundNetwork = 
false;
   127     for (uint8_t i = 0; i < n; i++) {
   128       if (!foundNetwork && strcmp(WiFi.SSID(i).c_str(), 
_ssid) == 0) {
   133           if (strcmp(WS.
_multiNetworks[j].ssid, WiFi.SSID(i).c_str()) == 0) {
   141       WiFi.BSSID(i, BSSID);
   167     uint8_t mac[6] = {0};
   168     Network.macAddress(mac);
   169     memcpy(WS.
_macAddr, mac, 
sizeof(mac));
   188     if (strcmp(WS.
_config.aio_url, 
"io.adafruit.com") == 0 ||
   189         strcmp(WS.
_config.aio_url, 
"io.adafruit.us") == 0) {
   192           strcmp(WS.
_config.aio_url, 
"io.adafruit.com") == 0
   195       WS.
_mqtt = 
new Adafruit_MQTT_Client(
   202       WS.
_mqtt = 
new Adafruit_MQTT_Client(
   215     switch (WiFi.status()) {
   217       return WS_NET_CONNECTED;
   218     case WL_CONNECT_FAILED:
   219       return WS_NET_CONNECT_FAILED;
   223       return WS_NET_DISCONNECTED;
   245       "-----BEGIN CERTIFICATE-----\n"   246       "MIIFazCCA1OgAwIBAgIRAIIQz7DSQONZRGPgu2OCiwAwDQYJKoZIhvcNAQELBQAw\n"   247       "TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh\n"   248       "cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMTUwNjA0MTEwNDM4\n"   249       "WhcNMzUwNjA0MTEwNDM4WjBPMQswCQYDVQQGEwJVUzEpMCcGA1UEChMgSW50ZXJu\n"   250       "ZXQgU2VjdXJpdHkgUmVzZWFyY2ggR3JvdXAxFTATBgNVBAMTDElTUkcgUm9vdCBY\n"   251       "MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAK3oJHP0FDfzm54rVygc\n"   252       "h77ct984kIxuPOZXoHj3dcKi/vVqbvYATyjb3miGbESTtrFj/RQSa78f0uoxmyF+\n"   253       "0TM8ukj13Xnfs7j/EvEhmkvBioZxaUpmZmyPfjxwv60pIgbz5MDmgK7iS4+3mX6U\n"   254       "A5/TR5d8mUgjU+g4rk8Kb4Mu0UlXjIB0ttov0DiNewNwIRt18jA8+o+u3dpjq+sW\n"   255       "T8KOEUt+zwvo/7V3LvSye0rgTBIlDHCNAymg4VMk7BPZ7hm/ELNKjD+Jo2FR3qyH\n"   256       "B5T0Y3HsLuJvW5iB4YlcNHlsdu87kGJ55tukmi8mxdAQ4Q7e2RCOFvu396j3x+UC\n"   257       "B5iPNgiV5+I3lg02dZ77DnKxHZu8A/lJBdiB3QW0KtZB6awBdpUKD9jf1b0SHzUv\n"   258       "KBds0pjBqAlkd25HN7rOrFleaJ1/ctaJxQZBKT5ZPt0m9STJEadao0xAH0ahmbWn\n"   259       "OlFuhjuefXKnEgV4We0+UXgVCwOPjdAvBbI+e0ocS3MFEvzG6uBQE3xDk3SzynTn\n"   260       "jh8BCNAw1FtxNrQHusEwMFxIt4I7mKZ9YIqioymCzLq9gwQbooMDQaHWBfEbwrbw\n"   261       "qHyGO0aoSCqI3Haadr8faqU9GY/rOPNk3sgrDQoo//fb4hVC1CLQJ13hef4Y53CI\n"   262       "rU7m2Ys6xt0nUW7/vGT1M0NPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV\n"   263       "HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR5tFnme7bl5AFzgAiIyBpY9umbbjANBgkq\n"   264       "hkiG9w0BAQsFAAOCAgEAVR9YqbyyqFDQDLHYGmkgJykIrGF1XIpu+ILlaS/V9lZL\n"   265       "ubhzEFnTIZd+50xx+7LSYK05qAvqFyFWhfFQDlnrzuBZ6brJFe+GnY+EgPbk6ZGQ\n"   266       "3BebYhtF8GaV0nxvwuo77x/Py9auJ/GpsMiu/X1+mvoiBOv/2X/qkSsisRcOj/KK\n"   267       "NFtY2PwByVS5uCbMiogziUwthDyC3+6WVwW6LLv3xLfHTjuCvjHIInNzktHCgKQ5\n"   268       "ORAzI4JMPJ+GslWYHb4phowim57iaztXOoJwTdwJx4nLCgdNbOhdjsnvzqvHu7Ur\n"   269       "TkXWStAmzOVyyghqpZXjFaH3pO3JLF+l+/+sKAIuvtd7u+Nxe5AW0wdeRlN8NwdC\n"   270       "jNPElpzVmbUq4JUagEiuTDkHzsxHpFKVK7q4+63SM1N95R1NbdWhscdCb+ZAJzVc\n"   271       "oyi3B43njTOQ5yOf+1CceWxG1bQVs5ZufpsMljq4Ui0/1lvh+wjChP4kqKOJ2qxq\n"   272       "4RgqsahDYVvTH9w7jXbyLeiNdd8XM2w9U/t7y0Ff/9yi0GE44Za4rF2LN9d11TPA\n"   273       "mRGunUHBcnWEvgJBQl9nJEiU0Zsnvgc/ubhPgXRR4Xq37Z0j4r7g1SgEEzwxA57d\n"   274       "emyPxgcYxn/eR44/KJ4EBs+lVDR3veyJm+kXQ99b21/+jh5Xos1AnX5iItreGCc=\n"   275       "-----END CERTIFICATE-----\n"; 
   278       "-----BEGIN CERTIFICATE-----\n"   279       "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"   280       "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"   281       "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"   282       "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"   283       "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"   284       "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"   285       "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"   286       "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"   287       "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"   288       "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"   289       "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"   290       "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"   291       "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"   292       "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"   293       "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"   294       "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"   295       "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"   296       "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"   297       "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"   298       "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"   299       "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"   300       "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"   301       "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"   302       "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"   303       "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"   304       "-----END CERTIFICATE-----\n"; 
   313     if (WiFi.status() == WL_CONNECTED)
   316     if (strlen(_ssid) == 0) {
   319       WiFi.setAutoReconnect(
false);
   324         _wifiMulti.APlistClean();
   325         _wifiMulti.setAllowOpenAP(
false);
   327         _wifiMulti.addAP(_ssid, _pass);
   335         if (_wifiMulti.run(20000) == WL_CONNECTED) {
   342         WiFi.begin(_ssid, _pass);
   362 #endif // ARDUINO_ARCH_ESP32_H   363 #endif // Wippersnapper_ESP32_H void set_ssid_pass()
Sets the WiFi client's ssid and password. 
Definition: Wippersnapper_ESP32.h:88
 
#define WS_DEBUG_PRINT(...)
Prints debug output. 
Definition: Wippersnapper.h:51
 
Class for using the ESP32 network interface. 
Definition: Wippersnapper_ESP32.h:37
 
void set_ssid_pass(const char *ssid, const char *ssidPassword)
Sets the WiFi client's ssid and password. 
Definition: Wippersnapper_ESP32.h:71
 
void _connect()
Establishes a connection with the wireless network. 
Definition: Wippersnapper_ESP32.h:311
 
Wippersnapper_ESP32()
Initializes the Adafruit IO class for ESP32 devices. 
Definition: Wippersnapper_ESP32.h:45
 
bool check_valid_ssid()
Performs a scan of local WiFi networks. 
Definition: Wippersnapper_ESP32.h:99
 
void getMacAddr()
Sets the ESP32's unique client identifier. 
Definition: Wippersnapper_ESP32.h:166
 
const char * _ssid
WiFi SSID. 
Definition: Wippersnapper_ESP32.h:236
 
#define WS_DEBUG_PRINTHEX(...)
Prints debug output. 
Definition: Wippersnapper.h:57
 
secretsConfig _config
Definition: Wippersnapper.h:408
 
#define WL_MAC_ADDR_LENGTH
MAC address length - from RP2040 BSP. 
Definition: Wippersnapper_Networking.h:20
 
NetworkClientSecure * _mqtt_client_secure
Pointer to a secure network client object. 
Definition: Wippersnapper_ESP32.h:239
 
ws_status_t
Definition: Wippersnapper.h:192
 
Class that provides storage and functions for the Adafruit IO Wippersnapper interface. 
Definition: Wippersnapper.h:285
 
int32_t getRSSI()
Gets the current network RSSI value. 
Definition: Wippersnapper_ESP32.h:178
 
ws_status_t networkStatus()
Returns the network status of an ESP32 module. 
Definition: Wippersnapper_ESP32.h:214
 
#define WS_MAX_ALT_WIFI_NETWORKS
Maximum number of alternative networks. 
Definition: Wippersnapper.h:253
 
const char * _pass
WiFi password. 
Definition: Wippersnapper_ESP32.h:237
 
void _disconnect()
Disconnects from the wireless network. 
Definition: Wippersnapper_ESP32.h:356
 
void feedWDT()
Feeds the WDT to prevent hardware reset. 
Definition: Wippersnapper.cpp:2632
 
bool _isWiFiMulti
Definition: Wippersnapper.h:410
 
const char * _aio_root_ca_prod
Root certificate for io.adafruit.com. 
Definition: Wippersnapper_ESP32.h:277
 
networkConfig _multiNetworks[3]
Definition: Wippersnapper.h:409
 
Wippersnapper WS
Definition: Wippersnapper.cpp:36
 
const char * _aio_root_ca_staging
Root certificate for io.adafruit.us. 
Definition: Wippersnapper_ESP32.h:244
 
#define WS_DEBUG_PRINTLN(...)
Prints line from debug output. 
Definition: Wippersnapper.h:54
 
void setupMQTTClient(const char *clientID)
Initializes the MQTT client. 
Definition: Wippersnapper_ESP32.h:187
 
~Wippersnapper_ESP32()
Destructor for the Adafruit IO AirLift class. 
Definition: Wippersnapper_ESP32.h:55
 
WiFiMulti _wifiMulti
WiFiMulti object for multi-network mode. 
Definition: Wippersnapper_ESP32.h:242
 
ws_status_t _status
Definition: Wippersnapper.h:478
 
NetworkClient * _mqtt_client_insecure
Pointer to an insecure network client object. 
Definition: Wippersnapper_ESP32.h:241
 
uint8_t _macAddr[6]
Definition: Wippersnapper.h:403
 
Adafruit_MQTT * _mqtt
Definition: Wippersnapper.h:406
 
const char * connectionType()
Returns the type of network connection used by Wippersnapper. 
Definition: Wippersnapper_ESP32.h:233