Nano 33 BLE Senseをデータ入力に使う<BLE>⑨9軸慣性センサ ...

 ここまで、複数搭載されているセンサのうち、

  • 温湿度センサのHTS221  BLEペリフェラル BLEセントラル
  • 近接センサ  APDS9960  BLEペリフェラル BLEセントラル
  • マイクMP34DT05  BLEペリフェラル BLEセントラル
  • 気圧センサ LPS22HB BLEペリフェラル BLEセントラル

を扱いました。ここでは最後の9軸慣性センサ LSM9DS1を使います。

 LSM9DS1は、3軸の加速度センサ、3軸のジャイロ・センサ、3軸の磁気(コンパス)センサを搭載しています。総合的にセンサの情報を使って、ロボットやゲーム機器の動きを検知するために使われるようです。

LSM9DS1のおもなスペック

  • 動作電圧 1.9~3.6V
  • 電流 エコ・パワー・モード;1.9mA、ジャイロ・センサ通常動作時4.0mA
  • インターフェース I2C(最大400kHz)、SPI(最大10MHz)
  • 加速度:±2/±4/±6/±8/±16g
  • ジャイロ・センサ:±245/±500/±2000dps
  • 磁気センサ:±4/±8/±12/±16gauss
  • 動作温度範囲 -40~85℃

ライブラリのインストール

 ライブラリ管理でLSM9DS1を入れて検索して出てきたArduino_LSM9DS1をインストールします。

 ライブラリのインストールと同時に、三つのサンプル・スケッチもインストールされました。

接続

 USBケーブルで、PCと接続します。

サンプルSimpleAccelerometer

 実行します。

サンプルSimpleGyroscope

 実行します。

サンプルSimpleMagnetometer

 実行します。

スケッチ-合成

 三つのスケッチの値だけを得るように合体させます。

#include <Arduino_LSM9DS1.h> void setup() { Serial.begin(9600); while (!Serial); Serial.println("\nStarted\n"); if (!IMU.begin()) { Serial.println("Failed to initialize IMU!"); while (1); } Serial.print("Accelerometer sample rate = "); Serial.print(IMU.accelerationSampleRate()); Serial.println("Hz Acceleration in G's X\tY\tZ"); Serial.print("Gyroscope sample rate = "); Serial.print(IMU.gyroscopeSampleRate()); Serial.println("Hz Gyroscope in degrees/second X\tY\tZ"); Serial.print("Magnetic field sample rate = "); Serial.print(IMU.magneticFieldSampleRate()); Serial.println("uT Magnetic Field in uT X\tY\tZ"); } void loop() { float xa, ya, za, xg, yg, zg,xm, ym, zm; Serial.println(""); if (IMU.accelerationAvailable()) { IMU.readAcceleration(xa, ya, za); Serial.println("acceleration "+String(xa)+'\t'+String(ya)+'\t'+String(za)); } if (IMU.gyroscopeAvailable()) { IMU.readGyroscope(xg, yg, zg); Serial.println("gyroscope "+String(xg)+'\t'+String(yg)+'\t'+String(zg)); } if (IMU.magneticFieldAvailable()) { IMU.readMagneticField(xm, ym, zm); Serial.println("magneticField "+String(xm)+'\t'+String(ym)+'\t'+String(zm)); } delay(2000); }

 実行します。

BLE部分を追加-その1

 BLEペリフェラルのスケッチを追加します。9軸の値(実数)をそれぞれCharacteristicのUUIDを設定しているので、記述が大変です。

#include <Arduino_LSM9DS1.h> #include <ArduinoBLE.h> // LSM9DS1 // BLE Service #define Nano33BLESense_Service5_UUID "F000AC00-0451-4000-B000-000000000000" BLEService Nano33BLESense_Service5(Nano33BLESense_Service5_UUID); // BLE Characteristic #define LSM9DS1_AccelerationX_Characteristic_UUID "F000AC01-0451-4000-B000-000000000000" #define LSM9DS1_AccelerationY_Characteristic_UUID "F000AC02-0451-4000-B000-000000000000" #define LSM9DS1_AccelerationZ_Characteristic_UUID "F000AC03-0451-4000-B000-000000000000" #define LSM9DS1_GyroscopeX_Characteristic_UUID "F000AC04-0451-4000-B000-000000000000" #define LSM9DS1_GyroscopeY_Characteristic_UUID "F000AC05-0451-4000-B000-000000000000" #define LSM9DS1_GyroscopeZ_Characteristic_UUID "F000AC06-0451-4000-B000-000000000000" #define LSM9DS1_MagneticFieldX_Characteristic_UUID "F000AC07-0451-4000-B000-000000000000" #define LSM9DS1_MagneticFieldY_Characteristic_UUID "F000AC08-0451-4000-B000-000000000000" #define LSM9DS1_MagneticFieldZ_Characteristic_UUID "F000AC09-0451-4000-B000-000000000000" BLEFloatCharacteristic LSM9DS1_AccelerationX(LSM9DS1_AccelerationX_Characteristic_UUID, BLERead | BLENotify); BLEFloatCharacteristic LSM9DS1_AccelerationY(LSM9DS1_AccelerationY_Characteristic_UUID, BLERead | BLENotify); BLEFloatCharacteristic LSM9DS1_AccelerationZ(LSM9DS1_AccelerationZ_Characteristic_UUID, BLERead | BLENotify); BLEFloatCharacteristic LSM9DS1_GyroscopeX(LSM9DS1_GyroscopeX_Characteristic_UUID, BLERead | BLENotify); BLEFloatCharacteristic LSM9DS1_GyroscopeY(LSM9DS1_GyroscopeY_Characteristic_UUID, BLERead | BLENotify); BLEFloatCharacteristic LSM9DS1_GyroscopeZ(LSM9DS1_GyroscopeZ_Characteristic_UUID, BLERead | BLENotify); BLEFloatCharacteristic LSM9DS1_MagneticFieldX(LSM9DS1_MagneticFieldX_Characteristic_UUID, BLERead | BLENotify); BLEFloatCharacteristic LSM9DS1_MagneticFieldY(LSM9DS1_MagneticFieldY_Characteristic_UUID, BLERead | BLENotify); BLEFloatCharacteristic LSM9DS1_MagneticFieldZ(LSM9DS1_MagneticFieldZ_Characteristic_UUID, BLERead | BLENotify); // BLE Descriptor #define LSM9DS1_AccelerationX_Descriptor_UUID "2901" #define LSM9DS1_GyroscopeX_Descriptor_UUID "2901" #define LSM9DS1_MagneticFieldX_Descriptor_UUID "2901" BLEDescriptor LSM9DS1_AccelerationX_Descriptor(LSM9DS1_AccelerationX_Descriptor_UUID, "Hz Acceleration in G's X Y Z"); BLEDescriptor LSM9DS1_GyroscopeX_Descriptor(LSM9DS1_GyroscopeX_Descriptor_UUID, "Hz Gyroscope in degrees/second X Y Z"); BLEDescriptor LSM9DS1_MagneticFieldX_Descriptor(LSM9DS1_MagneticFieldX_Descriptor_UUID, "uT Magnetic Field in uT X Y Z"); #define localNAME "LSM9DS1" #define DeviceNAME "LSM9DS1_BLE" float previousMillis = 0; // last time value was checked, in ms void setup() { Serial.begin(9600); while (!Serial); Serial.println("\nStarted\n"); if (!IMU.begin()) { Serial.println("Failed to initialize IMU!"); while (1); } Serial.print("Accelerometer sample rate = "); Serial.print(IMU.accelerationSampleRate()); Serial.println("Hz Acceleration in G's X\tY\tZ"); Serial.print("Gyroscope sample rate = "); Serial.print(IMU.gyroscopeSampleRate()); Serial.println("Hz Gyroscope in degrees/second X\tY\tZ"); Serial.print("Magnetic field sample rate = "); Serial.print(IMU.magneticFieldSampleRate()); Serial.println("uT Magnetic Field in uT X\tY\tZ"); if (!BLE.begin()) { Serial.println("starting BLE failed!"); while (1); } BLE.setLocalName(localNAME); BLE.setDeviceName(DeviceNAME); //// set the service5 BLE.setAdvertisedService(Nano33BLESense_Service5); // add characteristic Nano33BLESense_Service5.addCharacteristic(LSM9DS1_AccelerationX); Nano33BLESense_Service5.addCharacteristic(LSM9DS1_AccelerationY); Nano33BLESense_Service5.addCharacteristic(LSM9DS1_AccelerationZ); Nano33BLESense_Service5.addCharacteristic(LSM9DS1_GyroscopeX); Nano33BLESense_Service5.addCharacteristic(LSM9DS1_GyroscopeY); Nano33BLESense_Service5.addCharacteristic(LSM9DS1_GyroscopeZ); Nano33BLESense_Service5.addCharacteristic(LSM9DS1_MagneticFieldX); Nano33BLESense_Service5.addCharacteristic(LSM9DS1_MagneticFieldY); Nano33BLESense_Service5.addCharacteristic(LSM9DS1_MagneticFieldZ); // add descriptor LSM9DS1_AccelerationX.addDescriptor(LSM9DS1_AccelerationX_Descriptor); LSM9DS1_GyroscopeX.addDescriptor(LSM9DS1_GyroscopeX_Descriptor); LSM9DS1_MagneticFieldX.addDescriptor(LSM9DS1_MagneticFieldX_Descriptor); // add service BLE.addService(Nano33BLESense_Service5); // start advertising BLE.advertise(); Serial.println("\nBluetooth device active, waiting for connections..."); } void loop() { // wait for a BLE central BLEDevice central = BLE.central(); // if a central is connected to the peripheral: if (central) { delay(100); Serial.print("\n Connected to central: "); // print the central's BT address: Serial.println(central.address()); // check data every 200ms // while the central is connected: while (central.connected()) { long currentMillis = millis(); // if 200ms have passed, check value: if (currentMillis - previousMillis >= 200) { previousMillis = currentMillis; updateValue(); delay(1000); } } // when the central disconnects Serial.print("Disconnected from central: "); Serial.println(central.address()); goto brout; } brout: ; } void updateValue() { float xa, ya, za, xg, yg, zg, xm, ym, zm; Serial.println(""); if (IMU.accelerationAvailable()) { IMU.readAcceleration(xa, ya, za); Serial.println("acceleration "+String(xa)+'\t'+String(ya)+'\t'+String(za)); } if (IMU.gyroscopeAvailable()) { IMU.readGyroscope(xg, yg, zg); Serial.println("gyroscope "+String(xg)+'\t'+String(yg)+'\t'+String(zg)); } if (IMU.magneticFieldAvailable()) { IMU.readMagneticField(xm, ym, zm); Serial.println("magneticField "+String(xm)+'\t'+String(ym)+'\t'+String(zm)); } // update characteristic LSM9DS1_AccelerationX.writeValue(xa); LSM9DS1_AccelerationY.writeValue(ya); LSM9DS1_AccelerationZ.writeValue(za); LSM9DS1_GyroscopeX.writeValue(xg); LSM9DS1_GyroscopeY.writeValue(yg); LSM9DS1_GyroscopeZ.writeValue(zg); LSM9DS1_MagneticFieldX.writeValue(xm); LSM9DS1_MagneticFieldY.writeValue(ym); LSM9DS1_MagneticFieldZ.writeValue(zm); }

 RLS10で実行しているBLEセントラルの画面です。実数はIEEE 754 binary32のフォーマットで送られてきます。

 Arduino IDEのメモリ関係の情報です。

最大983040バイトのフラッシュメモリのうち、スケッチが324336バイト(32%)を使っています。最大262144バイトのRAMのうち、グローバル変数が71000バイト(27%)を使っていて、ローカル変数で191144バイト使うことができます。

Set binary modeversion()=Arduino Bootloader (SAM-BA extended) 2.0 [Arduino:IKXYZ]Connected at 921600 baudidentifyChip()=nRF52840-QIAAwrite(addr=0,size=0x34)writeWord(addr=0x30,value=0x400)writeWord(addr=0x20,value=0)version()=Arduino Bootloader (SAM-BA extended) 2.0 [Arduino:IKXYZ]Device : nRF52840-QIAAVersion : Arduino Bootloader (SAM-BA extended) 2.0 [Arduino:IKXYZ]Address : 0x0Pages : 256Page Size : 4096 bytesTotal Size : 1024KBPlanes : 1Lock Regions : 0Locked : noneSecurity : falseErase flashchipErase(addr=0)

Done in 0.001 secondsWrite 324344 bytes to flash (80 pages)。。。writeBuffer(scr_addr=0x34, dst_addr=0x4f000, size=0x1000)[==============================] 100% (80/80 pages)Done in 13.555 seconds

BLE部分を追加-その2

 BLEペリフェラルのスケッチを追加します。9軸の値を文字データにしました。二つのデータをカンマで区切りました。

  • Accelerationのx、y
  • AccelerationのzとGyroscopeのx
  • Gyroscopeのy、z
  • Magnetometerのx、y
  • Magnetometerのz

 CharacteristicのUUIDは、9から5へ減少しました。

#include <Arduino_LSM9DS1.h> #include <ArduinoBLE.h> // LSM9DS1 // BLE Service #define Nano33BLESense_Service6_UUID "F000AD00-0451-4000-B000-000000000000" BLEService Nano33BLESense_Service6(Nano33BLESense_Service6_UUID); // BLE Characteristic #define LSM9DS1_AXAY_Characteristic_UUID "F000AD01-0451-4000-B000-000000000000" #define LSM9DS1_AZGX_Characteristic_UUID "F000AD02-0451-4000-B000-000000000000" #define LSM9DS1_GYGZ_Characteristic_UUID "F000AD03-0451-4000-B000-000000000000" #define LSM9DS1_MXMY_Characteristic_UUID "F000AD04-0451-4000-B000-000000000000" #define LSM9DS1_MZ_Characteristic_UUID "F000AD05-0451-4000-B000-000000000000" BLEStringCharacteristic LSM9DS1_AXAY(LSM9DS1_AXAY_Characteristic_UUID, BLERead | BLENotify, 37); BLEStringCharacteristic LSM9DS1_AZGX(LSM9DS1_AZGX_Characteristic_UUID, BLERead | BLENotify, 37); BLEStringCharacteristic LSM9DS1_GYGZ(LSM9DS1_GYGZ_Characteristic_UUID, BLERead | BLENotify, 37); BLEStringCharacteristic LSM9DS1_MXMY(LSM9DS1_MXMY_Characteristic_UUID, BLERead | BLENotify, 37); BLEStringCharacteristic LSM9DS1_MZ(LSM9DS1_MZ_Characteristic_UUID, BLERead | BLENotify, 37); // BLE Descriptor #define LSM9DS1_AXAY_Descriptor_UUID "2901" #define LSM9DS1_AZGX_Descriptor_UUID "2901" #define LSM9DS1_MXMY_Descriptor_UUID "2901" #define LSM9DS1_MZ_Descriptor_UUID "2901" BLEDescriptor LSM9DS1_AXAY_Descriptor(LSM9DS1_AXAY_Descriptor_UUID, "Hz Acceleration in G's X Y"); BLEDescriptor LSM9DS1_AZGX_Descriptor(LSM9DS1_AZGX_Descriptor_UUID, "Hz Acceleration in G's Z, Gyroscope in degrees/second X"); BLEDescriptor LSM9DS1_GYGZ_Descriptor(LSM9DS1_MXMY_Descriptor_UUID, "Hz Gyroscope in degrees/second Y Z"); BLEDescriptor LSM9DS1_MXMY_Descriptor(LSM9DS1_MXMY_Descriptor_UUID, "uT Magnetic Field in uT X Y"); BLEDescriptor LSM9DS1_MZ_Descriptor(LSM9DS1_MZ_Descriptor_UUID, "uT Magnetic Field in uT Z"); #define localNAME "LSM9DS1" #define DeviceNAME "LSM9DS1_BLE" float previousMillis = 0; // last time value was checked, in ms void setup() { Serial.begin(9600); while (!Serial); Serial.println("\nStarted\n"); if (!IMU.begin()) { Serial.println("Failed to initialize IMU!"); while (1); } Serial.print("Accelerometer sample rate = "); Serial.print(IMU.accelerationSampleRate()); Serial.println("Hz Acceleration in G's X\tY\tZ"); Serial.print("Gyroscope sample rate = "); Serial.print(IMU.gyroscopeSampleRate()); Serial.println("Hz Gyroscope in degrees/second X\tY\tZ"); Serial.print("Magnetic field sample rate = "); Serial.print(IMU.magneticFieldSampleRate()); Serial.println("uT Magnetic Field in uT X\tY\tZ"); if (!BLE.begin()) { Serial.println("starting BLE failed!"); while (1); } BLE.setLocalName(localNAME); BLE.setDeviceName(DeviceNAME); //// set the service6 BLE.setAdvertisedService(Nano33BLESense_Service6); // add characteristic Nano33BLESense_Service6.addCharacteristic(LSM9DS1_AXAY); Nano33BLESense_Service6.addCharacteristic(LSM9DS1_AZGX); Nano33BLESense_Service6.addCharacteristic(LSM9DS1_GYGZ); Nano33BLESense_Service6.addCharacteristic(LSM9DS1_MXMY); Nano33BLESense_Service6.addCharacteristic(LSM9DS1_MZ); // add descriptor LSM9DS1_AXAY.addDescriptor(LSM9DS1_AXAY_Descriptor); LSM9DS1_AZGX.addDescriptor(LSM9DS1_AZGX_Descriptor); LSM9DS1_GYGZ.addDescriptor(LSM9DS1_MXMY_Descriptor); LSM9DS1_MXMY.addDescriptor(LSM9DS1_MXMY_Descriptor); LSM9DS1_MZ.addDescriptor(LSM9DS1_MZ_Descriptor); // add service BLE.addService(Nano33BLESense_Service6); // start advertising BLE.advertise(); Serial.println("\nBluetooth device active, waiting for connections..."); } void loop() { // wait for a BLE central BLEDevice central = BLE.central(); // if a central is connected to the peripheral: if (central) { delay(100); Serial.print("\n Connected to central: "); // print the central's BT address: Serial.println(central.address()); // check data every 200ms // while the central is connected: while (central.connected()) { long currentMillis = millis(); // if 200ms have passed, check value: if (currentMillis - previousMillis >= 200) { previousMillis = currentMillis; updateValue(); delay(1000); } } // when the central disconnects Serial.print("Disconnected from central: "); Serial.println(central.address()); goto brout; } brout: ; } void updateValue() { float xa, ya, za, xg, yg, zg, xm, ym, zm; Serial.println(""); if (IMU.accelerationAvailable()) { IMU.readAcceleration(xa, ya, za); Serial.println("acceleration "+String(xa)+'\t'+String(ya)+'\t'+String(za)); } if (IMU.gyroscopeAvailable()) { IMU.readGyroscope(xg, yg, zg); Serial.println("gyroscope "+String(xg)+'\t'+String(yg)+'\t'+String(zg)); } if (IMU.magneticFieldAvailable()) { IMU.readMagneticField(xm, ym, zm); Serial.println("magneticField "+String(xm)+'\t'+String(ym)+'\t'+String(zm)); } // update characteristic LSM9DS1_AXAY.writeValue(String(xa)+","+String(ya)); LSM9DS1_AZGX.writeValue(String(za)+","+String(xg)); LSM9DS1_GYGZ.writeValue(String(yg)+","+String(zg)); LSM9DS1_MXMY.writeValue(String(xm)+","+String(ym)); LSM9DS1_MZ.writeValue(String(zm)); }

 RLS10で実行しているBLEセントラルの画面です。どうも最大値は-xxx.xxが最大桁数のようです。x、y、zの値をまとめて送っても桁あふれはないように見えます。

 Arduino IDEのメモリ関係の情報です。

最大983040バイトのフラッシュメモリのうち、スケッチが324384バイト(32%)を使っています。最大262144バイトのRAMのうち、グローバル変数が70976バイト(27%)を使っていて、ローカル変数で191168バイト使うことができます。

Set binary modeversion()=Arduino Bootloader (SAM-BA extended) 2.0 [Arduino:IKXYZ]Connected at 921600 baudidentifyChip()=nRF52840-QIAAwrite(addr=0,size=0x34)writeWord(addr=0x30,value=0x400)writeWord(addr=0x20,value=0)version()=Arduino Bootloader (SAM-BA extended) 2.0 [Arduino:IKXYZ]Device : nRF52840-QIAAVersion : Arduino Bootloader (SAM-BA extended) 2.0 [Arduino:IKXYZ]Address : 0x0Pages : 256Page Size : 4096 bytesTotal Size : 1024KBPlanes : 1Lock Regions : 0Locked : noneSecurity : falseErase flashchipErase(addr=0)

Done in 0.000 secondsWrite 324392 bytes to flash (80 pages)[ ] 0% (0/80 pages)write(addr=0x34,size=0x1000)。。。[==============================] 100% (80/80 pages)

BLE部分を追加-その3

 BLEペリフェラルのスケッチを追加します。9軸の値を文字データにしました。UUIDは三つになります。

  • Accelerationのx、y、z
  • Gyroscopeのx、y、z
  • Magnetometerのx、y、z
#include <Arduino_LSM9DS1.h> #include <ArduinoBLE.h> // LSM9DS1 // BLE Service #define Nano33BLESense_Service7_UUID "F000AE00-0451-4000-B000-000000000000" BLEService Nano33BLESense_Service7(Nano33BLESense_Service7_UUID); // BLE Characteristic #define LSM9DS1_Acceleration_Characteristic_UUID "F000AE01-0451-4000-B000-000000000000" #define LSM9DS1_Gyroscope_Characteristic_UUID "F000AE02-0451-4000-B000-000000000000" #define LSM9DS1_Magnetic_Characteristic_UUID "F000AE03-0451-4000-B000-000000000000" BLEStringCharacteristic LSM9DS1_Acceleration(LSM9DS1_Acceleration_Characteristic_UUID, BLERead | BLENotify, 37); BLEStringCharacteristic LSM9DS1_Gyroscope(LSM9DS1_Gyroscope_Characteristic_UUID, BLERead | BLENotify, 37); BLEStringCharacteristic LSM9DS1_Magnetic(LSM9DS1_Magnetic_Characteristic_UUID, BLERead | BLENotify, 37); // BLE Descriptor #define LSM9DS1_Acceleration_Descriptor_UUID "2901" #define LSM9DS1_Gyroscope_Descriptor_UUID "2901" #define LSM9DS1_Magnetic_Descriptor_UUID "2901" BLEDescriptor LSM9DS1_Acceleration_Descriptor(LSM9DS1_Acceleration_Descriptor_UUID, "Hz Acceleration in G's X Y Z"); BLEDescriptor LSM9DS1_Gyroscope_Descriptor(LSM9DS1_Gyroscope_Descriptor_UUID, "Hz Gyroscope in degrees/second X Y Z"); BLEDescriptor LSM9DS1_Magnetic_Descriptor(LSM9DS1_Magnetic_Descriptor_UUID, "uT Magnetic Field in uT X Y Z"); #define localNAME "LSM9DS1" #define DeviceNAME "LSM9DS1_BLE" float previousMillis = 0; // last time value was checked, in ms void setup() { Serial.begin(9600); while (!Serial); Serial.println("\nStarted\n"); if (!IMU.begin()) { Serial.println("Failed to initialize IMU!"); while (1); } Serial.print("Accelerometer sample rate = "); Serial.print(IMU.accelerationSampleRate()); Serial.println("Hz Acceleration in G's X\tY\tZ"); Serial.print("Gyroscope sample rate = "); Serial.print(IMU.gyroscopeSampleRate()); Serial.println("Hz Gyroscope in degrees/second X\tY\tZ"); Serial.print("Magnetic field sample rate = "); Serial.print(IMU.magneticFieldSampleRate()); Serial.println("uT Magnetic Field in uT X\tY\tZ"); if (!BLE.begin()) { Serial.println("starting BLE failed!"); while (1); } BLE.setLocalName(localNAME); BLE.setDeviceName(DeviceNAME); //// set the service6 BLE.setAdvertisedService(Nano33BLESense_Service7); // add characteristic Nano33BLESense_Service7.addCharacteristic(LSM9DS1_Acceleration); Nano33BLESense_Service7.addCharacteristic(LSM9DS1_Gyroscope); Nano33BLESense_Service7.addCharacteristic(LSM9DS1_Magnetic); // add descriptor LSM9DS1_Acceleration.addDescriptor(LSM9DS1_Acceleration_Descriptor); LSM9DS1_Gyroscope.addDescriptor(LSM9DS1_Gyroscope_Descriptor); LSM9DS1_Magnetic.addDescriptor(LSM9DS1_Magnetic_Descriptor); // add service BLE.addService(Nano33BLESense_Service7); // start advertising BLE.advertise(); Serial.println("\nBluetooth device active, waiting for connections..."); } void loop() { // wait for a BLE central BLEDevice central = BLE.central(); // if a central is connected to the peripheral: if (central) { delay(100); Serial.print("\n Connected to central: "); // print the central's BT address: Serial.println(central.address()); // check data every 200ms // while the central is connected: while (central.connected()) { long currentMillis = millis(); // if 200ms have passed, check value: if (currentMillis - previousMillis >= 200) { previousMillis = currentMillis; updateValue(); delay(1000); } } // when the central disconnects Serial.print("Disconnected from central: "); Serial.println(central.address()); goto brout; } brout: ; } void updateValue() { float xa, ya, za, xg, yg, zg, xm, ym, zm; Serial.println(""); if (IMU.accelerationAvailable()) { IMU.readAcceleration(xa, ya, za); Serial.println("acceleration "+String(xa)+'\t'+String(ya)+'\t'+String(za)); } if (IMU.gyroscopeAvailable()) { IMU.readGyroscope(xg, yg, zg); Serial.println("gyroscope "+String(xg)+'\t'+String(yg)+'\t'+String(zg)); } if (IMU.magneticFieldAvailable()) { IMU.readMagneticField(xm, ym, zm); Serial.println("magneticField "+String(xm)+'\t'+String(ym)+'\t'+String(zm)); } // update characteristic LSM9DS1_Acceleration.writeValue(String(xa)+","+String(ya)+","+String(za)); LSM9DS1_Gyroscope.writeValue(String(xg)+","+String(yg)+","+String(zg)); LSM9DS1_Magnetic.writeValue(String(xm)+","+String(ym)+","+String(zm)); }

 RLS10で実行しているBLEセントラルの画面です。

 Arduino IDEのメモリ関係の情報です。

最大983040バイトのフラッシュメモリのうち、スケッチが324104バイト(32%)を使っています。最大262144バイトのRAMのうち、グローバル変数が70928バイト(27%)を使っていて、ローカル変数で191216バイト使うことができます。

Set binary modeversion()=Arduino Bootloader (SAM-BA extended) 2.0 [Arduino:IKXYZ]Connected at 921600 baudidentifyChip()=nRF52840-QIAAwrite(addr=0,size=0x34)writeWord(addr=0x30,value=0x400)writeWord(addr=0x20,value=0)version()=Arduino Bootloader (SAM-BA extended) 2.0 [Arduino:IKXYZ]Device : nRF52840-QIAAVersion : Arduino Bootloader (SAM-BA extended) 2.0 [Arduino:IKXYZ]Address : 0x0Pages : 256Page Size : 4096 bytesTotal Size : 1024KBPlanes : 1Lock Regions : 0Locked : noneSecurity : falseErase flashchipErase(addr=0)

Done in 0.000 secondsWrite 324112 bytes to flash (80 pages)[ ] 0% (0/80 pages)write(addr=0x34,size=0x1000)。。。[==============================] 100% (80/80 pages)Done in 13.537 seconds

メモリの使用量

 UUIDが少ないほど、メモリの使用量は、わずかに減少しています。顕著ではありません。

  • その1 フラッシュメモリ;324336バイト(32%)、RAM;71000バイト(27%)
  • その2 フラッシュメモリ;324384バイト(32%)、RAM;70976バイト(27%)
  • その3 フラッシュメモリ;324104バイト(32%)、RAM;70928バイト(27%)

Tag » Arduino Nano 33 Ble Imu Sample Rate