10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ラズパイ起動時にIPアドレスをお知らせする

Last updated at Posted at 2018-03-03

ラズパイ起動時にIPアドレスをお知らせ

ラズパイの電源をONする。パソコン側のSSHクライアント「putty」を使ってラズパイにssh接続するのだが、時々、SSH接続出来ないことがある。なぜなら、我が家のネットワークはDHCPでIPアドレスが割り当てられるので、定期的にIPアドレスが変わるのです。毎回、arpコマンドで予想してとか、DHMIでディスプレイに繋ぎなおしてとか、DHCPで割り当てられたIPアドレスを調べるのが面倒なので、ラズパイに接続したスピーカーで、ラズパイ起動時に現在のIPアドレスを教えてくれるようにしてみる。つまりスピーカー必須。

実験(IPアドレスを取得して表示してみる)

IPアドレスを調べるには[ip a]コマンドを使う。

$ ip a
1: lo:  mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
2: eth0:  mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
    link/ether b8:27:eb:13:ae:e3 brd ff:ff:ff:ff:ff:ff
3: wlan0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:46:fb:b6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.11/24 brd 192.168.1.255 scope global wlan0
       valid_lft forever preferred_lft forever

"1:lo"は、ラズパイのループバックアドレスといい、自分自身のIPアドレス[127.0.0.1]。自分のラズパイで自分のプログラムにアクセスする時に使う。
"2:eth0"は、ラズパイの有線LANのIPアドレス。上記の場合はLANケーブルを接続していないので、"DOWN"になってIPアドレスも割り当てされていない。
"3:wlan0"が、Wifi無線LANを示し、"inet 192.168.1.11"の部分がDHCPで割り当てられたIPアドレス。このIPアドレスが定期的に変わる。

ラズパイから教えて欲しいのは無線LANのIPアドレスだけなので[ip a]コマンドが出力する情報を絞り込みたい。まずは、無線LANの[wlan0]だけ表示する。

pi@raspberrypi:~$ ip a show wlan0
3: wlan0:  mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:eb:46:fb:b6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.11/24 brd 192.168.1.255 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 2405:6580:c6e0:0:3d6c:6cd5:346b:bf07/64 scope global noprefixroute dynamic
       valid_lft 14359sec preferred_lft 12559sec
    inet6 fe80::3be0:3e99:b94e:d2c5/64 scope link
       valid_lft forever preferred_lft forever

IPv4のアドレスである[inet ]以外にも、IPv6のアドレス[inet6]も表示されるので、今度はIPv4[inet ]の行だけを表示する。

pi@raspberrypi:~$ ip a show wlan0 | grep "inet "
    inet 192.168.1.11/24 brd 192.168.1.255 scope global wlan0

最後にIPアドレス以外の情報をカットする。スペース' 'を区切りとして(先頭の連続するスペースも含め)6個目のフィールドを取り出す。

pi@raspberrypi:~$ ip a show wlan0 | grep "inet " | cut -f6 -d ' '
192.168.1.11/24

IPアドレス[192.168.1.11/24]をラズパイに全部喋らすのはうっとおしいので、不変の[192.168.1.]部分も省略することにした。欲しい情報は[11]のみ。

pi@raspberrypi:~$ ip a show wlan0 | grep "inet " | cut -f6 -d ' ' | cut -d '.' -f4 | cut -d '/' -f1
11

コマンドラインが長くなってしまったが、IPアドレスの4つ目[第4オクテット]だけ取得することが出来た。

実験(IPアドレスをラズパイが喋る)

Linuxのシェルスクリプトを書きます(この例ではファイル名をautorun.shとした)。Raspberry Piの起動直後はIPアドレスが設定されなかったので、IPアドレスを取得できるまで[while文]で1秒毎にIPアドレス取得を繰り返します。取得したIPアドレスの第4オクテットだけを、別のシェルスクリプト[jtalk.sh]で音声合成してラズパイに喋らせます。

Jtalkを設定するならこちら「ラズパイ+スピーカー」
image.png

pi@raspberrypi:/home/pi$ cat autorun.sh
#!/bin/sh
ipadd=""
while [ "$ipadd" = "" ]
do
    ipadd=`ip a show wlan0 | grep "inet " | cut -f6 -d ' ' | cut -d '.' -f4 | cut -d '/' -f1`
    wait 1
done
rtn=`/home/pi/myProgram/jtalk.sh IPアドレスは${ipadd}です`

スクリプトを実行できるようにファイルのパーミッションを変更する。

 # ▼変更前
 -rw-r--r--  1 pi   pi     291  6月 24 16:46 autorun.sh
 
 # ▼変更後
 $ chmod +x autorun.sh
 -rwxr-xr-x  1 pi   pi     291  6月 24 16:46 autorun.sh

シェルを実行する。関係ないけど、我が家のトイプードルの名前はシエルです。

$ ./autorun.sh

ラズパイのスピーカー「IPアドレスは11です。」

成功。ディレクトリのつじつまを合わせるのと、ファイルのパーミッション設定で悩んだけど、起動後にIPアドレスを喋るようになりました。

まとめ(ラズパイ起動後に自動でIPアドレスを取得)

Raspberry Piの起動直後に、DHCPで割り当てられたIPアドレスを教えるプログラムを自動実行するサンプルはこちらのサイトに掲載しておきました(→)ラズパイ起動時にスクリプトを自動実行する at FunnySnowman

10
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?