RaspberryPi[9] ラズパイで KKHMF GY-521 MPU-6050 ジャイロ加速度計 IMUを i2c を制御する。

ラズパイから見えるようにする。

MPU-6050は 6 CH ジャイロ加速度計 です。これをラズパイで制御させた時の覚書です。まずは、ラズパイのI2Cを有効にします。

sudo raspi-config コマンドを使ってInterface Optionsにある P5 I2C をSelect して有効にします。MPU-6050をラズパイのI2C端子と電源に繋いで、

ラズパイピン番号MPU6050
1pinVCC
3pinSDA
5pinSCL
6pinGND

i2cdetect -y 1 と打つと正しくつながって入ればI2Cのアドレスが表示されます。

プログラム各前準備

今回は、C言語で作りますので、DIO制御で で有名な、WiringPiを使用します。まずは、WiringPiをコンパイルします。

その前に、i2cのライブラリをインストールします。

$ sudo apt-get install libi2c-dev

次に WiringPi のコンパイルをするために、以下のコマンドを打ちます。

$ git clone https://github.com/WiringPi/WiringPi.git

WiringPi のフォルダができているので、そこに入り、コンパイルを行います。

$ cd WiringPi
$ ./build


WiringPi がインストールできると、gpio コマンドが使えるので、以下のように正しくインストールができているか確認できます。
Copyright (c) 2012-2018 Gordon Henderson
This is free software with ABSOLUTELY NO WARRANTY.
For details type: gpio -warranty

Raspberry Pi Details:
  Type: Pi 4B, Revision: 02, Memory: 4096MB, Maker: Sony
  * Device tree is enabled.
  *--> Raspberry Pi 4 Model B Rev 1.2
  * This Raspberry Pi supports user-level GPIO access.

Wiring Piのリファレンスはここです。

コンパイルの仕方。

gcc -Wall -o XXX XXX.c -lwiringPi -lm

-lm オプションは math.h を使用するときに使います。

I2Cの制御

I2Cの使い方は、基本下記のくりかえしです。

  • アドレスを指定して通信を開始 Wire.beginTransmission(I2Cアドレス);
  • コマンド           Wire.write(レジスタアドレス);
  • コマンド           Wire.write(データ);
  • 通信の終了          Wire.endTransmission();

レジスターマップは以下からダウンロードできます。

MPU-6000 and MPU-6050 Register Map and Descriptions Revision 4.2