Raspberry Pi が扱える低レベル周辺機器の一つに I2C があります. I2C バスに温度センサなどを接続すると比較的簡単にデータを取得できます. しかし, 標準の Raspbian では I2C が無効化されているため, これを有効化するためにいくつかの手順が必要になります.
2015年にリリースされたカーネルから方法が変わっています. 詳しくは新しい記事を御覧ください.
パッケージ
パッケージ i2c-tools をインストールをインストールしておきます.
sudo apt-get install i2c-tools
カーネルモジュール
デフォルトで I2C のカーネルモジュールがブラックリストに入っていているため, 以下のようにコメントアウトしてこれを外します.
# blacklist spi and i2c by default (many users don't need them) blacklist spi-bcm2708 #blacklist i2c-bcm2708
起動時にカーネルモジュールを自動的に読み込むために, 以下のように /etc/modules に i2c-dev を追加します.
# /etc/modules: kernel modules to load at boot time. # # This file contains the names of kernel modules that should be loaded # at boot time, one per line. Lines beginning with "#" are ignored. # Parameters can be specified after the module name. snd-bcm2835 i2c-dev
一度再起動して, lsmod を実行してカーネルモジュールがロードされていることを確認します.
$ lsmod Module Size Used by rfcomm 32939 0 bnep 10792 2 bluetooth 221259 10 bnep,rfcomm rfkill 19138 2 bluetooth evdev 9419 1 uinput 6574 1 fuse 76145 1 lirc_rpi 7238 3 lirc_dev 10115 1 lirc_rpi i2c_dev 5557 0 snd_bcm2835 16165 0 snd_soc_bcm2708_i2s 5474 0 regmap_mmio 2806 1 snd_soc_bcm2708_i2s snd_soc_core 131268 1 snd_soc_bcm2708_i2s regmap_spi 1897 1 snd_soc_core snd_pcm 81593 2 snd_bcm2835,snd_soc_core snd_page_alloc 5156 1 snd_pcm regmap_i2c 1645 1 snd_soc_core snd_compress 8076 1 snd_soc_core snd_seq 53769 0 snd_timer 20133 2 snd_pcm,snd_seq snd_seq_device 6473 1 snd_seq leds_gpio 2059 0 led_class 3688 1 leds_gpio snd 61291 7 snd_bcm2835,snd_soc_core,snd_timer,snd_pcm,snd_seq,snd_seq_device,snd_compress i2c_bcm2708 3997 0
これで, Raspberry Pi で I2C バスを利用するための準備が整いました. i2cdetect を使って, 現在 I2C バスに接続されているデバイスの情報を出力できます.
以下は, Raspberry Pi Model B Rev. 2 で 2つの I2C デバイスを接続したときの例です.
$ sudo i2cdetect -y 1 0 1 2 3 4 5 6 7 8 9 a b c d e f 00: -- -- -- -- -- -- -- -- -- -- -- -- -- 10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 40: -- -- -- -- -- -- -- -- 48 -- -- -- -- -- -- -- 50: -- -- -- -- -- -- -- -- -- -- -- -- -- 5d -- -- 60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 70: -- -- -- -- -- -- -- --