Raspberry Pi起動時にI2C接続の小型液晶にIPアドレスを表示させてみる

投稿者:

こんにちは、小室です。産休をいただいているのですが、産み出すまでは元気だし暇!なのでRaspberry Piで遊んでいます。Raspberry Piは小さくて手頃なのが素敵です。だからこそ初期設定済みのものを起動する時に毎回マウスやキーボード、ディスプレイを接続するのはとても面倒。手軽に手元でIPアドレスを確認してsshとかでパパッと接続したい!というわけで今回は、手軽に手元でIPアドレスを確認できるようなシステムを作ってみたので紹介します。

このシステムでできる事

Raspberry PiにI2C接続の小型LCD搭載ボードを繋いでから起動すると、ネットワーク接続後にIPアドレスを取得して液晶に表示します。

使うもの

使った物はこれだけです。配線も簡単。
使った物はこれだけです。配線も簡単。

今、スイッチサイエンスではRaspberry Piに直接させるI2C接続の小型LCDボードを開発中です。液晶とL字のピンソケットがはんだづけ済なので自分ではんだづけする必要もありませんし、GPIOにそのまま刺せるのでジャンパワイヤやブレッドボードが必要ありません。近々発売になる予定なので、そちらもお楽しみに!→発売されました。詳しくは商品ページをご覧ください。

システム導入手順

  1. I2C接続の小型LCD搭載ボードを使えるように設定し、試しに文字を表示させてみる。
  2. IPアドレスを取得して液晶に表示させるシェルスクリプトを作成する。
  3. 起動時に自動実行するように設定する。

まずはI2C接続の小型LCD搭載ボードをRaspberry Piから使えるように設定します。これは、以前mactkgくんが「Raspberry Piで「I2C LCD Breakout」を使ってみた」というブログで説明してくれています。そのとおりやったらすんなり動きます。これで手順1は完了です。

次にIPアドレスを取ってきて液晶に表示するシェルスクリプトを作成します。以下のコマンドを実行すると今回私が作ったシェルスクリプトがダウンロードできます。

pi@raspberrypi ~ $ wget https://gist.github.com/MKnkgw/6510893/raw/d1e5ab06725f36d1259a1772cd722b14b0d7f161/ipaddr.sh

以下のコマンドで「ipaddr.sh」というファイルができたことを確認してみて下さい。

pi@raspberry ~ $ ls

ちなみにシェルスクリプトの中身は以下のようになっています。

#!/bin/sh

LCD=0x3e
NETWORK=eth0

LANG=
IP=`/sbin/ifconfig $NETWORK | grep "inet addr:" | cut -f2 -d : | cut -f1 -d " "`

echo "IP: $IP"

ip_char_at(){
ch=`echo -n $IP | od -An -tx1 | cut -d " " -f$1`
if [ -z $ch ]; then
echo 0x20
else
echo 0x$ch
fi
}

IP1=`ip_char_at 2`
IP2=`ip_char_at 3`
IP3=`ip_char_at 4`
IP4=`ip_char_at 5`
IP5=`ip_char_at 6`
IP6=`ip_char_at 7`
IP7=`ip_char_at 8`
IP8=`ip_char_at 9`
IP9=`ip_char_at 10`
IP10=`ip_char_at 11`
IP11=`ip_char_at 12`
IP12=`ip_char_at 13`
IP13=`ip_char_at 14`
IP14=`ip_char_at 15`
IP15=`ip_char_at 16`

sudo i2cset -y 1 $LCD 0 0x38 0x39 0x14 0x70 0x56 0x6c i
sudo i2cset -y 1 $LCD 0 0x38 0x0d 0x01 i
sudo i2cset -y 1 $LCD 0x40 $IP1 $IP2 $IP3 $IP4 $IP5 $IP6 $IP7 $IP8 i
sudo i2cset -y 1 $LCD 0x00 0xc0 i
sudo i2cset -y 1 $LCD 0x40 $IP9 $IP10 $IP11 $IP12 $IP13 $IP14 $IP15 i

このスクリプトは液晶のアドレスが0x3eかつイーサネットケーブルでネットワークに接続している場合のみうまく動きます。異なる場合はスクリプトの3行目と4行目のLCDとNETWORKの値を変更して下さい。特に、無線LANでネットワークに接続している場合はNETWORK=wlan0などになります。スクリプトを正しく作ったら、権限を変更して一度実行してみます。

pi@raspberrypi ~ $ sudo chmod +x ipaddr.sh
pi@raspberrypi ~ $ sudo ./ipaddr.sh
液晶にIPアドレスが正しく表示されたら手順2が完了です。
最後に、起動時に自動実行するように設定します。/etc/network/if-up.d/ipaddr_i2c などに移動してください(ピリオドを含む名前だと実行してくれないようですので名前の付け方には注意して下さい)。
pi@raspberrypi ~ $ sudo mv ipaddr.sh /etc/network/if-up.d/ipaddr_i2c 
これで手順3も終了です。ちゃんと動くか確認してみます。
pi@raspberrypi ~ $ sudo reboot
液晶にIPアドレスが表示されれば成功です。
IPアドレスが表示されました。これで手軽に外部から接続できますねー!
IPアドレスが表示されました。これで手軽に外部から接続できますねー!
ぜひぜひお試しください!