Raspberry Piは、GPIOピンの一部をSPIやI2Cインターフェースとして使用できます。
これを利用して、Strawberry Linuxで販売されているI2Cキャラクタ液晶をRaspberry Piに取り付けてみました。
配線
Raspberry PiのGPIOのピン配置は下記で分かります。
RPi Low-level peripherals - eLinux.org
これを見ながら、下記のように接続します。I2C用のプルアップ抵抗も不要です*1。液晶のRST端子は開放でOKです Vddに直結しておかないと動作が不安定になることがあります。
RaspberryPi | I2C液晶 | |
---|---|---|
01 3.3V | → | 5 VDD |
03 SDA | ⇔ | 3 SDA |
05 SCL | → | 2 SCL |
06 GND | → | 4 GND |
ソフトウェア
I2Cの使い方は下記サイトを参考にさせていただきました。
Raspberry Pi I2C How-To ガイド by @azarashi55 | GVC : Global Versatile Controller
1. /etc/modules に以下一行を追加
i2c-dev
2. /etc/modprobe.d/raspi-blacklist.conf の以下一行をコメントアウト
# blacklist i2c-bcm2708
3. モジュールをロードする(もしくは再起動。)
$ sudo modprobe i2c-bcm2708
4. i2c-toolsをインストール
$ sudo apt-get install i2c-tools
5. 液晶が正しく検出されるかをチェック
$ sudo i2cdetect 0 # => 3e (液晶のアドレス) が表示される
6. 下記の液晶コントロール用シェルスクリプトを i2c-disp.sh として保存。(アプリケーションノートを眺めながら適当に作ったものです。アイコン表示などに対応させても面白いかも。)
#!/bin/bash function usage { echo "Usage: $0 [-ic] [-p pos] message" > /dev/stderr; exit 1 } [ $# = 0 ] && usage while getopts "icp:" flag; do case $flag in \?) usage ;; i) i2cset -y 0 0x3e 0 0x38 0x39 0x14 0x78 0x5e 0x6c i sleep 0.25 i2cset -y 0 0x3e 0 0x0c 0x01 0x06 i sleep 0.05 ;; c) i2cset -y 0 0x3e 0 0x01 ;; p) i2cset -y 0 0x3e 0 $((OPTARG+128)) ;; esac done shift $((OPTIND-1)) [ $# = 0 ] && exit LANG=C MSG=`echo -n "$1" | perl -pe '$_=join" ",map{ord }split//'` #echo $MSG i2cset -y 0 0x3e 0x40 $MSG i
7. 実行してみる。初回は -i オプションを指定し、液晶を初期化する必要があります。
また、-pオプションを使うと明示的に表示位置を指定することができます。なお1段目は 0x00 から、2段目は 0x40 から始まります。
何も指定しないと前回の続きから引数の文字を表示させます。
$ sudo ./i2c-disp.sh -i 'Hello! I2C LCD' $ sudo ./i2c-disp.sh -p 0x41 ' & Raspberry Pi'
*1:Raspberry Piが内蔵プルアップ/プルダウン機能を持っているため