Raspberry PiにふられたIPアドレスをHDMIディスプレイ以外で知る方法 (2) 7セグLED
■ネットワーク上のマシンの存在を確認
前回は、DHCPサーバによってRaspberry PiにふられたIPアドレスを音声で通知するプログラムを作りました。今回は、得られたIPアドレスを表示器に表示するプログラムを作成します。
IPアドレスは、シェル(ターミナル)で、
hostname -I |
とすると、
IPアドレスの文字列が返ってきます。192.168.xxxまでは、家庭内LANは同じなので、最後の3桁を表示できればよいです。筆者のルータにあるDHCPサーバでは、100以降を振り出すように設定しています。そのような設定をしていない場合は、1桁もしくは2桁の数字になる場合があります。
●GPIOにつないだ7セグメントLEDで表示
Raspberry Piで7セグメントLEDを簡単に点灯させよう (4) 配線量を少なくできるシフトレジスタを使った点灯方法 その3
この記事では、4桁の7セグメントLEDに数値を表示しました。この表示器に、IPアドレスの最後の3桁を表示します。
ラズパイと4桁の7セグメントLEDのピンヘッダの接続は次のようになります。SPIインターフェースを利用しています。
GPIOのピン番号と機能 | 7セグメントLEDボードのピン名称 |
---|---|
17 +3.3V | VDD |
19 MOSI | SDI |
20 GND | GND |
23 CLK | SCK |
24 CE0 | LOAD |
●プログラムはPython
SPIを使うので、「コラム SPIを有効にする」を参照してください。
WiringPiのPythonライブラリのインストールはこちらを参照してください。
前回と同じく、IPアドレスは、hostname -I で得ます。Pythonのプログラムの中でbashの外部コマンドを使い、stdout=PIPEを使うと、標準出力から文字列を受け取れます。
p = Popen(["hostname","-I"],stdout=PIPE) |
受け取ったIPアドレスはすべて3桁で構成されていれば、11文字は家庭内LANではみな同じです。筆者は「192.168.111」を指定しています。
その次はドットです。ここまで読みます。
c = p.stdout.read(11) d = p.stdout.read(1) #dot |
筆者の家庭内LANでは、DHCPサーバは100からふり出します。3文字を読み、それぞれ変数に入れます。
d1 = p.stdout.read(1) d2 = p.stdout.read(1) d3 = p.stdout.read(1) |
LEDのセグメントは負論理で光るところを指定します。
表示の数字 | 10進表記 |
---|---|
0 | 192 |
1 | 249 |
2 | 164 |
3 | 176 |
4 | 153 |
5 | 146 |
6 | 130 |
7 | 248 |
8 | 128 |
9 | 152 |
seglistというリストに10進表記のデータを入れます。読みだしたd1、d2、d3は0~9の数値なので、リストの先頭からその数値にある場所のデータを取り出せば、10進数になります。
これらの3桁の数値をdataとして表示します。
data = chr(seglist[int(d3)])+chr(seglist[int(d2)])+chr(seglist[int(d1)])+chr(127) wiringpi.wiringPiSPIDataRW(SPI_Ch, data) |
プログラム全体を示します。ファイル名IPspi595-1b.pyで保存しました。
#!/usr/bin/env python |
sudo chmod 755 IPspi595-1b.py で実行権を付けて sudo python IPspi595-1b.pyで実行します。
●ラズパイの立ち上がり時にこのプログラムを実行させる
前回と同様に、/etc/rc.localに記述します。エディタnanoを起動します。
sudo nano /etc/rc.local |
exitの前の行に sudo python /home/pi/IPspi595-1b.py を追加し、Ctrl+o、Ctrl+xで保存します。リブートして、動作を確認します。実行しません。前回はシェル・プログラムで、実行できました。別のプログラムで実験しましたが、シェル・プログラムは起動しましたがPythonのプログラムは動きませんでした。
次の手段として、Xwindowの起動時のプログラムとして動かします。下記のWebページを参考にしました。ありがとうございます。
http://www.lukesys.co.jp/index.php?RaspberryPI2_%E8%87%AA%E5%8B%95%E8%B5%B7%E5%8B%95
●Xwindowで自動起動の設定
2016年9月23日版で実行しています。条件として、下記の設定はデフォルトです。
- Xwindowを自動で立ち上げている
- piユーザで自動ログインしている
この条件では、管理者権限でコマンドを実行するsudoを使ってもパスワードを聞かれません。
隠しファイルを見えるようにします。View->Show Hiddenを選ぶと、ドットが先頭についたファイルが見えるようになります。各種設定ファイル類が編集できるようになります。
/home/piのルートにある .configフォルダを開きます。
この中にあるlxsessionを開きます。
この中にあるLXDE-piを開きます。
この中にあるテキスト・ファイルのautostartを開きます。
@/home/pi/ipdisplay.sh |
を追加します。ipdisplay.shはまだ存在しません。
テキスト・エディタを立ち上げて、次のプログラムを入力し、ipdisplay.shのファイル名で保存します。実行権を付けます。
#!/bin/sh cd /home/pi/ sudo python IPspi595-1b.py |
リブートすると、GUI画面を表示した後、7セグメントLEDにIPアドレスを表示しました。