気圧センサーを操作する
Raspberry Piにi2c-toolsをインストールしたので、これを使ってコマンドラインから気圧測定をしてみよう。前ページのi2cdetectコマンドで確認したように、「0x5c」に気圧センサーがあるはずなので、以下のように入力する。1行を入力したらEnterキーを押し、それを繰り返す。
sudo i2cset -y 1 0x5c 0x20 0x90
sudo i2cget -y 1 0x5c 0x0f
sudo i2cget -y 1 0x5c 0x28
sudo i2cget -y 1 0x5c 0x29
sudo i2cget -y 1 0x5c 0x2a
1行目のコマンドは、1秒ごとに測定を行うという指示だ。2行目のコマンドを入力、実行すると、「0xbb」と返答がある。LPS331に付属する資料を読むと、LPS331は0x0fというレジスタ(メモリの一種)を読み出すと、0xbbを返す仕様だ。3行目から5行目を実行すると、それぞれ16進数の値が得られる。
気圧センサーのLPS331がRaspberry piから認識されている場合は、コマンドを入力。認識されていない場合は、前ページに戻って確認のこと。2行目で「0x0f」レジスタを読み取ると、返ってくる値は「0xbb」となるはず。3行目から5行目の結果は、実行時の気圧によって異なる |
ここでWindows PCの電卓アプリケーションを使って、上記のコマンドで得られた結果から、気圧を計算してみよう(今回はWindows 7かWindows 8.1の電卓を使用)。電卓を起動したら、メニューバーの「表示」-「プログラマ」でプログラマモードに切り替える。
次に「16進」のラジオボタンをクリックし、上記の3行目から5行目の結果を電卓に入力だ。入力の順序は、5行目の結果(0x2aの値)、4行目の結果(0x29の値)、3行目の結果(0x28の値)となる。「0x」は16進数を意味するので、今回の場合は「3ec222」と入力する(電卓のアルファベットは大文字なので「3EC222」と表示)。
Windowsの電卓で気圧を計算。まずプログラマモードにして、左の「16進」ラジオボタンを押してから、Raspberry Piのコマンド入力で得られた数値を入力 |
「10進」ラジオボタンを押して10進数に変換してから、MSボタンをクリック |
続いて「10進」のラジオボタンをクリックしたのち、「MS」(メモリストア)をクリックだ。さらに、電卓のメニューバーで「表示」-「関数電卓」に切り替えて、「MR」(メモリリコール)をクリック。先ほどMS(メモリストア)した「4112930」という値が呼び出されたら、「/」「4096」「=」と入力して「4096」で割り算する。今回の結果は「約1004」で、 これが計測時の気圧、約1,004hPa(ヘクトパスカル)だ。
ここまで終わったら、再び上記のコマンドを3つ実行してみよう(3行目から5行目)。おそらく、さっきと数字が違うはずだ。これは現在地の気圧が変化したというより、センサーのふらつきだ。あまり気にしなくてよい。
これをシェルスクリプトで書いてみたのが下のプログラムだ。実行すると気圧が表示される。なお、実行するためには、あらかじめ「bc」というモジュールを「sudo apt-get install bc」コマンドでインストールしておく必要がある。シェルスクリプトの動かし方は、本連載の第2回を参照のこと。
#!/bin/bash
# LPS331動作テスト
WHO_AM_I=`sudo i2cget -y 1 0x5c 0x0f`
if [ $WHO_AM_I != "0xbb" ]; then
echo "device NG"
exit 1
fi
### set active mode
sudo i2cset -y 1 0x5c 0x20 0x90
### read pres data
PressOut_XL=`sudo i2cget -y 1 0x5c 0x28`
PressOut_L=`sudo i2cget -y 1 0x5c 0x29`
PressOut_H=`sudo i2cget -y 1 0x5c 0x2a`
RawDatHex=`echo "0x${PressOut_H:2:2}${PressOut_L:2:2}${PressOut_XL:2:2}"`
RawDatDec=`printf %d $RawDatHex`
echo "scale=2;$RawDatDec/4096" |bc
### set power down
sudo i2cset -y 1 0x5c 0x20 0x00