- Raspberry Pi
2JCIE-EV01-RP1 - Arduino
2JCIE-EV01-AR1 - Adafruit
2JCIE-EV01-FT1
今回はこの中からRaspberry Pi向け(2JCIE-EV01-RP1)について試してみました。
2JCIE-EV01について
2JCIE-EV01には以下の6つのセンサが搭載されています。
- 温湿度センサ
- 周辺光センサ
- MEMS絶対圧センサ
- MEMSデジタルモーションセンサ
- MEMSマイクロフォン
そして、さらに拡張センサもサポートされています。現在、以下のセンサを接続できます。
- MEMS非接触温度センサ
- MEMSフローセンサ
- 限定反射形センサ
- ダストセンサ
Qwiicコネクタも備わっていますので、様々なセンサとの接続も可能です。
詳しくはセンサ評価ボード – 2JCIE-EV | オムロン電子部品情報サイト – Japanをご覧ください。
デモコードを試す
MEMSデジタルモーションセンサ
モーションセンサーを使うことでX/Y/Z軸の加速度を測定できます。2jcieev01-raspberrypi/2jcieev01-accl.c at master · omron-devhub/2jcieev01-raspberrypi · GitHubの抜粋です。
#define LIS2DW_FIFO_SIZE 1
#define PIN_CSB 8
int lis2dw_read_and_avg(int16_t* accl) {
uint8_t accbuf[1 + 3 * 2 * LIS2DW_FIFO_SIZE] = {0};
int32_t accsum[3] = {0, 0, 0};
accbuf[0] = LIS2DW_REG_OUT_X_L;
digitalWrite(PIN_CSB, LOW);
wiringPiSPIDataRW(0, accbuf, sizeof(accbuf));
digitalWrite(PIN_CSB, HIGH);
for (uint8_t i = 0; i < LIS2DW_FIFO_SIZE; i++) {
int n = i * 6;
accsum[0] += (int32_t)conv8s_s16_le(accbuf, n + 1); // 1=skip addr.
accsum[1] += (int32_t)conv8s_s16_le(accbuf, n + 3);
accsum[2] += (int32_t)conv8s_s16_le(accbuf, n + 5);
}
accl[0] = (int16_t)(accsum[0] / LIS2DW_FIFO_SIZE);
accl[1] = (int16_t)(accsum[1] / LIS2DW_FIFO_SIZE);
accl[2] = (int16_t)(accsum[2] / LIS2DW_FIFO_SIZE);
return 0;
}
上記のように取得することで、X/Y/Z軸の値を取得できます。
$ ./2jcieev01-accl -825.2, -71.8, -545.4
MEMS絶対圧センサ
MEMS絶対圧センサのコードの抜粋です。
int baro_2smpb02e_read(uint32_t* pres, int16_t* temp,
uint32_t* dp, uint32_t* dt) {
bool ret;
uint8_t rbuf[6] = {0};
uint32_t rawtemp, rawpres;
ret = i2c_read_reg8(
BARO_2SMPB02E_ADDRESS, BARO_2SMPB02E_REGI2C_PRES_TXD2,
rbuf, sizeof(rbuf));
if (ret) {
return ret;
}
*dp = rawpres = conv8s_s24_be(rbuf[0], rbuf[1], rbuf[2]);
*dt = rawtemp = conv8s_s24_be(rbuf[3], rbuf[4], rbuf[5]);
return baro_2smpb02e_output_compensation(rawtemp, rawpres, pres, temp);
}
サンプルプログラムを実行すると、気圧や温度が取得できます。
$ ./2jcieev01-baro 100523.0, 31.680, a3acc3, 676ef0, retun code: 0
温湿度センサ
温湿度センサは絶対圧センサと同じく温度の取得、そして湿度が取得できます。コードはこちらです。
int32_t sht30_read_triggered_TRH_x100(int32_t *value_T, int32_t *value_RH) {
int32_t result;
uint16_t value_T_raw = 0;
uint16_t value_RH_raw = 0;
/* Measure the temperature value */
result = sht30_read_triggered_value(&value_T_raw, &value_RH_raw);
if (result) {
return result;
}
/* Convert the value to centidegrees Celsius */
*value_T = sht30_convert_temperature_value_x100(value_T_raw);
*value_RH = sht30_convert_humidity_value_x100(value_RH_raw);
return 0;
}
こちらは湿度、そして温度が取れます。
$ ./2jcieev01-humi 58.16, 31.3, return code:0
周辺光センサ
いわゆる照度センサです。コードはこちらで確認できます。
uint32_t opt3001_read_data(uint16_t *light_x100) {
uint32_t err_code = 0;
uint16_t value_data;
/* Measure the temperature value */
err_code = opt3001_read_triggered_value(&value_data);
if (err_code) {
return err_code;
}
*light_x100 = (uint16_t)(opt3001_convert_lux_value_x100(value_data) / 100);
return 0;
}
実行すると、照度がルクスで取得できます。この値は出力時に1/100されているようです。
$ ./2jcieev01-illm
0.82, return code: 0
注意点
2JCIE-EV01はあくまでもセンサの評価ボードであり、これを製品に組み込むことはできません。
まとめ
各種センサを手軽につないで検証、評価するのに2JCIE-EV01はぴったりです。IoTプロジェクトにおいてセンサの存在は必須と言えます。2JCIE-EV01を使えば元々実装されているセンサに拡張センサ、そしてQwiicコネクタと幅広いセンサーを手軽に試せるようになるでしょう。
]]>
