Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 7 additions & 1 deletion .github/workflows/compile-examples.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,11 @@ jobs:
- name: WiFiNINA
- name: INA2xx
- name: Arduino_BMI270_BMM150
- name: BSEC Software Library
- name: bsec2
- name: Arduino_GroveI2C_Ultrasonic
- name: OneWireNg
- name: Arduino_APDS9999


strategy:
fail-fast: false
Expand All @@ -45,6 +47,10 @@ jobs:
platforms: |
- name: arduino:mbed_nano
artifact-name-suffix: arduino-mbed_nano-nanorp2040connect
- fqbn: arduino:esp32:nano_nora
platforms: |
- name: arduino:esp32
artifact-name-suffix: arduino-nano-esp32

steps:
- name: Checkout repository
Expand Down
95 changes: 70 additions & 25 deletions examples/ScienceJournal/ScienceJournal.ino
Original file line number Diff line number Diff line change
Expand Up @@ -23,23 +23,38 @@
String name;
unsigned long lastNotify = 0;
ScienceKitCarrier science_kit;

#ifdef ARDUINO_NANO_RP2040_CONNECT
rtos::Thread thread_update_sensors;
#endif

#ifdef ARDUINO_NANO_ESP32
TaskHandle_t update_base;
TaskHandle_t update_ble;
#endif

bool ble_is_connected = false;



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

if (!BLE.begin()){
while(1);
}

//BLE.setConnectionInterval(6, 12);

String address = BLE.address();

address.toUpperCase();

name = "ScienceKit R3 - ";
#ifdef ARDUINO_NANO_RP2040_CONNECT
name = "ScienceKit R3 - ";
#endif
#ifdef ARDUINO_NANO_ESP32
name = "ScienceKit - ";
#endif
name += address[address.length() - 5];
name += address[address.length() - 4];
name += address[address.length() - 2];
Expand Down Expand Up @@ -76,10 +91,14 @@ void setup(){
service.addCharacteristic(humidityCharacteristic);
/* _____________________________________________________________AIR_QUALITY */
service.addCharacteristic(airQualityCharacteristic);

#ifdef ARDUINO_NANO_RP2040_CONNECT
/* _________________________________________________________SOUND_INTENSITY */
service.addCharacteristic(sndIntensityCharacteristic);
/* _____________________________________________________________SOUND_PITCH */
service.addCharacteristic(sndPitchCharacteristic);
#endif

/* _________________________________________________________________INPUT_A */
service.addCharacteristic(inputACharacteristic);
/* _________________________________________________________________INPUT_B */
Expand All @@ -101,38 +120,73 @@ void setup(){

BLE.addService(service);
BLE.advertise();

science_kit.startAuxiliaryThreads(); // start the BME688 and External Temperature Probe threads

thread_update_sensors.start(update); // this thread updates sensors
#ifdef ARDUINO_NANO_RP2040_CONNECT
thread_update_sensors.start(update); // this thread updates sensors
#endif
#ifdef ARDUINO_NANO_ESP32
xTaskCreatePinnedToCore(&freeRTOSUpdate, "update_base", 10000, NULL, 1, &update_base, 1); // starts the update sensors thread on core 1 (user)
xTaskCreatePinnedToCore(&freeRTOSble, "update_ble", 10000, NULL, 1, &update_ble, 0); // starts the ble thread on core 0 (internal)
#endif
}


void update(void){
while(1){
science_kit.update(ROUND_ROBIN_ENABLED);
rtos::ThisThread::sleep_for(25);
delay(25);
}
}

void loop(){
#ifdef ARDUINO_NANO_ESP32
static void freeRTOSUpdate(void * pvParameters){
update();
}

static void freeRTOSble(void * pvParameters){
while(1){
updateBle();
delay(1);
}
}
#endif

void updateBle(){
BLEDevice central = BLE.central();
if (central) {
ble_is_connected = true;
#ifdef ARDUINO_NANO_ESP32
science_kit.setStatusLed(STATUS_LED_BLE);
#endif
lastNotify=millis();
while (central.connected()) {
if (millis()-lastNotify>10){
updateSubscribedCharacteristics();
lastNotify=millis();
#ifdef ARDUINO_NANO_ESP32
delay(1);
#endif
}
}
}
else {
delay(100);
ble_is_connected = false;
#ifdef ARDUINO_NANO_ESP32
science_kit.setStatusLed(STATUS_LED_PAIRING);
#endif
}
}


void loop(){
#ifdef ARDUINO_NANO_RP2040_CONNECT
updateBle();
#endif
}

void updateSubscribedCharacteristics(){
/* ________________________________________________________________CURRENT */
if(currentCharacteristic.subscribed()){
Expand Down Expand Up @@ -199,7 +253,6 @@ void updateSubscribedCharacteristics(){
/*
* BME688
*/

/* _____________________________________________________________TEMPERATURE */
if(temperatureCharacteristic.subscribed()){
temperatureCharacteristic.writeValue(science_kit.getTemperature());
Expand All @@ -219,10 +272,11 @@ void updateSubscribedCharacteristics(){
if(airQualityCharacteristic.subscribed()){
airQualityCharacteristic.writeValue(science_kit.getAirQuality());
}

/*
* MICROPHONE
*/
#ifdef ARDUINO_NANO_RP2040_CONNECT

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

/* _____________________________________________________________SOUND_PITCH */
if(sndPitchCharacteristic.subscribed()){
sndPitchCharacteristic.writeValue(science_kit.getExternalTemperature());
sndPitchCharacteristic.writeValue(0.0);
}
#endif

/* _________________________________________________________________INPUT_A */
if (inputACharacteristic.subscribed()){
Expand Down Expand Up @@ -269,26 +324,16 @@ void updateSubscribedCharacteristics(){

/* ________________________________________________________________DISTANCE */
if (distanceCharacteristic.subscribed()){
if (science_kit.getUltrasonicIsConnected()){
/* NOTE: getDistance() calls getMeters()
Requested value is in meters */
distanceCharacteristic.writeValue(science_kit.getDistance());
}
else{
distanceCharacteristic.writeValue(-1.0);
}
/* NOTE: getDistance() calls getMeters() */
/* Requested value is in meters */
distanceCharacteristic.writeValue(science_kit.getDistance());
}

/* ____________________________________________________________________PING */
if (pingCharacteristic.subscribed()){
if (science_kit.getUltrasonicIsConnected()){
/* NOTE: getTravelTime() returns micro seconds */
/* Converted to milliseconds (agreed with RF 20230719) */
pingCharacteristic.writeValue(science_kit.getTravelTime() * 1000.0 );
}
else{
pingCharacteristic.writeValue(-1.0);
}
/* NOTE: getTravelTime() returns micro seconds */
/* Converted to milliseconds (agreed with RF 20230719) */
pingCharacteristic.writeValue(science_kit.getTravelTime() * 1000.0 );
}
}

Expand Down
14 changes: 12 additions & 2 deletions examples/ScienceJournal/ble_config.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,12 @@ const int VERSION = 0x00000002;
#define BLE_CH_TEMPERA "1009"
#define BLE_CH_PRESSUR "1010"
#define BLE_CH_HUMIDIT "1011"

#ifdef ARDUINO_NANO_RP2040_CONNECT
#define BLE_CH_SOUNDIN "1012"
#define BLE_CH_SOUNDPI "1013"
#endif

#define BLE_CH_FUNGEN1 "1014"
#define BLE_CH_DISTANC "1015"
#define BLE_CH_INPUT_A "1016"
Expand All @@ -49,8 +53,13 @@ const int VERSION = 0x00000002;
#define BLE_CH____PING "1020"
#define BLE_CH_FUNGEN2 "1021"


#ifdef ARDUINO_NANO_RP2040_CONNECT
#define SCIENCE_KIT_UUID(val) ("555a0003-" val "-467a-9538-01f0652c74e8")
#endif
#ifdef ARDUINO_NANO_ESP32
#define SCIENCE_KIT_UUID(val) ("555a0004-" val "-467a-9538-01f0652c74e8")
#endif


/*
* SERVICE, VERSION
Expand Down Expand Up @@ -103,11 +112,12 @@ BLEFloatCharacteristic airQualityCharacteristic (SCIENCE_KIT_UUID(BLE_
/*
* MICROPHONE
*/

#ifdef ARDUINO_NANO_RP2040_CONNECT
/* ___________________________________________________________SOUND_INTENSITY */
BLEUnsignedIntCharacteristic sndIntensityCharacteristic (SCIENCE_KIT_UUID(BLE_CH_SOUNDIN), BLENotify); // *** !
/* ______!!! NOT AVAILABLE (should be delete?) !!!________________SOUND_PITCH */
BLEUnsignedIntCharacteristic sndPitchCharacteristic (SCIENCE_KIT_UUID(BLE_CH_SOUNDPI), BLENotify);
#endif

/*
* INPUT A,B
Expand Down
107 changes: 107 additions & 0 deletions examples/SerialDebug/SerialDebug.ino
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
/*
This file is part of the Arduino_ScienceKitCarrier library.

Copyright (c) 2024 Arduino SA

This Source Code Form is subject to the terms of the Mozilla Public
License, v. 2.0. If a copy of the MPL was not distributed with this
file, You can obtain one at http://mozilla.org/MPL/2.0/.

*/

// This examples print all data from Arduino Science Kit R3

#include "Arduino_ScienceKitCarrier.h"

ScienceKitCarrier science_kit;


void setup() {
Serial.begin(115200);
while(!Serial);
science_kit.begin(START_AUXILIARY_THREADS);
}


void loop() {
science_kit.update(ROUND_ROBIN_ENABLED);
Serial.print(science_kit.getAccelerationX());
Serial.print("\t");
Serial.print(science_kit.getAccelerationY());
Serial.print("\t ");
Serial.print(science_kit.getAccelerationZ());
Serial.print("\t| ");
Serial.print(science_kit.getAngularVelocityX());
Serial.print("\t");
Serial.print(science_kit.getAngularVelocityY());
Serial.print("\t");
Serial.print(science_kit.getAngularVelocityZ());
Serial.print("\t| ");
Serial.print(science_kit.getMagneticFieldX());
Serial.print("\t");
Serial.print(science_kit.getMagneticFieldY());
Serial.print("\t");
Serial.print(science_kit.getMagneticFieldZ());
Serial.print("\t|| ");
Serial.print(science_kit.getProximity());
Serial.print("\t");
Serial.print(science_kit.getRed());
Serial.print("\t");
Serial.print(science_kit.getGreen());
Serial.print("\t");
Serial.print(science_kit.getBlue());
Serial.print("\t|| ");
Serial.print(science_kit.getPhase1());
Serial.print("\t");
Serial.print(science_kit.getFrequency1());
Serial.print("\t");
Serial.print(science_kit.getRange1());
Serial.print("\t| ");
Serial.print(science_kit.getPhase2());
Serial.print("\t");
Serial.print(science_kit.getFrequency2());
Serial.print("\t");
Serial.print(science_kit.getRange2());
Serial.print("\t|| ");
Serial.print(science_kit.getInputA());
Serial.print("\t");
Serial.print(science_kit.getInputB());
Serial.print("\t|| ");
Serial.print(science_kit.getVoltage());
Serial.print("\t");
Serial.print(science_kit.getCurrent());
Serial.print("\t| ");
Serial.print(science_kit.getResistance());
Serial.print("\t|| ");

Serial.print(science_kit.getTemperature());
Serial.print("\t");
Serial.print(science_kit.getPressure());
Serial.print("\t");
Serial.print(science_kit.getHumidity());
Serial.print("\t");
Serial.print(science_kit.getAirQuality());
Serial.print("\t|| ");

Serial.print(science_kit.getExternalTemperature());
Serial.print("\t");
Serial.print(science_kit.getExternalTemperatureIsConnected());
Serial.print("\t|| ");

Serial.print(science_kit.getUltrasonicIsConnected());
Serial.print("\t");
Serial.print(science_kit.getDistance());
Serial.print("\t");
Serial.print(science_kit.getTravelTime());
Serial.print("\t|| ");

// Microphone is only available on Arduino Nano RP2040 Connect edition
#ifdef ARDUINO_NANO_RP2040_CONNECT
Serial.print(science_kit.getMicrophoneRMS());
Serial.print("\t|| ");
#endif

Serial.print("\n");

delay(10);
}
4 changes: 2 additions & 2 deletions library.properties
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,6 @@ sentence=Library and firmware for Arduino Science Kit R3
paragraph=This library can be used to flash the Arduino Science Kit R3 and hack it.
category=Communication
url=https://github.com/arduino-libraries/Arduino_ScienceKitCarrier
architectures=mbed,mbed_nano
architectures=mbed,mbed_nano,esp32
includes=Arduino_ScienceKitCarrier.h
depends=Arduino_APDS9960,ArduinoBLE,WiFiNINA,INA2xx,Arduino_BMI270_BMM150,BSEC Software Library,Arduino_GroveI2C_Ultrasonic,OneWireNg
depends=Arduino_APDS9960,ArduinoBLE,WiFiNINA,INA2xx,Arduino_BMI270_BMM150,bsec2,OneWireNg,Arduino_APDS9999
Loading
Loading