- 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コネクタと幅広いセンサーを手軽に試せるようになるでしょう。
]]>