From 30eacf5b3e2f31c31fbd15c6146b7b92c833acf7 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 07:51:47 +0200 Subject: [PATCH 01/15] Moving cloud blink examples used for the getting started flow on Arduino Create into the 'utility' subfolder --- .travis.yml | 12 +++++++++--- .../GSM_Cloud_Blink/GSM_Cloud_Blink.ino | 0 .../{ => utility}/GSM_Cloud_Blink/arduino_secrets.h | 0 .../{ => utility}/NB_Cloud_Blink/NB_Cloud_Blink.ino | 0 .../{ => utility}/NB_Cloud_Blink/arduino_secrets.h | 0 .../WiFi_Cloud_Blink/WiFi_Cloud_Blink.ino | 0 .../{ => utility}/WiFi_Cloud_Blink/arduino_secrets.h | 0 .../WiFi_Cloud_Blink_with_security_credentials.ino | 0 .../arduino_secrets.h | 0 9 files changed, 9 insertions(+), 3 deletions(-) rename examples/{ => utility}/GSM_Cloud_Blink/GSM_Cloud_Blink.ino (100%) rename examples/{ => utility}/GSM_Cloud_Blink/arduino_secrets.h (100%) rename examples/{ => utility}/NB_Cloud_Blink/NB_Cloud_Blink.ino (100%) rename examples/{ => utility}/NB_Cloud_Blink/arduino_secrets.h (100%) rename examples/{ => utility}/WiFi_Cloud_Blink/WiFi_Cloud_Blink.ino (100%) rename examples/{ => utility}/WiFi_Cloud_Blink/arduino_secrets.h (100%) rename examples/{ => utility}/WiFi_Cloud_Blink_with_security_credentials/WiFi_Cloud_Blink_with_security_credentials.ino (100%) rename examples/{ => utility}/WiFi_Cloud_Blink_with_security_credentials/arduino_secrets.h (100%) diff --git a/.travis.yml b/.travis.yml index 2b836f9c4..c2bdee54c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -93,16 +93,22 @@ script: - | if [ "$BOARD" == "arduino:samd:mkr1000" ] || [ "$BOARD" == "arduino:samd:mkrwifi1010" ]; then buildSketch \ - "WiFi_Cloud_Blink" \ + "utility/WiFi_Cloud_Blink" \ "MultiValue_example" fi - | if [ "$BOARD" == "arduino:samd:mkrgsm1400" ]; then - buildSketch "GSM_Cloud_Blink" + buildSketch "utility/GSM_Cloud_Blink" + fi + - | + if [ "$BOARD" == "arduino:samd:mkrnb1500" ]; then + buildSketch "utility/NB_Cloud_Blink" fi - | if [ "$BOARD" == "esp8266:esp8266:huzzah" ]; then - buildSketch "ArduinoIoTCloud_ESP8266" + buildSketch \ + "ArduinoIoTCloud_ESP8266" \ + "utility/WiFi_Cloud_Blink_with_security_credentials" fi notifications: webhooks: diff --git a/examples/GSM_Cloud_Blink/GSM_Cloud_Blink.ino b/examples/utility/GSM_Cloud_Blink/GSM_Cloud_Blink.ino similarity index 100% rename from examples/GSM_Cloud_Blink/GSM_Cloud_Blink.ino rename to examples/utility/GSM_Cloud_Blink/GSM_Cloud_Blink.ino diff --git a/examples/GSM_Cloud_Blink/arduino_secrets.h b/examples/utility/GSM_Cloud_Blink/arduino_secrets.h similarity index 100% rename from examples/GSM_Cloud_Blink/arduino_secrets.h rename to examples/utility/GSM_Cloud_Blink/arduino_secrets.h diff --git a/examples/NB_Cloud_Blink/NB_Cloud_Blink.ino b/examples/utility/NB_Cloud_Blink/NB_Cloud_Blink.ino similarity index 100% rename from examples/NB_Cloud_Blink/NB_Cloud_Blink.ino rename to examples/utility/NB_Cloud_Blink/NB_Cloud_Blink.ino diff --git a/examples/NB_Cloud_Blink/arduino_secrets.h b/examples/utility/NB_Cloud_Blink/arduino_secrets.h similarity index 100% rename from examples/NB_Cloud_Blink/arduino_secrets.h rename to examples/utility/NB_Cloud_Blink/arduino_secrets.h diff --git a/examples/WiFi_Cloud_Blink/WiFi_Cloud_Blink.ino b/examples/utility/WiFi_Cloud_Blink/WiFi_Cloud_Blink.ino similarity index 100% rename from examples/WiFi_Cloud_Blink/WiFi_Cloud_Blink.ino rename to examples/utility/WiFi_Cloud_Blink/WiFi_Cloud_Blink.ino diff --git a/examples/WiFi_Cloud_Blink/arduino_secrets.h b/examples/utility/WiFi_Cloud_Blink/arduino_secrets.h similarity index 100% rename from examples/WiFi_Cloud_Blink/arduino_secrets.h rename to examples/utility/WiFi_Cloud_Blink/arduino_secrets.h diff --git a/examples/WiFi_Cloud_Blink_with_security_credentials/WiFi_Cloud_Blink_with_security_credentials.ino b/examples/utility/WiFi_Cloud_Blink_with_security_credentials/WiFi_Cloud_Blink_with_security_credentials.ino similarity index 100% rename from examples/WiFi_Cloud_Blink_with_security_credentials/WiFi_Cloud_Blink_with_security_credentials.ino rename to examples/utility/WiFi_Cloud_Blink_with_security_credentials/WiFi_Cloud_Blink_with_security_credentials.ino diff --git a/examples/WiFi_Cloud_Blink_with_security_credentials/arduino_secrets.h b/examples/utility/WiFi_Cloud_Blink_with_security_credentials/arduino_secrets.h similarity index 100% rename from examples/WiFi_Cloud_Blink_with_security_credentials/arduino_secrets.h rename to examples/utility/WiFi_Cloud_Blink_with_security_credentials/arduino_secrets.h From 4039dad1f4e824879f6a8a3c77ba6a91ea5980eb Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 08:03:59 +0200 Subject: [PATCH 02/15] Moving ArduinoIoTCloud_Travis_CI within utility folder since is not intended to be used by the user just to exercise the public APIs of ArduinoIoTCloud in order to serve as a early warning system for breaking changes --- .travis.yml | 4 ++-- .../ArduinoIoTCloud_Travis_CI/ArduinoIoTCloud_Travis_CI.ino | 0 .../{ => utility}/ArduinoIoTCloud_Travis_CI/arduino_secrets.h | 0 .../{ => utility}/ArduinoIoTCloud_Travis_CI/thingProperties.h | 0 4 files changed, 2 insertions(+), 2 deletions(-) rename examples/{ => utility}/ArduinoIoTCloud_Travis_CI/ArduinoIoTCloud_Travis_CI.ino (100%) rename examples/{ => utility}/ArduinoIoTCloud_Travis_CI/arduino_secrets.h (100%) rename examples/{ => utility}/ArduinoIoTCloud_Travis_CI/thingProperties.h (100%) diff --git a/.travis.yml b/.travis.yml index c2bdee54c..5183d7a83 100644 --- a/.travis.yml +++ b/.travis.yml @@ -81,14 +81,14 @@ script: if [ "$BOARD" == "arduino:samd:mkr1000" ] || [ "$BOARD" == "arduino:samd:mkrwifi1010" ] || [ "$BOARD" == "arduino:samd:mkrgsm1400" ] || [ "$BOARD" == "arduino:samd:mkrnb1500" ]; then buildSketch \ "ArduinoIoTCloud_LED_switch" \ - "ArduinoIoTCloud_Travis_CI" \ + "utility/ArduinoIoTCloud_Travis_CI" \ "utility/Provisioning" fi - | if [ "$BOARD" == "arduino:samd:mkrwan1300" ]; then buildSketch \ "ArduinoIoTCloud_LED_switch" \ - "ArduinoIoTCloud_Travis_CI" + "utility/ArduinoIoTCloud_Travis_CI" fi - | if [ "$BOARD" == "arduino:samd:mkr1000" ] || [ "$BOARD" == "arduino:samd:mkrwifi1010" ]; then diff --git a/examples/ArduinoIoTCloud_Travis_CI/ArduinoIoTCloud_Travis_CI.ino b/examples/utility/ArduinoIoTCloud_Travis_CI/ArduinoIoTCloud_Travis_CI.ino similarity index 100% rename from examples/ArduinoIoTCloud_Travis_CI/ArduinoIoTCloud_Travis_CI.ino rename to examples/utility/ArduinoIoTCloud_Travis_CI/ArduinoIoTCloud_Travis_CI.ino diff --git a/examples/ArduinoIoTCloud_Travis_CI/arduino_secrets.h b/examples/utility/ArduinoIoTCloud_Travis_CI/arduino_secrets.h similarity index 100% rename from examples/ArduinoIoTCloud_Travis_CI/arduino_secrets.h rename to examples/utility/ArduinoIoTCloud_Travis_CI/arduino_secrets.h diff --git a/examples/ArduinoIoTCloud_Travis_CI/thingProperties.h b/examples/utility/ArduinoIoTCloud_Travis_CI/thingProperties.h similarity index 100% rename from examples/ArduinoIoTCloud_Travis_CI/thingProperties.h rename to examples/utility/ArduinoIoTCloud_Travis_CI/thingProperties.h From b63b82197078a2e76cc642f324b5ddd0baa18dc7 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 08:17:32 +0200 Subject: [PATCH 03/15] Extend example ArduinoIoTCloud_LED_switch for be also compilable for ESP8266 --- .travis.yml | 1 + .../ArduinoIoTCloud_LED_switch/arduino_secrets.h | 5 +++++ .../ArduinoIoTCloud_LED_switch/thingProperties.h | 16 +++++++++------- 3 files changed, 15 insertions(+), 7 deletions(-) diff --git a/.travis.yml b/.travis.yml index 5183d7a83..2dd95f460 100644 --- a/.travis.yml +++ b/.travis.yml @@ -107,6 +107,7 @@ script: - | if [ "$BOARD" == "esp8266:esp8266:huzzah" ]; then buildSketch \ + "ArduinoIoTCloud_LED_switch" \ "ArduinoIoTCloud_ESP8266" \ "utility/WiFi_Cloud_Blink_with_security_credentials" fi diff --git a/examples/ArduinoIoTCloud_LED_switch/arduino_secrets.h b/examples/ArduinoIoTCloud_LED_switch/arduino_secrets.h index 020482cfc..fc0b0661e 100644 --- a/examples/ArduinoIoTCloud_LED_switch/arduino_secrets.h +++ b/examples/ArduinoIoTCloud_LED_switch/arduino_secrets.h @@ -6,6 +6,11 @@ #define SECRET_PASS "YOUR_WIFI_PASSWORD" #endif +/* ESP8266 */ +#if defined(BOARD_ESP8266) + #define SECRET_DEVICE_KEY "my-device-password" +#endif + /* MKR GSM 1400 */ #if defined(BOARD_HAS_GSM) #define SECRET_PIN "" diff --git a/examples/ArduinoIoTCloud_LED_switch/thingProperties.h b/examples/ArduinoIoTCloud_LED_switch/thingProperties.h index 6b7986922..869517a47 100644 --- a/examples/ArduinoIoTCloud_LED_switch/thingProperties.h +++ b/examples/ArduinoIoTCloud_LED_switch/thingProperties.h @@ -9,9 +9,8 @@ #error "Arduino IoT Cloud currently only supports MKR1000, MKR WiFi 1010, MKR WAN 1300/1310, MKR NB 1500 and MKR GSM 1400" #endif - -// Your THING_ID -#define THING_ID "ARDUINO_IOT_CLOUD_THING_ID" +#define THING_ID "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" +#define BOARD_ID "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" void onLedChange(); @@ -19,15 +18,18 @@ bool led; int potentiometer; void initProperties() { +#if defined(BOARD_ESP8266) + ArduinoCloud.setBoardId(BOARD_ID); + ArduinoCloud.setSecretDeviceKey(SECRET_DEVICE_KEY); +#endif ArduinoCloud.setThingId(THING_ID); - #if defined(BOARD_HAS_WIFI) || defined(BOARD_HAS_GSM) +#if defined(BOARD_HAS_WIFI) || defined(BOARD_HAS_GSM) ArduinoCloud.addProperty(led, READWRITE, ON_CHANGE, onLedChange); ArduinoCloud.addProperty(potentiometer, READ, ON_CHANGE); - #elif defined(BOARD_HAS_LORA) +#elif defined(BOARD_HAS_LORA) ArduinoCloud.addProperty(led, 1, READWRITE, ON_CHANGE, onLedChange); ArduinoCloud.addProperty(potentiometer, 2, READ, ON_CHANGE); - #endif - +#endif } #if defined(BOARD_HAS_WIFI) From a2f7def69405f2fe7f0adcc3ef1f0cf26081b385 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 08:26:33 +0200 Subject: [PATCH 04/15] Changing analog pin for analog read out to A0 since this define is also available across most ESP8266 boards --- .../ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino b/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino index b1b435382..a48f3d8dd 100644 --- a/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino +++ b/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino @@ -49,7 +49,7 @@ void setup() { void loop() { ArduinoCloud.update(); - int potentiometer = analogRead(A1); + int potentiometer = analogRead(A0); } From 77a0676b5099833a36000c2f12fd7df0382aab2a Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 08:33:45 +0200 Subject: [PATCH 05/15] Deleting dedicated ESP8266 example since it's functionality is covered within ArduinoIoTCloud_LED_switch --- .travis.yml | 1 - .../ArduinoIoTCloud_ESP8266.ino | 35 ------------------- .../ArduinoIoTCloud_ESP8266/arduino_secrets.h | 5 --- .../ArduinoIoTCloud_ESP8266/thingProperties.h | 18 ---------- 4 files changed, 59 deletions(-) delete mode 100644 examples/ArduinoIoTCloud_ESP8266/ArduinoIoTCloud_ESP8266.ino delete mode 100644 examples/ArduinoIoTCloud_ESP8266/arduino_secrets.h delete mode 100644 examples/ArduinoIoTCloud_ESP8266/thingProperties.h diff --git a/.travis.yml b/.travis.yml index 2dd95f460..9300ab03c 100644 --- a/.travis.yml +++ b/.travis.yml @@ -108,7 +108,6 @@ script: if [ "$BOARD" == "esp8266:esp8266:huzzah" ]; then buildSketch \ "ArduinoIoTCloud_LED_switch" \ - "ArduinoIoTCloud_ESP8266" \ "utility/WiFi_Cloud_Blink_with_security_credentials" fi notifications: diff --git a/examples/ArduinoIoTCloud_ESP8266/ArduinoIoTCloud_ESP8266.ino b/examples/ArduinoIoTCloud_ESP8266/ArduinoIoTCloud_ESP8266.ino deleted file mode 100644 index 73d210805..000000000 --- a/examples/ArduinoIoTCloud_ESP8266/ArduinoIoTCloud_ESP8266.ino +++ /dev/null @@ -1,35 +0,0 @@ -/* - Minimal demo example how to connect with the - Arduino IoT Cloud and a ESP8266 based WiFi board. -*/ - -#include "arduino_secrets.h" -#include "thingProperties.h" - -void setup() { - - pinMode(LED_BUILTIN, OUTPUT); - - Serial.begin(9600); - - /* Wait up to 5 seconds for user to open serial port */ - unsigned long serialBeginTime = millis(); - while (!Serial && (millis() - serialBeginTime > 5000)); - - initProperties(); - - setDebugMessageLevel(DBG_INFO); - - ArduinoCloud.begin(ArduinoIoTPreferredConnection); -} - -void loop() { - ArduinoCloud.update(); -} - - -void onLedChange() { - Serial.print("LED set to "); - Serial.println(led); - digitalWrite(LED_BUILTIN, !led); -} diff --git a/examples/ArduinoIoTCloud_ESP8266/arduino_secrets.h b/examples/ArduinoIoTCloud_ESP8266/arduino_secrets.h deleted file mode 100644 index 4087ffc0a..000000000 --- a/examples/ArduinoIoTCloud_ESP8266/arduino_secrets.h +++ /dev/null @@ -1,5 +0,0 @@ -#include - -#define SECRET_SSID "my-wifi-ssid" -#define SECRET_PASS "my-wifi-password" -#define SECRET_DEVICE_KEY "my-device-password" diff --git a/examples/ArduinoIoTCloud_ESP8266/thingProperties.h b/examples/ArduinoIoTCloud_ESP8266/thingProperties.h deleted file mode 100644 index e215c29c4..000000000 --- a/examples/ArduinoIoTCloud_ESP8266/thingProperties.h +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include - -#define THING_ID "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" /* "Thing ID" when selecting thing within Arduino Create */ -#define BOARD_ID "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" - -void onLedChange(); - -bool led; - -void initProperties() { - ArduinoCloud.setThingId(THING_ID); - ArduinoCloud.setBoardId(BOARD_ID); - ArduinoCloud.setSecretDeviceKey(SECRET_DEVICE_KEY); - ArduinoCloud.addProperty(led, READWRITE, ON_CHANGE, onLedChange); -} - -WiFiConnectionHandler ArduinoIoTPreferredConnection(SECRET_SSID, SECRET_PASS); From fc9a7011097feff4544f1bcc001dd0c929e68c32 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 08:44:45 +0200 Subject: [PATCH 06/15] Simplifying sketch build logic --- .travis.yml | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 9300ab03c..face621b5 100644 --- a/.travis.yml +++ b/.travis.yml @@ -77,37 +77,41 @@ install: - mkdir -p $HOME/Arduino/libraries - ln -s $PWD $HOME/Arduino/libraries/. script: + # Sketches to build for all boards - | - if [ "$BOARD" == "arduino:samd:mkr1000" ] || [ "$BOARD" == "arduino:samd:mkrwifi1010" ] || [ "$BOARD" == "arduino:samd:mkrgsm1400" ] || [ "$BOARD" == "arduino:samd:mkrnb1500" ]; then - buildSketch \ - "ArduinoIoTCloud_LED_switch" \ - "utility/ArduinoIoTCloud_Travis_CI" \ - "utility/Provisioning" - fi - - | - if [ "$BOARD" == "arduino:samd:mkrwan1300" ]; then + if [ "$BOARD" == "arduino:samd:mkr1000" ] || \ + [ "$BOARD" == "arduino:samd:mkrwifi1010" ] || \ + [ "$BOARD" == "esp8266:esp8266:huzzah" ] || \ + [ "$BOARD" == "arduino:samd:mkrgsm1400" ] || \ + [ "$BOARD" == "arduino:samd:mkrnb1500" ] || \ + [ "$BOARD" == "arduino:samd:mkrwan1300" ]; then buildSketch \ "ArduinoIoTCloud_LED_switch" \ "utility/ArduinoIoTCloud_Travis_CI" fi + # Sketches to build for selected boards - | if [ "$BOARD" == "arduino:samd:mkr1000" ] || [ "$BOARD" == "arduino:samd:mkrwifi1010" ]; then buildSketch \ + "utility/Provisioning" \ "utility/WiFi_Cloud_Blink" \ "MultiValue_example" fi - | if [ "$BOARD" == "arduino:samd:mkrgsm1400" ]; then - buildSketch "utility/GSM_Cloud_Blink" + buildSketch \ + "utility/Provisioning" \ + "utility/GSM_Cloud_Blink" fi - | if [ "$BOARD" == "arduino:samd:mkrnb1500" ]; then - buildSketch "utility/NB_Cloud_Blink" + buildSketch \ + "utility/Provisioning" \ + "utility/NB_Cloud_Blink" fi - | if [ "$BOARD" == "esp8266:esp8266:huzzah" ]; then buildSketch \ - "ArduinoIoTCloud_LED_switch" \ "utility/WiFi_Cloud_Blink_with_security_credentials" fi notifications: From 34ccfccf7a517f6fe6c010b4d0cb51d690a89b36 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 09:18:43 +0200 Subject: [PATCH 07/15] Adding Nano 33 IoT as CI build target --- .travis.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index face621b5..5c081d1e9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -5,6 +5,8 @@ matrix: - BOARD="arduino:samd:mkr1000" - env: - BOARD="arduino:samd:mkrwifi1010" + - env: + - BOARD="arduino:samd:nano_33_iot" - env: - BOARD="arduino:samd:mkrgsm1400" - env: @@ -82,6 +84,7 @@ script: if [ "$BOARD" == "arduino:samd:mkr1000" ] || \ [ "$BOARD" == "arduino:samd:mkrwifi1010" ] || \ [ "$BOARD" == "esp8266:esp8266:huzzah" ] || \ + [ "$BOARD" == "arduino:samd:nano_33_iot"] || \ [ "$BOARD" == "arduino:samd:mkrgsm1400" ] || \ [ "$BOARD" == "arduino:samd:mkrnb1500" ] || \ [ "$BOARD" == "arduino:samd:mkrwan1300" ]; then @@ -91,7 +94,7 @@ script: fi # Sketches to build for selected boards - | - if [ "$BOARD" == "arduino:samd:mkr1000" ] || [ "$BOARD" == "arduino:samd:mkrwifi1010" ]; then + if [ "$BOARD" == "arduino:samd:mkr1000" ] || [ "$BOARD" == "arduino:samd:mkrwifi1010" ] || [ "$BOARD" == "arduino:samd:nano_33_iot"]; then buildSketch \ "utility/Provisioning" \ "utility/WiFi_Cloud_Blink" \ From b7a0d873ac90f4db14c4c53ac730c900ab865cd4 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 09:28:50 +0200 Subject: [PATCH 08/15] Bugfix: Local variable 'potentiometer' is shadowing global variable --- .../ArduinoIoTCloud_LED_switch.ino | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino b/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino index a48f3d8dd..9aef8b754 100644 --- a/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino +++ b/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino @@ -48,12 +48,9 @@ void setup() { void loop() { ArduinoCloud.update(); - - int potentiometer = analogRead(A0); - + potentiometer = analogRead(A0); } - /* this function is called when the "led" property of your Thing changes */ @@ -61,4 +58,4 @@ void onLedChange() { Serial.print("LED set to "); Serial.println(led); digitalWrite(LED_BUILTIN, led); -} \ No newline at end of file +} From f159200c994ebc6885cd0d55c977fa173fbd2089 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 09:30:54 +0200 Subject: [PATCH 09/15] Extend #ifdef clause by defined(BOARD_HAS_NB) so that the properties are also instantiated for MKR NB 1500 --- examples/ArduinoIoTCloud_LED_switch/thingProperties.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/ArduinoIoTCloud_LED_switch/thingProperties.h b/examples/ArduinoIoTCloud_LED_switch/thingProperties.h index 869517a47..c19be65f9 100644 --- a/examples/ArduinoIoTCloud_LED_switch/thingProperties.h +++ b/examples/ArduinoIoTCloud_LED_switch/thingProperties.h @@ -23,7 +23,7 @@ void initProperties() { ArduinoCloud.setSecretDeviceKey(SECRET_DEVICE_KEY); #endif ArduinoCloud.setThingId(THING_ID); -#if defined(BOARD_HAS_WIFI) || defined(BOARD_HAS_GSM) +#if defined(BOARD_HAS_WIFI) || defined(BOARD_HAS_GSM) || defined(BOARD_HAS_NB) ArduinoCloud.addProperty(led, READWRITE, ON_CHANGE, onLedChange); ArduinoCloud.addProperty(potentiometer, READ, ON_CHANGE); #elif defined(BOARD_HAS_LORA) From 48c866158c16d801acb0fb9a8e37eae5b67580d4 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 09:37:36 +0200 Subject: [PATCH 10/15] Bringing comments up-2-date and minor code improvements --- .../ArduinoIoTCloud_LED_switch.ino | 40 ++++++++----------- 1 file changed, 17 insertions(+), 23 deletions(-) diff --git a/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino b/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino index 9aef8b754..fedca6655 100644 --- a/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino +++ b/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino @@ -1,12 +1,12 @@ /* This sketch demonstrates how to exchange data between your board and the Arduino IoT Cloud. - Connect a potentiometer (or other analog sensor) to A1 and an LED to Digital Pin 5. - When the potentiometer (or sensor) value changes the data is sent to the Cloud. - When you flip the switch in the Cloud dashboard the onboard LED lights gets turned ON or OFF. + * Connect a potentiometer (or other analog sensor) to A0. + * When the potentiometer (or sensor) value changes the data is sent to the Cloud. + * When you flip the switch in the Cloud dashboard the onboard LED lights gets turned ON or OFF. IMPORTANT: - This sketch will work with WiFi, GSM and Lora enabled boards supported by Arduino IoT Cloud. + This sketch works with WiFi, GSM, NB and Lora enabled boards supported by Arduino IoT Cloud. On a LoRa board, if it is configuered as a class A device (default and preferred option), values from Cloud dashboard are received only after a value is sent to Cloud. @@ -14,35 +14,29 @@ - MKR 1000 - MKR WIFI 1010 - MKR GSM 1400 + - MKR NB 1500 - MKR WAN 1300/1310 + - ESP 8266 */ + #include "arduino_secrets.h" #include "thingProperties.h" void setup() { - - // Initialize serial and wait for port to open: + /* Initialize serial and wait up to 5 seconds for port to open */ Serial.begin(9600); - // wait up to 5 seconds for user to open Serial port - unsigned long serialBeginTime = millis(); - while (!Serial && (millis() - serialBeginTime > 5000)); + for(unsigned long const serialBeginTime = millis(); !Serial && (millis() - serialBeginTime > 5000); ) { } - Serial.println("Starting Arduino IoT Cloud Example"); + /* Configure LED pin as an output */ + pinMode(LED_BUILTIN, OUTPUT); - // initProperties takes care of connecting your sketch variables to the ArduinoIoTCloud object + /* This function takes care of connecting your sketch variables to the ArduinoIoTCloud object */ initProperties(); - // tell ArduinoIoTCloud to use right connection handler - ArduinoCloud.begin(ArduinoIoTPreferredConnection); - /* - The following function allows you to obtain more information - related to the state of network and IoT Cloud connection and errors - the higher number the more granular information you'll get. - The default is 0 (only errors). - Maximum is 3 + /* Initialize Arduino IoT Cloud library */ + ArduinoCloud.begin(ArduinoIoTPreferredConnection); - setDebugMessageLevel(3); - */ + setDebugMessageLevel(DBG_INFO); ArduinoCloud.printDebugInfo(); } @@ -52,8 +46,8 @@ void loop() { } /* - this function is called when the "led" property of your Thing changes -*/ + * 'onLedChange' is called when the "led" property of your Thing changes + */ void onLedChange() { Serial.print("LED set to "); Serial.println(led); From 2a499cfef910c0ada39c09f7e033ab7963d490b9 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 09:45:48 +0200 Subject: [PATCH 11/15] Adding 'seconds' property to examples and change addProperty call for non-lora boards to showcase the seconds possible way of constructing properties --- .../ArduinoIoTCloud_LED_switch.ino | 1 + examples/ArduinoIoTCloud_LED_switch/thingProperties.h | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino b/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino index fedca6655..e5a8e4c86 100644 --- a/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino +++ b/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino @@ -43,6 +43,7 @@ void setup() { void loop() { ArduinoCloud.update(); potentiometer = analogRead(A0); + seconds = millis() / 1000; } /* diff --git a/examples/ArduinoIoTCloud_LED_switch/thingProperties.h b/examples/ArduinoIoTCloud_LED_switch/thingProperties.h index c19be65f9..b2bfb5d67 100644 --- a/examples/ArduinoIoTCloud_LED_switch/thingProperties.h +++ b/examples/ArduinoIoTCloud_LED_switch/thingProperties.h @@ -16,6 +16,7 @@ void onLedChange(); bool led; int potentiometer; +int seconds; void initProperties() { #if defined(BOARD_ESP8266) @@ -24,11 +25,13 @@ void initProperties() { #endif ArduinoCloud.setThingId(THING_ID); #if defined(BOARD_HAS_WIFI) || defined(BOARD_HAS_GSM) || defined(BOARD_HAS_NB) - ArduinoCloud.addProperty(led, READWRITE, ON_CHANGE, onLedChange); - ArduinoCloud.addProperty(potentiometer, READ, ON_CHANGE); + ArduinoCloud.addProperty(led, Permission::Write).onUpdate(onLedChange); + ArduinoCloud.addProperty(potentiometer, Permission::Read).publishOnChange(10); + ArduinoCloud.addProperty(seconds, Permission::Read).publishOnChange(1); #elif defined(BOARD_HAS_LORA) ArduinoCloud.addProperty(led, 1, READWRITE, ON_CHANGE, onLedChange); ArduinoCloud.addProperty(potentiometer, 2, READ, ON_CHANGE); + ArduinoCloud.addProperty(seconds, 3, READ, 5 * MINUTES); #endif } From 6f7c5ddc99a36bf449ad4b3560b8b9744e81ece1 Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 09:53:29 +0200 Subject: [PATCH 12/15] Renaming ArduinoIoTCloud_LED_switch to ArduinoIoTCloud-Basic to better highlight that this is the first example beginners should take a look at --- .travis.yml | 2 +- .../ArduinoIoTCloud-Basic.ino} | 0 .../arduino_secrets.h | 0 .../thingProperties.h | 0 4 files changed, 1 insertion(+), 1 deletion(-) rename examples/{ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino => ArduinoIoTCloud-Basic/ArduinoIoTCloud-Basic.ino} (100%) rename examples/{ArduinoIoTCloud_LED_switch => ArduinoIoTCloud-Basic}/arduino_secrets.h (100%) rename examples/{ArduinoIoTCloud_LED_switch => ArduinoIoTCloud-Basic}/thingProperties.h (100%) diff --git a/.travis.yml b/.travis.yml index 5c081d1e9..208af265b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -89,7 +89,7 @@ script: [ "$BOARD" == "arduino:samd:mkrnb1500" ] || \ [ "$BOARD" == "arduino:samd:mkrwan1300" ]; then buildSketch \ - "ArduinoIoTCloud_LED_switch" \ + "ArduinoIoTCloud-Basic" \ "utility/ArduinoIoTCloud_Travis_CI" fi # Sketches to build for selected boards diff --git a/examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino b/examples/ArduinoIoTCloud-Basic/ArduinoIoTCloud-Basic.ino similarity index 100% rename from examples/ArduinoIoTCloud_LED_switch/ArduinoIoTCloud_LED_switch.ino rename to examples/ArduinoIoTCloud-Basic/ArduinoIoTCloud-Basic.ino diff --git a/examples/ArduinoIoTCloud_LED_switch/arduino_secrets.h b/examples/ArduinoIoTCloud-Basic/arduino_secrets.h similarity index 100% rename from examples/ArduinoIoTCloud_LED_switch/arduino_secrets.h rename to examples/ArduinoIoTCloud-Basic/arduino_secrets.h diff --git a/examples/ArduinoIoTCloud_LED_switch/thingProperties.h b/examples/ArduinoIoTCloud-Basic/thingProperties.h similarity index 100% rename from examples/ArduinoIoTCloud_LED_switch/thingProperties.h rename to examples/ArduinoIoTCloud-Basic/thingProperties.h From aacce67da02ca488b75101c002a37b2db5b72d9f Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 11:05:47 +0200 Subject: [PATCH 13/15] Extend multi value example to be compilable for all supported boards --- .travis.yml | 4 +-- examples/MultiValue_example/arduino_secrets.h | 36 +++++++++++++++++-- examples/MultiValue_example/thingProperties.h | 29 +++++++++++---- 3 files changed, 58 insertions(+), 11 deletions(-) diff --git a/.travis.yml b/.travis.yml index 208af265b..6cd15d615 100644 --- a/.travis.yml +++ b/.travis.yml @@ -90,6 +90,7 @@ script: [ "$BOARD" == "arduino:samd:mkrwan1300" ]; then buildSketch \ "ArduinoIoTCloud-Basic" \ + "MultiValue_example" \ "utility/ArduinoIoTCloud_Travis_CI" fi # Sketches to build for selected boards @@ -97,8 +98,7 @@ script: if [ "$BOARD" == "arduino:samd:mkr1000" ] || [ "$BOARD" == "arduino:samd:mkrwifi1010" ] || [ "$BOARD" == "arduino:samd:nano_33_iot"]; then buildSketch \ "utility/Provisioning" \ - "utility/WiFi_Cloud_Blink" \ - "MultiValue_example" + "utility/WiFi_Cloud_Blink" fi - | if [ "$BOARD" == "arduino:samd:mkrgsm1400" ]; then diff --git a/examples/MultiValue_example/arduino_secrets.h b/examples/MultiValue_example/arduino_secrets.h index 0c9fdd556..fc0b0661e 100644 --- a/examples/MultiValue_example/arduino_secrets.h +++ b/examples/MultiValue_example/arduino_secrets.h @@ -1,2 +1,34 @@ -#define SECRET_SSID "" -#define SECRET_PASS "" +#include + +/* MKR1000, MKR WiFi 1010 */ +#if defined(BOARD_HAS_WIFI) + #define SECRET_SSID "YOUR_WIFI_NETWORK_NAME" + #define SECRET_PASS "YOUR_WIFI_PASSWORD" +#endif + +/* ESP8266 */ +#if defined(BOARD_ESP8266) + #define SECRET_DEVICE_KEY "my-device-password" +#endif + +/* MKR GSM 1400 */ +#if defined(BOARD_HAS_GSM) + #define SECRET_PIN "" + #define SECRET_APN "" + #define SECRET_LOGIN "" + #define SECRET_PASS "" +#endif + +/* MKR WAN 1300/1310 */ +#if defined(BOARD_HAS_LORA) + #define SECRET_APP_EUI "" + #define SECRET_APP_KEY "" +#endif + +/* MKR NB 1500 */ +#if defined(BOARD_HAS_NB) + #define SECRET_PIN "" + #define SECRET_APN "" + #define SECRET_LOGIN "" + #define SECRET_PASS "" +#endif diff --git a/examples/MultiValue_example/thingProperties.h b/examples/MultiValue_example/thingProperties.h index ae9a8b326..eb4231839 100644 --- a/examples/MultiValue_example/thingProperties.h +++ b/examples/MultiValue_example/thingProperties.h @@ -1,11 +1,8 @@ #include #include -// Set the Thing Id value -const char THING_ID[] = ""; - -const char SSID[] = SECRET_SSID; // Network SSID (name) -const char PASS[] = SECRET_PASS; // Network password (use for WPA, or use as key for WEP) +#define THING_ID "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" +#define BOARD_ID "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" void onSwitchButtonChange(); void onColorChange(); @@ -15,10 +12,28 @@ CloudLocation location; CloudColor color; void initProperties() { +#if defined(BOARD_ESP8266) + ArduinoCloud.setBoardId(BOARD_ID); + ArduinoCloud.setSecretDeviceKey(SECRET_DEVICE_KEY); +#endif ArduinoCloud.setThingId(THING_ID); +#if defined(BOARD_HAS_WIFI) || defined(BOARD_HAS_GSM) || defined(BOARD_HAS_NB) ArduinoCloud.addProperty(switchButton, READWRITE, ON_CHANGE, onSwitchButtonChange); - ArduinoCloud.addProperty(location, READ, ON_CHANGE, NULL); + ArduinoCloud.addProperty(location, READ, ON_CHANGE); ArduinoCloud.addProperty(color, READWRITE, ON_CHANGE, onColorChange); +#elif defined(BOARD_HAS_LORA) + ArduinoCloud.addProperty(switchButton, 1, READWRITE, ON_CHANGE, onSwitchButtonChange); + ArduinoCloud.addProperty(location, 2, READ, ON_CHANGE); + ArduinoCloud.addProperty(color, 3, READWRITE, ON_CHANGE, onColorChange); +#endif } -WiFiConnectionHandler ArduinoIoTPreferredConnection(SSID, PASS); +#if defined(BOARD_HAS_WIFI) + WiFiConnectionHandler ArduinoIoTPreferredConnection(SECRET_SSID, SECRET_PASS); +#elif defined(BOARD_HAS_GSM) + GSMConnectionHandler ArduinoIoTPreferredConnection(SECRET_PIN, SECRET_APN, SECRET_LOGIN, SECRET_PASS); +#elif defined(BOARD_HAS_LORA) + LoRaConnectionHandler ArduinoIoTPreferredConnection(SECRET_APP_EUI, SECRET_APP_KEY, _lora_band::EU868, _lora_class::CLASS_A); +#elif defined(BOARD_HAS_NB) + NBConnectionHandler ArduinoIoTPreferredConnection(SECRET_PIN, SECRET_APN, SECRET_LOGIN, SECRET_PASS); +#endif From aae5bfeafa3e80876ab82d3046c05cd360a5c4ab Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 13:23:11 +0200 Subject: [PATCH 14/15] Rewrite example in a meaningful way ... toogling the boolean switchButton property allows to switch between two coordinates and colour sets --- .../MultiValue_example/MultiValue_example.ino | 66 +++++++------------ examples/MultiValue_example/thingProperties.h | 4 +- 2 files changed, 25 insertions(+), 45 deletions(-) diff --git a/examples/MultiValue_example/MultiValue_example.ino b/examples/MultiValue_example/MultiValue_example.ino index 64c10833f..181205776 100644 --- a/examples/MultiValue_example/MultiValue_example.ino +++ b/examples/MultiValue_example/MultiValue_example.ino @@ -1,45 +1,30 @@ -#include "arduino_secrets.h" /* - Sketch generated by the Arduino IoT Cloud Thing "Test_MultiValue" - https://create-dev.arduino.cc/cloud/things/06012290-ec85-4f5c-aa00-81c0525efa0c - - Arduino IoT Cloud Properties description - - The following variables are automatically generated and updated when changes are made to the Thing properties - - bool switchButton; - - Properties which are marked as READ/WRITE in the Cloud Thing will also have functions - which are called when their values are changed from the Dashboard. - These functions are generated with the Thing and added at the end of this sketch. + This sketch demonstrates how to use more complex cloud data types such as a colour or coordinates. This sketch is compatible with: - - MKR 1000 - - MKR WIFI 1010 + - MKR 1000 + - MKR WIFI 1010 + - MKR GSM 1400 + - MKR NB 1500 + - MKR WAN 1300/1310 + - ESP 8266 */ +#include "arduino_secrets.h" #include "thingProperties.h" void setup() { - // Initialize serial and wait for port to open: + /* Initialize serial and wait up to 5 seconds for port to open */ Serial.begin(9600); - // This delay gives the chance to wait for a Serial Monitor without blocking if none is found - delay(1500); + for(unsigned long const serialBeginTime = millis(); !Serial && (millis() - serialBeginTime > 5000); ) { } - // Defined in thingProperties.h + /* This function takes care of connecting your sketch variables to the ArduinoIoTCloud object */ initProperties(); - // Connect to Arduino IoT Cloud + /* Initialize Arduino IoT Cloud library */ ArduinoCloud.begin(ArduinoIoTPreferredConnection); - /* - The following function allows you to obtain more information - related to the state of network and IoT Cloud connection and errors - the higher number the more granular information you’ll get. - The default is 0 (only errors). - Maximum is 4 - */ - setDebugMessageLevel(2); + setDebugMessageLevel(DBG_INFO); ArduinoCloud.printDebugInfo(); } @@ -51,27 +36,22 @@ float hueGreen = 80.0, satGreen = 100.0, briGreen = 100.0; void loop() { ArduinoCloud.update(); - // Your code here - - switchButton = !switchButton; - if (switchButton) { - location = Location(latMov, lonMov); - color = Color(hueRed, satRed, briRed); - } else { - location = Location(latArd, lonArd); - color = Color(hueGreen, satGreen, briGreen); - } - delay(5000); } - void onSwitchButtonChange() { - // Do something - digitalWrite(LED_BUILTIN, switchButton); + if (switchButton) + { + location = Location(latMov, lonMov); + color = Color(hueRed, satRed, briRed); + } + else + { + location = Location(latArd, lonArd); + color = Color(hueGreen, satGreen, briGreen); + } } void onColorChange() { - // Do something Serial.print("Hue = "); Serial.println(color.getValue().hue); Serial.print("Sat = "); diff --git a/examples/MultiValue_example/thingProperties.h b/examples/MultiValue_example/thingProperties.h index eb4231839..467e2e5e4 100644 --- a/examples/MultiValue_example/thingProperties.h +++ b/examples/MultiValue_example/thingProperties.h @@ -18,11 +18,11 @@ void initProperties() { #endif ArduinoCloud.setThingId(THING_ID); #if defined(BOARD_HAS_WIFI) || defined(BOARD_HAS_GSM) || defined(BOARD_HAS_NB) - ArduinoCloud.addProperty(switchButton, READWRITE, ON_CHANGE, onSwitchButtonChange); + ArduinoCloud.addProperty(switchButton, WRITE, ON_CHANGE, onSwitchButtonChange); ArduinoCloud.addProperty(location, READ, ON_CHANGE); ArduinoCloud.addProperty(color, READWRITE, ON_CHANGE, onColorChange); #elif defined(BOARD_HAS_LORA) - ArduinoCloud.addProperty(switchButton, 1, READWRITE, ON_CHANGE, onSwitchButtonChange); + ArduinoCloud.addProperty(switchButton, 1, WRITE, ON_CHANGE, onSwitchButtonChange); ArduinoCloud.addProperty(location, 2, READ, ON_CHANGE); ArduinoCloud.addProperty(color, 3, READWRITE, ON_CHANGE, onColorChange); #endif From 90159406b0a5633b18988d754bb6e75137a33ddd Mon Sep 17 00:00:00 2001 From: Alexander Entinger Date: Mon, 6 Apr 2020 13:38:59 +0200 Subject: [PATCH 15/15] Renaming MultiValue_example to ArduinoIoTCloud-Advanced --- .travis.yml | 2 +- .../ArduinoIoTCloud-Advanced.ino} | 0 .../arduino_secrets.h | 0 .../thingProperties.h | 0 4 files changed, 1 insertion(+), 1 deletion(-) rename examples/{MultiValue_example/MultiValue_example.ino => ArduinoIoTCloud-Advanced/ArduinoIoTCloud-Advanced.ino} (100%) rename examples/{MultiValue_example => ArduinoIoTCloud-Advanced}/arduino_secrets.h (100%) rename examples/{MultiValue_example => ArduinoIoTCloud-Advanced}/thingProperties.h (100%) diff --git a/.travis.yml b/.travis.yml index 6cd15d615..78d9fcd58 100644 --- a/.travis.yml +++ b/.travis.yml @@ -89,8 +89,8 @@ script: [ "$BOARD" == "arduino:samd:mkrnb1500" ] || \ [ "$BOARD" == "arduino:samd:mkrwan1300" ]; then buildSketch \ + "ArduinoIoTCloud-Advanced" \ "ArduinoIoTCloud-Basic" \ - "MultiValue_example" \ "utility/ArduinoIoTCloud_Travis_CI" fi # Sketches to build for selected boards diff --git a/examples/MultiValue_example/MultiValue_example.ino b/examples/ArduinoIoTCloud-Advanced/ArduinoIoTCloud-Advanced.ino similarity index 100% rename from examples/MultiValue_example/MultiValue_example.ino rename to examples/ArduinoIoTCloud-Advanced/ArduinoIoTCloud-Advanced.ino diff --git a/examples/MultiValue_example/arduino_secrets.h b/examples/ArduinoIoTCloud-Advanced/arduino_secrets.h similarity index 100% rename from examples/MultiValue_example/arduino_secrets.h rename to examples/ArduinoIoTCloud-Advanced/arduino_secrets.h diff --git a/examples/MultiValue_example/thingProperties.h b/examples/ArduinoIoTCloud-Advanced/thingProperties.h similarity index 100% rename from examples/MultiValue_example/thingProperties.h rename to examples/ArduinoIoTCloud-Advanced/thingProperties.h