From 6bef122e0bf6aeee27afcb463cb3346c7f83b6ba Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 15 May 2023 09:55:32 +0200 Subject: [PATCH 1/5] Initial: add pi pico w support --- src/AIoTC_Config.h | 5 +++++ src/tls/AIoTCUPCert.h | 4 ++-- src/tls/utility/TLSClientMqtt.cpp | 2 ++ src/tls/utility/TLSClientMqtt.h | 3 ++- src/tls/utility/TLSClientOta.cpp | 2 ++ src/tls/utility/TLSClientOta.h | 3 ++- src/utility/time/TimeService.cpp | 4 ++++ 7 files changed, 19 insertions(+), 4 deletions(-) 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/TimeService.cpp b/src/utility/time/TimeService.cpp index 5dd35e5d6..1801c2980 100644 --- a/src/utility/time/TimeService.cpp +++ b/src/utility/time/TimeService.cpp @@ -355,6 +355,7 @@ void TimeServiceClass::initRTC() esp8266_initRTC(); #elif defined (ARDUINO_ARCH_RENESAS) renesas_initRTC(); +#elif defined (ARDUINO_RASPBERRY_PI_PICO_W) #else #error "RTC not available for this architecture" #endif @@ -374,6 +375,7 @@ void TimeServiceClass::setRTC(unsigned long time) esp8266_setRTC(time); #elif defined (ARDUINO_ARCH_RENESAS) renesas_setRTC(time); +#elif defined (ARDUINO_RASPBERRY_PI_PICO_W) #else #error "RTC not available for this architecture" #endif @@ -393,6 +395,8 @@ unsigned long TimeServiceClass::getRTC() return esp8266_getRTC(); #elif defined (ARDUINO_ARCH_RENESAS) return renesas_getRTC(); +#elif defined (ARDUINO_RASPBERRY_PI_PICO_W) + return 1; #else #error "RTC not available for this architecture" #endif From 626aef43bb1920f7b44f1b320ef1cceb6f5e749a Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 15 May 2023 10:16:52 +0200 Subject: [PATCH 2/5] pico w: Add soft RTC support --- src/utility/time/RTCMillis.cpp | 4 ++-- src/utility/time/RTCMillis.h | 4 ++-- src/utility/time/TimeService.cpp | 31 ++++++++++++++++++++++++++++--- 3 files changed, 32 insertions(+), 7 deletions(-) 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 1801c2980..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 */ /************************************************************************************** @@ -356,6 +362,7 @@ void TimeServiceClass::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 @@ -376,6 +383,7 @@ void TimeServiceClass::setRTC(unsigned long 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 @@ -396,7 +404,7 @@ unsigned long TimeServiceClass::getRTC() #elif defined (ARDUINO_ARCH_RENESAS) return renesas_getRTC(); #elif defined (ARDUINO_RASPBERRY_PI_PICO_W) - return 1; + return pico_w_getRTC(); #else #error "RTC not available for this architecture" #endif @@ -548,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 */ /****************************************************************************** From b85373eb6b3d904c0434b57398e0407ac91db1fb Mon Sep 17 00:00:00 2001 From: pennam Date: Wed, 21 Aug 2024 17:25:36 +0200 Subject: [PATCH 3/5] ci: add Pico W to compile examples workflow --- .github/workflows/compile-examples.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) 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 From 3293d2b787ccccc5e3aaec7faeac03122d3e92bc Mon Sep 17 00:00:00 2001 From: pennam Date: Fri, 28 Feb 2025 12:18:52 +0100 Subject: [PATCH 4/5] OTA: create TinyGSMClient in case of cellular connections --- src/tls/utility/TLSClientOta.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/tls/utility/TLSClientOta.h b/src/tls/utility/TLSClientOta.h index 89925499b..1909e2775 100644 --- a/src/tls/utility/TLSClientOta.h +++ b/src/tls/utility/TLSClientOta.h @@ -90,6 +90,10 @@ case NetworkAdapter::CATM1: return new GSMClient(); #endif // BOARD_HAS_CATM1_NBIOT +#ifdef BOARD_HAS_CELLULAR + case NetworkAdapter::CELL: + return new TinyGsmClient(modem, 1); +#endif // BOARD_HAS_CELLULAR default: return nullptr; } From 501271b5a868c178595265d4c83b0777aba8fe28 Mon Sep 17 00:00:00 2001 From: pennam Date: Mon, 3 Mar 2025 08:59:28 +0100 Subject: [PATCH 5/5] Release v2.4.1 --- library.properties | 2 +- src/AIoTC_Config.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/library.properties b/library.properties index afd405412..34b6cae52 100644 --- a/library.properties +++ b/library.properties @@ -1,5 +1,5 @@ name=ArduinoIoTCloud -version=2.4.0 +version=2.4.1 author=Arduino maintainer=Arduino sentence=This library allows connecting to the Arduino IoT Cloud service. diff --git a/src/AIoTC_Config.h b/src/AIoTC_Config.h index b590f51c2..779a4607f 100644 --- a/src/AIoTC_Config.h +++ b/src/AIoTC_Config.h @@ -183,6 +183,6 @@ #define AIOT_CONFIG_LASTVALUES_SYNC_MAX_RETRY_CNT (10UL) #endif -#define AIOT_CONFIG_LIB_VERSION "2.4.0" +#define AIOT_CONFIG_LIB_VERSION "2.4.1" #endif /* ARDUINO_AIOTC_CONFIG_H_ */