背景
Raspberry Piで遊ぶ会#18.04を開催しました。その会のテーマにした、9軸センサMPU9250の使い方を共有します。
なお、ターミナルやviの操作コマンドは、こちらの記事を参考にしてください。
使ったもの
- Rasbian(Stretch)が動く状態のRaspberry Pi
ssh接続か、モニタ + キーボード(+ マウス)で動作させられる状況にしてください。 - MPU9250
9軸センサです。 - ハンダゴテ + ハンダ
MPU9250へのピンの取り付けに利用しました。 - ブレッドボード + オスメスジャンパワイヤ
Raspberry PiとMPU9250を接続するのに利用しました。
Raspberry Piとの接続
Raspberry PiはI2C通信用のピンを備えています。I2Cとは、通信方式の一つです。
MPU9250はI2C通信で情報をやり取りできるので、Raspberry PiとMPU9250をI2C通信できるように接続します。
Raspberry Pi | MPU9250 |
---|---|
3V3 | VCC |
GPIO02(SDA) | SCA |
GPIO03(SCL) | SCL |
GND | GND |
実際に繋ぐと、このようになります。
I2Cを有効化
Raspberry PiのI2Cはデフォルトでは無効になっているので、設定を変更して有効にします。ここではraspi-configというRaspberry Piの便利設定ツールを使った設定変更方法を説明します。
(デスクトップモードの設定画面からも、同様の変更をできます。)
下記のコマンドを入力して、raspi-configを起動します。
raspi-config
上下矢印とエンターキーを使って、Interfacing Options -> I2C -> Yes を選択します。
これによる、I2Cが有効になりました。
設定できたら、左右矢印でFinishを選択して、エンターキーを押して、raspi-configを終わります。
MPU9250がI2Cデバイスとして認識されていることを確認
Raspberry PiのI2Cを有効にしたら、MPU9250がI2Cデバイスとして見えていることを確認します。I2Cに関するプログラムをインストールします。
sudo apt install i2c-tools
下記のコマンドで、I2Cを通して認識されているデバイスの一覧を表示します。
sudo i2cdetect -y 1
68番が存在していれば、期待通りに接続されていると判断できます。
68番が出てこなければ、Raspberry PiとMPU9250の配線が合っているか確認してください。
プログラムの準備
MPU9250の信号をPythonというプログラミング言語で読み取れるライブラリを公開してくれている方がいるので、それを利用します。関連プログラムをインストールします。
(これらは、Raspbian Liteでなければ、デフォルトでインストールされている)
sudo apt install python-pip python-smbus
ライブラリをインストールします。
sudo pip install FaBo9Axis_MPU9250
Pythonのプログラムを作る前に、作業用ディレクトリを作成します。
mkdir ~/mpu9250_test cd ~/mpu9250_test
プログラムを作成します。
vi scan.py
~/mpu9250_test/scan.py
import FaBo9Axis_MPU9250 import time mpu9250 = FaBo9Axis_MPU9250.MPU9250() while True: accel = mpu9250.readAccel() print("accel X: " + str(accel['x'])) time.sleep(0.1)
実行します。
python scan.py
成功すれば、このようにx軸の加速度が表示されます。
プロブラムは「Ctrl + c」で止めれます。
他の機能も使いたい場合、ライブラリと一緒に公開されているサンプルプログラムが参考になると思います。
まとめ
Raspberry PiからI2C通信を通してMPU9250のデータを取得できました。参考になれば嬉しいです。
参考
Configuring Your Pi for I2C変更履歴
2018.05.12記事のタイトルを「共有情報」から取り組む内容に変更しました。
お教えください
返信削除MPU9250.pyの中のCodeの下記のものが
print "ax = ", (accel['x'])
^
SyntaxError: invalid syntax がでます。print(.......)でないといけないと思いますが
それを修正して実行すると下記のようになります。
bus.write_byte_data(self.address, PWR_MGMT_1, 0x00)
OSError: [Errno 121] Remote I/O error
全くお手上げです。python3.5の環境です。
よろしくお願いいたします。
ライブラリのmain.pyにはprintは無く、example/read9axis.pyにprintがありましたが、python3に対応する記述になっているようです。
削除ライブラリが古い可能性があるので、下記のコマンドでライブラリを更新してみてはどうでしょう?
pip3 install -U FaBo9Axis_MPU9250