2019年12月10日火曜日

ラズベリーパイでradikoラジオをつくる: その6 Wi-Fiを自動切替・信号強度表示

登録済みのWi-Fiを自動的に切り替え

自宅や外出先で使用することを想定して、Wi-Fiの自動切り替えを設定してみます。
まずは、wpa_supplicant.confにアクセスポイントを設定を追加して行きます。
$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
 次のように、3つのアクセスポイントを設定してみました。関連する設定を抜粋して示します。ssidはSSID名、pskはパスフレーズ、priorityは接続優先度で、値が大きいssidに優先的に接続します。なお、パスフレーズの暗号化やSSIDのステルス機能を使うには更に設定が必要です。
network={
ssid="aterm-00000"
psk="abcd0000"
priority=2
}
network={
ssid="MOBILErouter"
psk="abcd1111"
priority=3
}
network={
ssid="Android1234"
psk="abcd2222"
priority=1
}
さらにIPアドレスを固定する場合は dhcpcd.conf を設定します。
$ sudo nano /etc/dhcpcd.conf
IPアドレスを固定したいアクセスポイントのみ次のように記載します。モバイルルータやスマホのテザリングでは自動割り当てにしたいので何も記載しません。
interface wlan0
ssid aterm-00000
static ip_address=192.168.0.100/24
static routers=192.168.0.1
static domain_name_servers=192.168.0.1

Wi-Fi IPアドレス表示

Linuxの「ip」コマンドでwlan0の情報を取得しました。
$ ip addr show dev wlan0
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether b8:27:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.100/24 brd 192.168.0.255 scope global noprefixroute wlan0
       valid_lft forever preferred_lft forever
    inet6 fe80::6f54:0000:0000:0000/64 scope link
       valid_lft forever preferred_lft forever
さらにawkでIPアドレスを抽出します
$ ip addr show dev wlan0 | awk '/inet /{printf substr($2, 1, index($2, \"/\")-1)}'
192.168.0.100
ところで、ipコマンドで送受信バイト数が表示出来ますから、この数値を使ってリアルタイムのデータ転送速度を表示出来そうです。
$ ip -s link show dev wlan0
2: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP mode DORMANT group default qlen 1000
    link/ether b8:27:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    RX: bytes  packets  errors  dropped overrun mcast 
    1935131    3444     0       0       0       1527 
    TX: bytes  packets  errors  dropped carrier collsns
    177144     1401     0       0       0       0   
   

Wi-Fi 信号強度とSSID表示

Linuxの「iwconfig」コマンドを利用します。
$ iwconfig wlan0
wlan0     IEEE 802.11  ESSID:"aterm-00000" 
          Mode:Managed  Frequency:2.442 GHz  Access Point: 00:3A:9D:91:D3:94 
          Bit Rate=65 Mb/s   Tx-Power=31 dBm 
          Retry short limit:7   RTS thr:off   Fragment thr:off
          Power Management:on
          Link Quality=70/70  Signal level=-38 dBm
          Rx invalid nwid:0  Rx invalid crypt:0  Rx invalid frag:0
          Tx excessive retries:1  Invalid misc:0   Missed beacon:0
信号強度、ESSIDもawkで抽出します。ESSIDは二重引用符で囲まれたものを抽出したかったのですが、苦し紛れで文字数数えています。
$ iwconfig wlan0 | awk '/Signal level/{print substr($4,7)}'
$ iwconfig wlan0 | awk '/ESSID/{printf substr($NF, 8, length($NF)-8)}'

Wi-Fi 信号強度インジケータの実装

スマホの真似をしようとしたんですが、表示の閾値をいくつにするか悩みました。通信品質はWi-Fiの変調方式はもちろん、機器の差や近隣の干渉波によっても変わるはず。Webで調べるとバッファローは「-30dBm~-40dBmで無線接続が安定します」、IBS JapanのページにはVoIPの最小信号強度-67dBmとありました。これらを参考に、-60dBm/-50dBm/-40dBmでインジケータを振らすことにしました。


0 件のコメント:

コメントを投稿