diff --git a/.github/workflows/compile-examples.yml b/.github/workflows/compile-examples.yml index 301e64e71..dd4a9c776 100644 --- a/.github/workflows/compile-examples.yml +++ b/.github/workflows/compile-examples.yml @@ -90,6 +90,9 @@ jobs: - fqbn: arduino:mbed_edge:edge_control type: mbed_edge artifact-name-suffix: arduino-mbed_edge-edge_control + - fqbn: "rp2040:rp2040:rpipicow" + type: rp2040 + artifact-name-suffix: rp2040-rp2040-rpipicow # make board type-specific customizations to the matrix jobs @@ -303,6 +306,13 @@ jobs: - examples/ArduinoIoTCloud-DeferredOTA - examples/ArduinoIoTCloud-Notecard - examples/ArduinoIoTCloud-Schedule + # PicoW + - board: + type: rp2040 + platforms: | + # Install rp2040 platform via Boards Manager + - name: rp2040:rp2040 + source-url: https://github.com/earlephilhower/arduino-pico/releases/download/global/package_rp2040_index.json steps: - name: Checkout diff --git a/src/AIoTC_Config.h b/src/AIoTC_Config.h index 999d77ced..b590f51c2 100644 --- a/src/AIoTC_Config.h +++ b/src/AIoTC_Config.h @@ -137,6 +137,11 @@ #define HAS_TCP #endif +#if defined(ARDUINO_RASPBERRY_PI_PICO_W) + #define BOARD_HAS_SECRET_KEY + #define HAS_TCP +#endif + #if defined(BOARD_HAS_SOFTSE) || defined(BOARD_HAS_OFFLOADED_ECCX08) || defined(BOARD_HAS_ECCX08) || defined(BOARD_HAS_SE050) #define BOARD_HAS_SECURE_ELEMENT #endif diff --git a/src/tls/AIoTCUPCert.h b/src/tls/AIoTCUPCert.h index 5ba783fd2..5d9802f8f 100644 --- a/src/tls/AIoTCUPCert.h +++ b/src/tls/AIoTCUPCert.h @@ -24,7 +24,7 @@ ******************************************************************************/ #include -#if defined(ARDUINO_ARCH_ESP32) || defined (ARDUINO_EDGE_CONTROL) +#if defined(ARDUINO_ARCH_ESP32) || defined (ARDUINO_EDGE_CONTROL) || defined (ARDUINO_RASPBERRY_PI_PICO_W) /****************************************************************************** * CONSTANTS @@ -163,6 +163,6 @@ static const char AIoTUPCert[] = "-----END CERTIFICATE-----\n"; #else -#endif /* #ifdef ARDUINO_ARCH_ESP32 */ +#endif /* #ifdef ARDUINO_ARCH_ESP32 || ARDUINO_EDGE_CONTROL || ARDUINO_RASPBERRY_PI_PICO_W */ #endif /* _AIOTC_UP_CERT_H_ */ diff --git a/src/tls/utility/TLSClientMqtt.cpp b/src/tls/utility/TLSClientMqtt.cpp index 0717dcced..c2fb95725 100644 --- a/src/tls/utility/TLSClientMqtt.cpp +++ b/src/tls/utility/TLSClientMqtt.cpp @@ -69,6 +69,8 @@ void TLSClientMqtt::begin(ConnectionHandler & connection, ArduinoIoTAuthenticati if (authMode == ArduinoIoTAuthenticationMode::CERTIFICATE) { setCACert(AIoTSSCert); } +#elif defined(ARDUINO_RASPBERRY_PI_PICO_W) + setCACert(AIoTUPCert); #elif defined(ARDUINO_ARCH_ESP32) (void)authMode; setCACert(AIoTUPCert); diff --git a/src/tls/utility/TLSClientMqtt.h b/src/tls/utility/TLSClientMqtt.h index 7deebe24e..a66ef430e 100644 --- a/src/tls/utility/TLSClientMqtt.h +++ b/src/tls/utility/TLSClientMqtt.h @@ -61,10 +61,11 @@ enum class ArduinoIoTAuthenticationMode */ #include class TLSClientMqtt : public WiFiSSLClient { -#elif defined(BOARD_ESP) +#elif defined(BOARD_ESP) || defined(ARDUINO_RASPBERRY_PI_PICO_W) /* * ESP32* * ESP82* + * PICOW */ #include class TLSClientMqtt : public WiFiClientSecure { diff --git a/src/tls/utility/TLSClientOta.cpp b/src/tls/utility/TLSClientOta.cpp index 6ba0d0331..7f9ea981d 100644 --- a/src/tls/utility/TLSClientOta.cpp +++ b/src/tls/utility/TLSClientOta.cpp @@ -55,6 +55,8 @@ void TLSClientOta::begin(ConnectionHandler &connection) { * https://github.com/arduino-libraries/Arduino_ESP32_OTA/blob/fc755e7d1d3946232107e2590662ee08d6ccdec4/src/tls/amazon_root_ca.h */ (void)connection; +#elif defined(ARDUINO_RASPBERRY_PI_PICO_W) + setCACert(AIoTUPCert); #elif defined(ARDUINO_ARCH_ESP32) setCACert(AIoTUPCert); #elif defined(ARDUINO_ARCH_ESP8266) diff --git a/src/tls/utility/TLSClientOta.h b/src/tls/utility/TLSClientOta.h index 89925499b..69a88814d 100644 --- a/src/tls/utility/TLSClientOta.h +++ b/src/tls/utility/TLSClientOta.h @@ -55,10 +55,11 @@ */ #include class TLSClientOta : public WiFiSSLClient { -#elif defined(BOARD_ESP) +#elif defined(BOARD_ESP) || defined(ARDUINO_RASPBERRY_PI_PICO_W) /* * ESP32* * ESP82* + * PICOW */ #include class TLSClientOta : public WiFiClientSecure { diff --git a/src/utility/time/RTCMillis.cpp b/src/utility/time/RTCMillis.cpp index d7debd261..7ceb27436 100644 --- a/src/utility/time/RTCMillis.cpp +++ b/src/utility/time/RTCMillis.cpp @@ -21,7 +21,7 @@ #include "AIoTC_Config.h" -#if defined(HAS_NOTECARD) || defined(ARDUINO_ARCH_ESP8266) +#if defined(HAS_NOTECARD) || defined(ARDUINO_ARCH_ESP8266) || defined (ARDUINO_RASPBERRY_PI_PICO_W) #include #include "RTCMillis.h" @@ -61,4 +61,4 @@ unsigned long RTCMillis::get() return _last_rtc_update_value; } -#endif /* HAS_NOTECARD || ARDUINO_ARCH_ESP8266 */ +#endif /* HAS_NOTECARD || ARDUINO_ARCH_ESP8266 || ARDUINO_RASPBERRY_PI_PICO_W */ diff --git a/src/utility/time/RTCMillis.h b/src/utility/time/RTCMillis.h index ab35b953c..03d352941 100644 --- a/src/utility/time/RTCMillis.h +++ b/src/utility/time/RTCMillis.h @@ -18,7 +18,7 @@ #ifndef ARDUINO_IOT_CLOUD_RTC_MILLIS_H_ #define ARDUINO_IOT_CLOUD_RTC_MILLIS_H_ -#if defined(HAS_NOTECARD) || defined(ARDUINO_ARCH_ESP8266) +#if defined(HAS_NOTECARD) || defined(ARDUINO_ARCH_ESP8266) || defined (ARDUINO_RASPBERRY_PI_PICO_W) /************************************************************************************** * INCLUDE @@ -45,6 +45,6 @@ class RTCMillis }; -#endif /* HAS_NOTECARD || ARDUINO_ARCH_ESP8266 */ +#endif /* HAS_NOTECARD || ARDUINO_ARCH_ESP8266 || ARDUINO_RASPBERRY_PI_PICO_W */ #endif /* ARDUINO_IOT_CLOUD_RTC_MILLIS_H_ */ diff --git a/src/utility/time/TimeService.cpp b/src/utility/time/TimeService.cpp index 5dd35e5d6..fb7272fc4 100644 --- a/src/utility/time/TimeService.cpp +++ b/src/utility/time/TimeService.cpp @@ -27,7 +27,7 @@ #include "NTPUtils.h" #include "TimeService.h" -#if defined(HAS_NOTECARD) || defined(ARDUINO_ARCH_ESP8266) +#if defined(HAS_NOTECARD) || defined(ARDUINO_ARCH_ESP8266) || defined (ARDUINO_RASPBERRY_PI_PICO_W) #include "RTCMillis.h" #elif defined(ARDUINO_ARCH_SAMD) #include @@ -41,7 +41,7 @@ * GLOBAL VARIABLES **************************************************************************************/ -#if defined(HAS_NOTECARD) || defined(ARDUINO_ARCH_ESP8266) +#if defined(HAS_NOTECARD) || defined(ARDUINO_ARCH_ESP8266) || defined (ARDUINO_RASPBERRY_PI_PICO_W) RTCMillis rtc; #elif defined(ARDUINO_ARCH_SAMD) RTCZero rtc; @@ -89,6 +89,12 @@ void renesas_setRTC(unsigned long time); unsigned long renesas_getRTC(); #endif +#ifdef ARDUINO_RASPBERRY_PI_PICO_W +void pico_w_initRTC(); +void pico_w_setRTC(unsigned long time); +unsigned long pico_w_getRTC(); +#endif + #endif /* HAS_NOTECARD */ /************************************************************************************** @@ -355,6 +361,8 @@ void TimeServiceClass::initRTC() esp8266_initRTC(); #elif defined (ARDUINO_ARCH_RENESAS) renesas_initRTC(); +#elif defined (ARDUINO_RASPBERRY_PI_PICO_W) + pico_w_initRTC(); #else #error "RTC not available for this architecture" #endif @@ -374,6 +382,8 @@ void TimeServiceClass::setRTC(unsigned long time) esp8266_setRTC(time); #elif defined (ARDUINO_ARCH_RENESAS) renesas_setRTC(time); +#elif defined (ARDUINO_RASPBERRY_PI_PICO_W) + pico_w_setRTC(time); #else #error "RTC not available for this architecture" #endif @@ -393,6 +403,8 @@ unsigned long TimeServiceClass::getRTC() return esp8266_getRTC(); #elif defined (ARDUINO_ARCH_RENESAS) return renesas_getRTC(); +#elif defined (ARDUINO_RASPBERRY_PI_PICO_W) + return pico_w_getRTC(); #else #error "RTC not available for this architecture" #endif @@ -544,6 +556,23 @@ unsigned long renesas_getRTC() } #endif +#ifdef ARDUINO_RASPBERRY_PI_PICO_W +void pico_w_initRTC() +{ + rtc.begin(); +} + +void pico_w_setRTC(unsigned long time) +{ + rtc.set(time); +} + +unsigned long pico_w_getRTC() +{ + return rtc.get(); +} +#endif + #endif /* HAS_NOTECARD */ /******************************************************************************