こんにちは、小室です。産休をいただいているのですが、産み出すまでは元気だし暇!なのでRaspberry Piで遊んでいます。Raspberry Piは小さくて手頃なのが素敵です。だからこそ初期設定済みのものを起動する時に毎回マウスやキーボード、ディスプレイを接続するのはとても面倒。手軽に手元でIPアドレスを確認してsshとかでパパッと接続したい!というわけで今回は、手軽に手元でIPアドレスを確認できるようなシステムを作ってみたので紹介します。
このシステムでできる事
Raspberry PiにI2C接続の小型LCD搭載ボードを繋いでから起動すると、ネットワーク接続後にIPアドレスを取得して液晶に表示します。
使うもの
- Raspberry Pi Type B 512MB
- Raspbianインストール済みSDカード
- Raspberry Piがネットワークに繋がる環境(今回はイーサネットケーブルで繋いでいます。)
- microUSBケーブル(Raspberry Pi電源用)
- I2C接続の小型LCD搭載ボード(3.3V版)
- ブレッドボード
- ジャンパワイヤ オス〜オス メス〜メス 各4本(オス〜メスがあればそちらの方がすっきりして良いです。)
今、スイッチサイエンスではRaspberry Piに直接させるI2C接続の小型LCDボードを開発中です。液晶とL字のピンソケットがはんだづけ済なので自分ではんだづけする必要もありませんし、GPIOにそのまま刺せるのでジャンパワイヤやブレッドボードが必要ありません。近々発売になる予定なので、そちらもお楽しみに!→発売されました。詳しくは商品ページをご覧ください。
システム導入手順
- I2C接続の小型LCD搭載ボードを使えるように設定し、試しに文字を表示させてみる。
- IPアドレスを取得して液晶に表示させるシェルスクリプトを作成する。
- 起動時に自動実行するように設定する。
まずは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.shpi@raspberrypi ~ $ sudo ./ipaddr.sh
pi@raspberrypi ~ $ sudo mv ipaddr.sh /etc/network/if-up.d/ipaddr_i2c
pi@raspberrypi ~ $ sudo reboot