RaspberryPi[32] I2C対応デジタルカラーセンサモジュール S11059
浜フォトのS11059はI2Cで使えるカラーセンサーモジュールです。秋月電子では基板実装したものを売っていますので、そちらのほうが使い勝手はいいと思います。ネット上では、python での動作は沢山出てきますが、C言語で行うものはあまり出てきません。Wiring PiではI2Cの関数が用意されていますのでそれを用いました。ハードウエア接続は、ラズパイの3番ピンがSDA、5番ピンがSCLで後は、3.3VとGNDを接続してあげれば完了です。
Raspberry Piの設定の中のインターフェースからI2Cをオンにしておきます。下記のコマンドを打って、2a と表示されればモジュールは認識されています。
pi@raspberrypi:$ i2cdetect -y 1
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- 2a -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
以下サンプルプログラムです。秋月電子にあるマニュアルには積分時間よりも長く待機しすると書いてありますので、 (>2184 ms) usleep の値を適宜変えてください。
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#include <errno.h>
#include <wiringPi.h>
#include <wiringPiI2C.h>
int main()
{
int fd;
int ID;
int ret_r,ret_g,ret_b;
ID = 0x2a;
fd = wiringPiI2CSetup(ID);
printf("setup return : %d\n",fd);
if((wiringPiI2CWriteReg8(fd,0x00,0x84))<0)
{
printf("write error \n");
}
if((wiringPiI2CWriteReg8(fd,0x00,0x04))<0)
{
printf("write error \n");
}
usleep(1000);
if((wiringPiI2CWriteReg8(fd,0x03,0x2A))<0)
{
printf("write error \n");
}
ret_r = wiringPiI2CRead(fd);
printf("R : %d\n",ret_r);
ret_g = wiringPiI2CRead(fd);
printf("G : %d\n",ret_g);
ret_b = wiringPiI2CRead(fd);
printf("B : %d\n",ret_b);
return 0;
}