Nicla Sense MEプラスArduino IDEでセンサ・インターフェーシング


　前回、Arduino.ccからNicla Sense MEのライブラリをダウンロードしました。現時点で、古いです。gasとか、実際のボードに入っているセンサIDとはすでに異なっています。BLEで利用したセンサデータは問題ありませんでした。
　新しいライブラリを取得します。
　　　https://github.com/arduino-libraries/Arduino_BHY2
C:\Users\ユーザ名\Documents\Arduino\librariesにコピーします。フォルダ名はArduino_BHY2です。古いのは、別のドライブに移動させておきます。
（参考URL）https://community.bosch-sensortec.com/t5/MEMS-sensors-forum/BME688-Nicla-Sense-me-how-to-access-the-data/m-p/46319

###サンプルを動かす
　　C:\Users\ユーザ名\Documents\Arduino\libraries\Arduino_BHY2\examples\Standalone
に入っているStandalone.inoをダブルクリックし、Arduino IDEを立ち上げ、コンパイルしてボードに書き込みます。
　次の値を読み出しています。右側のデータはセンサIDです。
　　C:\Users\yoshi\Documents\Arduino\libraries\Arduino_BHY2\src\sensors
のSensorID.hに書かれています。数値表現は、マニュアル
　　https://www.bosch-sensortec.com/media/boschsensortec/downloads/datasheets/bst-bhi260ap-ds000.pdf
のTable88に掲載されています。

- Acceleration　SENSOR_ID_ACC
- Gyroscope　SENSOR_ID_GYRO
- Temperature　SENSOR_ID_TEMP
- Gas　SENSOR_ID_GAS

![2021-10-14 (6).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/84b52aa6-0817-4e76-bda3-d485d19f657c.png)



###直接読めるセンサと計算結果のデータ
　温度、湿度、気圧、ガス、加速度、磁気、ジャイロは、直接センサのデータを読み出します。
　IMUのデータから計算したオイラー角、クオータニオンは、計算値を読み出します。

```C
#include "Arduino.h"
#include "Arduino_BHY2.h"

Sensor  temp(SENSOR_ID_TEMP);
SensorOrientation   ori(SENSOR_ID_ORI);
Sensor   hum(SENSOR_ID_HUM);
Sensor   baro(SENSOR_ID_BARO);
SensorXYZ accel(SENSOR_ID_ACC);
SensorXYZ gyro(SENSOR_ID_GYRO);
SensorQuaternion quater(SENSOR_ID_RV);
SensorXYZ magnet(SENSOR_ID_MAG);
Sensor gas(SENSOR_ID_GAS);


void setup(){
  Serial.begin(9600);
  while(!Serial);

  BHY2.begin();
  accel.begin();
  gyro.begin();
  temp.begin();
  gas.begin();
  
  ori.begin();
  hum.begin();
  baro.begin();
  quater.begin();
  magnet.begin();
}

void loop(){
  static auto printTime = millis();
  BHY2.update();

  if (millis() - printTime >= 2000) {
    printTime = millis();
    Serial.println("");
    Serial.println(String("gas ohm? : ") + String(gas.value(), 1));
    Serial.println(String("Temperature: ") + String(temp.value(), 1));
    Serial.println(String("Humidity: ") + String(hum.value(), 1));
    Serial.println(String("Barometer : ") + String(baro.value(), 1));
    Serial.println(String("Acceleration :x,y,z ") + String(accel.x()) + ", " +  String(accel.y()) + ", " + String(accel.z()));
    Serial.println(String("Gyroscope :x,y,z ") + String(gyro.x()) + ", " +  String(gyro.y()) + ", " + String(gyro.z()));
    Serial.println(String("Magnetometer :x,y,z ") + String(magnet.x()) + ", " +  String(magnet.y()) + ", " + String(magnet.z()));
    Serial.println(String("Orientation(Euler):head,pitch,roll ") + String(ori.heading(), 3)+", "+ String(ori.pitch(), 3)+", "+ String(ori.roll(), 3));
    Serial.println(String("Quaternion :x,y,z,w ") + String(quater.x()) + ", " +  String(quater.y()) + ", " + String(quater.z())+ ", "+ String(quater.w()));

//    Serial.println(String("acceleration: ") + accel.toString());
//    Serial.println(String("gyroscope: ") + gyro.toString());
//    Serial.println(String("magnet: ") + magnet.toString());    
  }
}
```

　実行中の様子です。執筆時点で、Orientation(Euler)、Quaternion などの値は、時間が経過すると0になることがあります。
　湿度はほかの湿度計の表示に比べて低めに出ています。ボードを手で握れば、温度と湿度は上がっていくので、問題なく動作はしているようです。
　GasはCO2の値ではなく、環境ガスの値のようです。別のセンサで測ったCO2の値は約700ppmぐらいでした。

![2021-10-14 (5).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/407635/9a269ac4-cd9f-17a5-57a7-2f46b5aa5904.png)