Skip to content

Commit 7de2d39

Browse files
authored
Merge pull request #17 from arduino-libraries/esp32
added esp32 support, optimization on sensors reading
2 parents c0f5808 + d9e8b65 commit 7de2d39

File tree

9 files changed

+670
-206
lines changed

9 files changed

+670
-206
lines changed

.github/workflows/compile-examples.yml

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,9 +32,11 @@ jobs:
3232
- name: WiFiNINA
3333
- name: INA2xx
3434
- name: Arduino_BMI270_BMM150
35-
- name: BSEC Software Library
35+
- name: bsec2
3636
- name: Arduino_GroveI2C_Ultrasonic
3737
- name: OneWireNg
38+
- name: Arduino_APDS9999
39+
3840
3941
strategy:
4042
fail-fast: false
@@ -45,6 +47,10 @@ jobs:
4547
platforms: |
4648
- name: arduino:mbed_nano
4749
artifact-name-suffix: arduino-mbed_nano-nanorp2040connect
50+
- fqbn: arduino:esp32:nano_nora
51+
platforms: |
52+
- name: arduino:esp32
53+
artifact-name-suffix: arduino-nano-esp32
4854

4955
steps:
5056
- name: Checkout repository

examples/ScienceJournal/ScienceJournal.ino

Lines changed: 70 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,23 +23,38 @@
2323
String name;
2424
unsigned long lastNotify = 0;
2525
ScienceKitCarrier science_kit;
26+
27+
#ifdef ARDUINO_NANO_RP2040_CONNECT
2628
rtos::Thread thread_update_sensors;
29+
#endif
30+
31+
#ifdef ARDUINO_NANO_ESP32
32+
TaskHandle_t update_base;
33+
TaskHandle_t update_ble;
34+
#endif
2735

2836
bool ble_is_connected = false;
2937

3038

39+
3140
void setup(){
3241
science_kit.begin(NO_AUXILIARY_THREADS); // Doesn't start the BME688 and external temperature threads for the moment
3342

3443
if (!BLE.begin()){
3544
while(1);
3645
}
3746

47+
//BLE.setConnectionInterval(6, 12);
48+
3849
String address = BLE.address();
3950

4051
address.toUpperCase();
41-
42-
name = "ScienceKit R3 - ";
52+
#ifdef ARDUINO_NANO_RP2040_CONNECT
53+
name = "ScienceKit R3 - ";
54+
#endif
55+
#ifdef ARDUINO_NANO_ESP32
56+
name = "ScienceKit - ";
57+
#endif
4358
name += address[address.length() - 5];
4459
name += address[address.length() - 4];
4560
name += address[address.length() - 2];
@@ -76,10 +91,14 @@ void setup(){
7691
service.addCharacteristic(humidityCharacteristic);
7792
/* _____________________________________________________________AIR_QUALITY */
7893
service.addCharacteristic(airQualityCharacteristic);
94+
95+
#ifdef ARDUINO_NANO_RP2040_CONNECT
7996
/* _________________________________________________________SOUND_INTENSITY */
8097
service.addCharacteristic(sndIntensityCharacteristic);
8198
/* _____________________________________________________________SOUND_PITCH */
8299
service.addCharacteristic(sndPitchCharacteristic);
100+
#endif
101+
83102
/* _________________________________________________________________INPUT_A */
84103
service.addCharacteristic(inputACharacteristic);
85104
/* _________________________________________________________________INPUT_B */
@@ -101,38 +120,73 @@ void setup(){
101120

102121
BLE.addService(service);
103122
BLE.advertise();
104-
123+
105124
science_kit.startAuxiliaryThreads(); // start the BME688 and External Temperature Probe threads
106125

107-
thread_update_sensors.start(update); // this thread updates sensors
126+
#ifdef ARDUINO_NANO_RP2040_CONNECT
127+
thread_update_sensors.start(update); // this thread updates sensors
128+
#endif
129+
#ifdef ARDUINO_NANO_ESP32
130+
xTaskCreatePinnedToCore(&freeRTOSUpdate, "update_base", 10000, NULL, 1, &update_base, 1); // starts the update sensors thread on core 1 (user)
131+
xTaskCreatePinnedToCore(&freeRTOSble, "update_ble", 10000, NULL, 1, &update_ble, 0); // starts the ble thread on core 0 (internal)
132+
#endif
108133
}
109134

110135

111136
void update(void){
112137
while(1){
113138
science_kit.update(ROUND_ROBIN_ENABLED);
114-
rtos::ThisThread::sleep_for(25);
139+
delay(25);
115140
}
116141
}
117142

118-
void loop(){
143+
#ifdef ARDUINO_NANO_ESP32
144+
static void freeRTOSUpdate(void * pvParameters){
145+
update();
146+
}
147+
148+
static void freeRTOSble(void * pvParameters){
149+
while(1){
150+
updateBle();
151+
delay(1);
152+
}
153+
}
154+
#endif
155+
156+
void updateBle(){
119157
BLEDevice central = BLE.central();
120158
if (central) {
121159
ble_is_connected = true;
160+
#ifdef ARDUINO_NANO_ESP32
161+
science_kit.setStatusLed(STATUS_LED_BLE);
162+
#endif
122163
lastNotify=millis();
123164
while (central.connected()) {
124165
if (millis()-lastNotify>10){
125166
updateSubscribedCharacteristics();
126167
lastNotify=millis();
168+
#ifdef ARDUINO_NANO_ESP32
169+
delay(1);
170+
#endif
127171
}
128172
}
129173
}
130174
else {
131175
delay(100);
132176
ble_is_connected = false;
177+
#ifdef ARDUINO_NANO_ESP32
178+
science_kit.setStatusLed(STATUS_LED_PAIRING);
179+
#endif
133180
}
134181
}
135182

183+
184+
void loop(){
185+
#ifdef ARDUINO_NANO_RP2040_CONNECT
186+
updateBle();
187+
#endif
188+
}
189+
136190
void updateSubscribedCharacteristics(){
137191
/* ________________________________________________________________CURRENT */
138192
if(currentCharacteristic.subscribed()){
@@ -199,7 +253,6 @@ void updateSubscribedCharacteristics(){
199253
/*
200254
* BME688
201255
*/
202-
203256
/* _____________________________________________________________TEMPERATURE */
204257
if(temperatureCharacteristic.subscribed()){
205258
temperatureCharacteristic.writeValue(science_kit.getTemperature());
@@ -219,10 +272,11 @@ void updateSubscribedCharacteristics(){
219272
if(airQualityCharacteristic.subscribed()){
220273
airQualityCharacteristic.writeValue(science_kit.getAirQuality());
221274
}
222-
275+
223276
/*
224277
* MICROPHONE
225278
*/
279+
#ifdef ARDUINO_NANO_RP2040_CONNECT
226280

227281
/* _________________________________________________________SOUND_INTENSITY */
228282
/* NOTE: raw value - value not in Db */
@@ -232,8 +286,9 @@ void updateSubscribedCharacteristics(){
232286

233287
/* _____________________________________________________________SOUND_PITCH */
234288
if(sndPitchCharacteristic.subscribed()){
235-
sndPitchCharacteristic.writeValue(science_kit.getExternalTemperature());
289+
sndPitchCharacteristic.writeValue(0.0);
236290
}
291+
#endif
237292

238293
/* _________________________________________________________________INPUT_A */
239294
if (inputACharacteristic.subscribed()){
@@ -269,26 +324,16 @@ void updateSubscribedCharacteristics(){
269324

270325
/* ________________________________________________________________DISTANCE */
271326
if (distanceCharacteristic.subscribed()){
272-
if (science_kit.getUltrasonicIsConnected()){
273-
/* NOTE: getDistance() calls getMeters()
274-
Requested value is in meters */
275-
distanceCharacteristic.writeValue(science_kit.getDistance());
276-
}
277-
else{
278-
distanceCharacteristic.writeValue(-1.0);
279-
}
327+
/* NOTE: getDistance() calls getMeters() */
328+
/* Requested value is in meters */
329+
distanceCharacteristic.writeValue(science_kit.getDistance());
280330
}
281331

282332
/* ____________________________________________________________________PING */
283333
if (pingCharacteristic.subscribed()){
284-
if (science_kit.getUltrasonicIsConnected()){
285-
/* NOTE: getTravelTime() returns micro seconds */
286-
/* Converted to milliseconds (agreed with RF 20230719) */
287-
pingCharacteristic.writeValue(science_kit.getTravelTime() * 1000.0 );
288-
}
289-
else{
290-
pingCharacteristic.writeValue(-1.0);
291-
}
334+
/* NOTE: getTravelTime() returns micro seconds */
335+
/* Converted to milliseconds (agreed with RF 20230719) */
336+
pingCharacteristic.writeValue(science_kit.getTravelTime() * 1000.0 );
292337
}
293338
}
294339

examples/ScienceJournal/ble_config.h

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,12 @@ const int VERSION = 0x00000002;
3838
#define BLE_CH_TEMPERA "1009"
3939
#define BLE_CH_PRESSUR "1010"
4040
#define BLE_CH_HUMIDIT "1011"
41+
42+
#ifdef ARDUINO_NANO_RP2040_CONNECT
4143
#define BLE_CH_SOUNDIN "1012"
4244
#define BLE_CH_SOUNDPI "1013"
45+
#endif
46+
4347
#define BLE_CH_FUNGEN1 "1014"
4448
#define BLE_CH_DISTANC "1015"
4549
#define BLE_CH_INPUT_A "1016"
@@ -49,8 +53,13 @@ const int VERSION = 0x00000002;
4953
#define BLE_CH____PING "1020"
5054
#define BLE_CH_FUNGEN2 "1021"
5155

52-
56+
#ifdef ARDUINO_NANO_RP2040_CONNECT
5357
#define SCIENCE_KIT_UUID(val) ("555a0003-" val "-467a-9538-01f0652c74e8")
58+
#endif
59+
#ifdef ARDUINO_NANO_ESP32
60+
#define SCIENCE_KIT_UUID(val) ("555a0004-" val "-467a-9538-01f0652c74e8")
61+
#endif
62+
5463

5564
/*
5665
* SERVICE, VERSION
@@ -103,11 +112,12 @@ BLEFloatCharacteristic airQualityCharacteristic (SCIENCE_KIT_UUID(BLE_
103112
/*
104113
* MICROPHONE
105114
*/
106-
115+
#ifdef ARDUINO_NANO_RP2040_CONNECT
107116
/* ___________________________________________________________SOUND_INTENSITY */
108117
BLEUnsignedIntCharacteristic sndIntensityCharacteristic (SCIENCE_KIT_UUID(BLE_CH_SOUNDIN), BLENotify); // *** !
109118
/* ______!!! NOT AVAILABLE (should be delete?) !!!________________SOUND_PITCH */
110119
BLEUnsignedIntCharacteristic sndPitchCharacteristic (SCIENCE_KIT_UUID(BLE_CH_SOUNDPI), BLENotify);
120+
#endif
111121

112122
/*
113123
* INPUT A,B
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
/*
2+
This file is part of the Arduino_ScienceKitCarrier library.
3+
4+
Copyright (c) 2024 Arduino SA
5+
6+
This Source Code Form is subject to the terms of the Mozilla Public
7+
License, v. 2.0. If a copy of the MPL was not distributed with this
8+
file, You can obtain one at http://mozilla.org/MPL/2.0/.
9+
10+
*/
11+
12+
// This examples print all data from Arduino Science Kit R3
13+
14+
#include "Arduino_ScienceKitCarrier.h"
15+
16+
ScienceKitCarrier science_kit;
17+
18+
19+
void setup() {
20+
Serial.begin(115200);
21+
while(!Serial);
22+
science_kit.begin(START_AUXILIARY_THREADS);
23+
}
24+
25+
26+
void loop() {
27+
science_kit.update(ROUND_ROBIN_ENABLED);
28+
Serial.print(science_kit.getAccelerationX());
29+
Serial.print("\t");
30+
Serial.print(science_kit.getAccelerationY());
31+
Serial.print("\t ");
32+
Serial.print(science_kit.getAccelerationZ());
33+
Serial.print("\t| ");
34+
Serial.print(science_kit.getAngularVelocityX());
35+
Serial.print("\t");
36+
Serial.print(science_kit.getAngularVelocityY());
37+
Serial.print("\t");
38+
Serial.print(science_kit.getAngularVelocityZ());
39+
Serial.print("\t| ");
40+
Serial.print(science_kit.getMagneticFieldX());
41+
Serial.print("\t");
42+
Serial.print(science_kit.getMagneticFieldY());
43+
Serial.print("\t");
44+
Serial.print(science_kit.getMagneticFieldZ());
45+
Serial.print("\t|| ");
46+
Serial.print(science_kit.getProximity());
47+
Serial.print("\t");
48+
Serial.print(science_kit.getRed());
49+
Serial.print("\t");
50+
Serial.print(science_kit.getGreen());
51+
Serial.print("\t");
52+
Serial.print(science_kit.getBlue());
53+
Serial.print("\t|| ");
54+
Serial.print(science_kit.getPhase1());
55+
Serial.print("\t");
56+
Serial.print(science_kit.getFrequency1());
57+
Serial.print("\t");
58+
Serial.print(science_kit.getRange1());
59+
Serial.print("\t| ");
60+
Serial.print(science_kit.getPhase2());
61+
Serial.print("\t");
62+
Serial.print(science_kit.getFrequency2());
63+
Serial.print("\t");
64+
Serial.print(science_kit.getRange2());
65+
Serial.print("\t|| ");
66+
Serial.print(science_kit.getInputA());
67+
Serial.print("\t");
68+
Serial.print(science_kit.getInputB());
69+
Serial.print("\t|| ");
70+
Serial.print(science_kit.getVoltage());
71+
Serial.print("\t");
72+
Serial.print(science_kit.getCurrent());
73+
Serial.print("\t| ");
74+
Serial.print(science_kit.getResistance());
75+
Serial.print("\t|| ");
76+
77+
Serial.print(science_kit.getTemperature());
78+
Serial.print("\t");
79+
Serial.print(science_kit.getPressure());
80+
Serial.print("\t");
81+
Serial.print(science_kit.getHumidity());
82+
Serial.print("\t");
83+
Serial.print(science_kit.getAirQuality());
84+
Serial.print("\t|| ");
85+
86+
Serial.print(science_kit.getExternalTemperature());
87+
Serial.print("\t");
88+
Serial.print(science_kit.getExternalTemperatureIsConnected());
89+
Serial.print("\t|| ");
90+
91+
Serial.print(science_kit.getUltrasonicIsConnected());
92+
Serial.print("\t");
93+
Serial.print(science_kit.getDistance());
94+
Serial.print("\t");
95+
Serial.print(science_kit.getTravelTime());
96+
Serial.print("\t|| ");
97+
98+
// Microphone is only available on Arduino Nano RP2040 Connect edition
99+
#ifdef ARDUINO_NANO_RP2040_CONNECT
100+
Serial.print(science_kit.getMicrophoneRMS());
101+
Serial.print("\t|| ");
102+
#endif
103+
104+
Serial.print("\n");
105+
106+
delay(10);
107+
}

library.properties

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,6 @@ sentence=Library and firmware for Arduino Science Kit R3
66
paragraph=This library can be used to flash the Arduino Science Kit R3 and hack it.
77
category=Communication
88
url=https://github.com/arduino-libraries/Arduino_ScienceKitCarrier
9-
architectures=mbed,mbed_nano
9+
architectures=mbed,mbed_nano,esp32
1010
includes=Arduino_ScienceKitCarrier.h
11-
depends=Arduino_APDS9960,ArduinoBLE,WiFiNINA,INA2xx,Arduino_BMI270_BMM150,BSEC Software Library,Arduino_GroveI2C_Ultrasonic,OneWireNg
11+
depends=Arduino_APDS9960,ArduinoBLE,WiFiNINA,INA2xx,Arduino_BMI270_BMM150,bsec2,OneWireNg,Arduino_APDS9999

0 commit comments

Comments
 (0)