備忘録

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  1. --/--/--(--) --:--:--|
  2. スポンサー広告

Rasppbbery Pi でI2C通信(C言語で実動作 by wiringPi)

昨日に続き、I2C通信をします。

今までのをまとめます
Rasppbbery Pi でI2C通信(シェルで実動作)
http://nanicananica.blog.fc2.com/blog-entry-21.html
RaspberryPi I2C通信
http://nanicananica.blog.fc2.com/blog-entry-17.html

今回はwiringPiライブラリを利用します。
回路の構成は、前回とおりで、引き続き3軸ジャイロセンサを動かします

ドキュメントにあったとおりに進めていきます
1.libi2c-devをインストール
$ sudo apt-get install libi2c-dev

2.カーネルにi2cをロード
$ sudo gpio i2c


3.wiringPiのリビルド
 自分の場合必要なかったので、
 動かなかったらやってみる感じでよいのではないかと思います。

 ちなみに、このリビルド作業は、バッチが公開されているみたいです。↓
 http://github.com/WiringPi/WiringPi/blob/master/build
 
 wiringPi-98bcb20/wiringPi ディレクトリに下りて
 $ make clean
 $ sudo make uninstall
 wiringPi-98bcb20/gpio ディレクトリに行き
$ meke clean
 $ sudo make uninstall

 再びwiringPi-98bcb20/wiringPi ディレクトリに行き
$ meke i2c
$ make
 $ sudo make install

 wiringPi-98bcb20/gpio ディレクトリに行き
$ make
$ make
$ sudo make install

 wiringPi-98bcb20/へ行き
 ./build

4. コーディング

↓のソースコードを作りました
 # I2Cのバスアドレスは、個々に違うので確認して変更してください
 # 私の場合は、13行目の ID = 0x6b; で指定しています
- - - - - - - test_i2c.c - - - - - - -
#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <wiringPi.h>
#include <wiringPiI2C.h>

int main()
{
int fd,ret;
int ID;

ID = 0x6b;

/* WHO AM I */
fd = wiringPiI2CSetup(ID);
printf("setup return : %d\n",fd);

/* start senser */
if((wiringPiI2CWriteReg8(fd,0x20,0x0F))<0){
printf("write error register 0x20");
}
printf("write register:0x20 = 0x0F\n");

/* read OUT_X_L */
ret = wiringPiI2CReadReg8(fd,0x28);
printf("OUT_X_L : %d\n",ret);

/* read OUT_X_H */
ret = wiringPiI2CReadReg8(fd,0x29);
printf("OUT_X_H : %d\n",ret);

/* read OUT_Y_L */
ret = wiringPiI2CReadReg8(fd,0x2A);
printf("OUT_Y_L : %d\n",ret);

/* read OUT_Y_H */
ret = wiringPiI2CReadReg8(fd,0x2B);
printf("OUT_Y_H : %d\n",ret);

/* read OUT_Z_L */
ret = wiringPiI2CReadReg8(fd,0x2C);
printf("OUT_Z_L : %d\n",ret);

/* read OUT_Z_H */
ret = wiringPiI2CReadReg8(fd,0x2D);
printf("OUT_Z_H : %d\n",ret);

return;
}
- - - - - - - - - - - - - - - - - - - - -

まぁwiringPiのドキュメントのまんまですね

#include <wiringPiI2C.h>
をインクルードしてあげて
wiringPiI2CSetup(ID)にて、I2Cの初期化処理を行います。

次に、wiringPiI2CReadReg8 にてデバイスレジスタ0x0Fを読み、
正しく通信ができていたときのデバイスのレジスタ値0xD4を確認します。

次に、wiringPiI2CWriteReg8にてデバイスレジスタ0x20に0x0Fの値を書いてあげて
センサをスタートさせます

その後は、レジスタ0x28~0x29にx軸,y軸,z軸の値が入っているので、
wiringPiI2CWriteReg8で順々に読み込んでいきます。

実行結果は↓のようになりました
- - - - - - - - - - - - -
setup return : 3
write register:0x20 = 0x0F
OUT_X_L : 82
OUT_X_H : 255
OUT_Y_L : 41
OUT_Y_H : 0
OUT_Z_L : 50
OUT_Z_H : 0
- - - - - - - - - - - - -
問題なく使えそうですね
スポンサーサイト

テーマ:プログラミング - ジャンル:コンピュータ

  1. 2013/05/12(日) 04:47:05|
  2. Raspberry Pi
  3. | トラックバック:0
  4. | コメント:0
<<Raspberry PiでSPI通信(とりあえず実動作) | ホーム | Rasppbbery Pi でI2C通信(シェルで実動作)>>

コメント

コメントの投稿


管理者にだけ表示を許可する

トラックバック

トラックバック URL
http://nanicananica.blog.fc2.com/tb.php/22-5d897e23
この記事にトラックバックする(FC2ブログユーザー)
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。