How to make

Raspberry Pi 搭載のLCDにIPアドレスを表示する

Raspberry Pi にI2C小型LCDを搭載

Raspberry Pi で遊んでいます。Pas-Piにはディスプレイやキーボード,マウスなどは接続せず,sshやvncで遠隔操作しています。このような環境で,IPアドレスをDHCPでもらって来るように設定していると,Pas-Piに割り振られたIPアドレスを調べるには,DHCPサーバのIP割り当て状況を見たりする必要があり少々面倒… と,いうことでPas-PiにLCDを載せてRas-Piが取得したIPアドレスを自動表示する仕掛けを作って見ました。便利です。

2016.06.15 追記
Raspbian jessie ではデフォルトでBonjourが使えるようになっています。Bonjourを利用すればIPアドレスを知らなくてもホスト名だけでRaspberry Piにアクセスできます。詳細はこちら

使用LCD・接続図

I2C接続の小型LCDを用いました。秋月電子(I2C接続小型LCDモジュール8×2行)ストロベリーリナックス(ミニI2C液晶モジュール8×2行)

実装

当初は,ユニバーサル基板に載せていましたが専用のピッチ変換基板を作成しました。 秋月電子のI2C接続小型LCDモジュールピッチ変換キットを使うと手間なく簡単に実装できます。

Ras-PiでI2C制御する方法

Okiraku Programmingの「Raspberry PiにI2C液晶をつける」をトレースしてRas-PiからI2Cの制御ができるようにしました。 注意)この記事は初期リビジョン(メモリ256MB版)のRaspberry Piを対象に書かれていますので,現行リビジョン(メモリ512MB版)に適合させるためにI2Cのチャンネル0を1と読み替える必要があります。

I2C制御モジュール等の組込み

1. /etc/modules に以下一行を追加 

   i2c-dev 

2. /etc/modprobe.d/raspi-blacklist.conf の以下一行をコメントアウト 

   #blacklist i2c-bmc2708

3.モジュールをロードする

   $ sudo modprobe i2c-bcm2708

4.i2c-toolsをインストール 

   $ sudo apt-get install i2c-tools

IPアドレス表示スクリプト

Raspberry PiにI2C液晶をつける」に掲載されている i2c-disp.shのI2Cチャンネル0を1と書き換えたものを/usr/local/bin/に置きます。

#!/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 1 0x3e 0 0x38 0x39 0x14 0x70 0x56 0x6c i
            sleep 0.25
            i2cset -y 1 0x3e 0 0x0c 0x01 0x06 i
            sleep 0.05
            ;;
        c)  i2cset -y 1  0x3e 0 0x01 ;;
        p)  i2cset -y 1 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 1 0x3e 0x40 $MSG i

/etc/network/if-up.d/に次のスクリプト i2c-disp-ip を置きます。 if-up.dディレクトリ配下に置かれたスクリプトはネットワークデバイスが有効になった都度,自動的に実行されます。

#!/bin/sh
ipaddr=`ifconfig eth0 |grep "inet addr" |awk {'print $2'} |cut -f2 -d:`
addr_h=`echo ${ipaddr}|cut -f1,2 -d.`
addr_l=`echo ${ipaddr}|cut -f3,4 -d.`

case "$ipaddr" in
  "")
        i2c-disp.sh -i "none IP"
        ;;
  *)
        i2c-disp.sh -i ${addr_h}
        i2c-disp.sh .
        i2c-disp.sh -p 0x40  ${addr_l}
        ;;
esac
Copyright © kosakalab All Rights Reserved.
Powered by WordPress & BizVektor Theme by Vektor,Inc. technology.