秋月電子でデジタルカラーセンサーS11059-02DTをゲットした。
I2Cなので接続は簡単だが、例によってレジスタへの読み書きが必要になる
幸い秋月電子のセンサーには、仕様の説明とレジスタの中身およびデータの
送受信例があったので、それを参考にプログラミングして見た
![](https://itecjapan.xsrv.jp/wp-content/uploads/2020/05/20200523-1.png)
アドレスは0x2a
smbusを使用
秋月の資料を参考に
1.スリープを解除
アドレス0x2aの0x00レジスタに 0x80を書き込み
2.ADCにコントロール信号をおくる
アドレス0x2aの0x00レジスタに
レジスタ4ビット目がハイゲインとローゲイン(40セルと4セル)
下位2ビットが179.2 22.4 1.4msの積算時間
0x0bだと1011だからハイゲンでmsをセット
ただしモードが固定時間モードの場合でマニュアルモードだと倍の時間になる
これのセットはマニュアルは下位3ビット目 1マニュアル 0固定
3.積算時間待機
4.データの読み出し
0x03レジスタから8バイト分 上位1バイトと下位1バイトでペア
上位x256+下位
#!/usr/bin/env python
#秋月の資料より
import smbus
import time
bus = smbus.SMBus(1)
addr = 0x2a
#0x0b,0x0a,0x09,0x08 ハイゲイン 40せる
#0X03,0x02,0x01,0x00 ローゲイン 4セル
#179.2 22.4 1.4 0.875
ctrl=[0x0b,0x0a,0x09,0x08,0x03,0x02,0x01,0x00]
#スリープ解除
bus.write_byte_data(addr , 0x00, 0x80)
#ADCリセット
bus.write_byte_data(addr , 0x00, ctrl[0] )
#待機
time.sleep(1)
#読み出し8バイト アドレス0x2a レジスタ0x03
data = bus.read_i2c_block_data(addr , 0x03, 8)
#上位ビットx256+下位ビット
#R = data[0] *256 + data[1] <<8=x256
R = (data[0] << 8) + data[1]
print ('R:',R)
G = (data[2] <<8) + data[3]
print ('G:',G)
B = (data[4] *<<8) + data[5]
print ('B',B)
#赤外
IR = data[6] *256 + data[7]
print ('IR',IR)
![](https://itecjapan.xsrv.jp/wp-content/uploads/2020/05/20200523-2.png)