Raspberry Pi の I2C を有効化する方法 (旧版)

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: -- -- -- -- -- -- -- --

参考