はじめに
クルマなんて動けばいい、少し前までそんなふうに思っていました。
最近老朽化でしかたなく車を買い替えたのですが、中古車購入で装備も十分とは言い難い状態、最初のうちは何も気にせず運転していました。
巷ではあおり運転が社会問題化、それで念の為フロントとリアに安価なドライブレコーダを取り付けたんですが、それがきっかけで少しクルマに興味を持ち始めたみたいです。
私も結構な年齢になってバックする時に少し不安があるので、まずはバックカメラと液晶モニタを取り付けることにしました。と言っても、バックライトからバックカメラの電源を取ったり、内装を剥がして配線とか怖くてできないので、もっとゆるい感じでの実装です。
せっかくなのでクルマのIoT化を少し意識したシステム構成にしてみました。
システム構成
- 電源供給はUSBポート5Vですが、12V対応機器があるので、5Vを12VにDC/DC変換しています。
- ダヴ Dash Buttonを押すと、30秒だけバックカメラの映像を液晶モニタに映します。
- GL-AR150/OpenWRTから電源連動節電機能付きUSBハブをON/OFFして、バックカメラの電源制御をします。液晶モニタはバックカメラのON/OFFに連動します。
- システム設定中はインターネット接続環境が必要ですが、済んでしまえばインターネット接続環境は必須ではありません。
設置
バックカメラ(下)です。車内取り付けです。 | 液晶モニタです。 |
---|---|
Dash Buttonです。車内で平面なところは意外と少ないです。 | ダイソーで買ったクリアボックスに収納しています。助手席の足元に置いています。 |
GL-AR150/OpenWRTのhub-ctrlを使い、USBハブの電源制御を行います。
一時的にGL-AR150/OpenWRTをインターネットに接続できるようにします。どのような接続環境でも構いません。GL-AR150とL-02CでLTEモバイルルータを作ってみたを参考にどうぞ。それからパッケージhub-ctrlをインストールします。
hub-ctrlでUSBハブをポート単位で電源制御できるようになります。Per-port power switching仕様だとできますが、それに対応したUSBハブがなかなかありません。iBUFFALO 電源連動節電機能付き 4ポートセルフパワーハブ ブラック BSH4AE12BKだと、USBハブ単位で電源制御できるのでそれを利用することにしました。
参考:
- memoメモ - LinuxからUSB HUBの電源のON/OFFを制御してみる
- 怠惰の形而上学 - Raspberry Pi + L-02C でバッチリ安定する多機能 LTE ルータをつくったメモ
- GitHub - probonopd/hub-ctrl-for-openwrt
パッケージhub-ctrlをインストールします。
root@GL-AR150:~# opkg update
root@GL-AR150:~# opkg install hub-ctrl
USBデバイスの情報を確認します。困ったことに iBUFFALO BSH4AE12BK(電源連動節電機能付きハブ)、iBUFFALO BSH4U25BK(ただのハブ) どちらも "Genesys Logic, Inc. Hub" と認識されます。iBUFFALO BSH4U25BK(ただのハブ) に iBUFFALO BSH4AE12BK(電源連動節電機能付きハブ) をぶら下げているので、"Hub #0 at 001:004"が iBUFFALO BSH4AE12BK(電源連動節電機能付きハブ) とわかります。
root@GL-AR150:~# lsusb
Bus 001 Device 004: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 005: ID 1004:618f LG Electronics, Inc. Ally/Optimus One
Bus 001 Device 002: ID 05e3:0608 Genesys Logic, Inc. Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@GL-AR150:~# lsusb -t
/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=ehci-platform/1p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/4p, 480M
|__ Port 3: Dev 5, If 0, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 3: Dev 5, If 1, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 3: Dev 5, If 2, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 3: Dev 5, If 3, Class=Vendor Specific Class, Driver=option, 480M
|__ Port 4: Dev 4, If 0, Class=Hub, Driver=hub/4p, 480M
iBUFFALO BSH4AE12BK(電源連動節電機能付きハブ) "Hub #0 at 001:004"のポートをON/OFFしてみます。どれか一つのポートをON/OFFすると、すべてのポートがON/OFFになります。
"-P 1"はポート1、"-p 1"はON、"-p 0"はOFFになります。
root@GL-AR150:~# hub-ctrl -v
Hub #0 at 001:004
INFO: ganged switching.
Hub Port Status:
Port 1: 0000.0100 power
Port 2: 0000.0100 power
Port 3: 0000.0100 power
Port 4: 0000.0100 power
Hub #1 at 001:002
INFO: ganged switching.
Hub Port Status:
Port 1: 0000.0100 power
Port 2: 0000.0100 power
Port 3: 0000.0503 highspeed power enable connect
Port 4: 0000.0503 highspeed power enable connect
Hub #2 at 001:001
INFO: individual power switching.
WARN: Port indicators are NOT supported.
Hub Port Status:
Port 1: 0000.0503 highspeed power enable connect
root@GL-AR150:~# hub-ctrl -b 001 -d 004 -P 1 -p 1
root@GL-AR150:~# hub-ctrl -b 001 -d 004 -P 1 -p 0
iBUFFALO BSH4AE12BK(電源連動節電機能付きハブ)をON/OFFするスクリプト**/root/bin/usbhub-switch.sh**を作成します。
root@GL-AR150:~# mkdir -p /root/bin
root@GL-AR150:~# vi /root/bin/usbhub-switch.sh
#!/bin/sh
HUB=`/usr/bin/lsusb -v 2>/dev/null | grep ^Bus | grep "Genesys Logic, Inc. Hub" | head -1`
BUS=`echo $HUB | awk '{print $2}'`
DEV=`echo $HUB | awk '{print $4}' | sed -e "s/\(.*\)\:/\1/p;d"`
for i in 1 2 3 4
do
if [ "$1" == "on" ]; then
/usr/sbin/hub-ctrl -b $BUS -d $DEV -P $i -p 1
elif [ "$1" == "off" ]; then
/usr/sbin/hub-ctrl -b $BUS -d $DEV -P $i -p 0
fi
done
root@GL-AR150:~# chmod 755 /root/bin/usbhub-switch.sh
GL-AR150/OpenWRTの電源投入時はiBUFFALO BSH4AE12BK(電源連動節電機能付きハブ)がONになるので、OFFにするよう初期スクリプト**/etc/init.d/usbhub-switch**を作成します。つまり液晶モニタには何も表示されないようにします。
root@GL-AR150:~# vi /etc/init.d/usbhub-switch
#!/bin/sh /etc/rc.common
START=99
STOP=99
boot() {
echo boot
/root/bin/usbhub-switch.sh off
}
start() {
echo start
}
stop() {
echo stop
}
root@GL-AR150:~# chmod 755 /etc/init.d/usbhub-switch
root@GL-AR150:~# /etc/init.d/usbhub-switch enable
ダヴ Dash Buttonを押すと、バックカメラの映像を30秒間液晶モニタに表示するようにします。プレミアムレッド Dash Buttonを押すと、GL-AR150/OpenWRTをシャットダウンするようにします。
参考:
スマホのAmazonショッピングアプリでAmazon Dash Buttonの設定をします。
一時的にGL-AR150/OpenWRTをインターネットに接続できるようにします。
スマホもAmazon Dash Buttonも、Wi-FiネットワークでGL-AR150/OpenWRTのWi-Fiアクセスポイントを指定します。
具体的な設定方法はラズパイがないとAmazon Dash Buttonをハックできない、そんなふうに考えていた時期が私にもありましたの、【設定→Amazon Dash Buttonのセットアップ】に書かれています。
Amazon Dash ButtonのMACアドレスを調べます。
Amazon Dash Buttonを押すと、ARPテーブルにそのMACアドレスが登録されるので、それを控えます。どれかわからない場合はMACアドレス検索でチェックし、**Amazon Technologies Inc.**と出ればOKです。
root@GL-AR150:~# arp
IP address HW type Flags HW address Mask Device
192.168.3.109 0x1 0x2 aa:aa:aa:aa:aa:aa * eth0
192.168.3.1 0x1 0x2 bb:bb:bb:bb:bb:bb * eth0
192.168.8.246 0x1 0x0 cc:cc:cc:cc:cc:cc * br-lan
192.168.8.247 0x1 0x0 dd:dd:dd:dd:dd:dd * br-lan
Amazon Dash Buttonを押して、IPアドレスが新規割当または更新されたら、スクリプト**/root/bin/dnsmasq-script.sh**を実行するようにします。
root@GL-AR150:~# cp -p /etc/dnsmasq.conf /etc/dnsmasq.conf.org
root@GL-AR150:~# vi /etc/dnsmasq.conf
### Add 1 line at the end of the file ###
dhcp-script=/root/bin/dnsmasq-script.sh
スクリプト**/root/bin/dnsmasq-script.sh**を作成します。
root@GL-AR150:~# vi /root/bin/dnsmasq-script.sh
#!/bin/sh
/bin/echo `/bin/date +"%F %T"` $* >> /tmp/dnsmasq.script.log
MAC_ADDR_DOVE="cc:cc:cc:cc:cc:cc"
MAC_ADDR_PREMIUM_RED="dd:dd:dd:dd:dd:dd"
if [ "$2" == ${MAC_ADDR_DOVE} -a "$4" == "WINC-00-00" ]; then
/root/bin/usbhub-switch.sh on
sleep 30
/root/bin/usbhub-switch.sh off
elif [ "$2" == ${MAC_ADDR_PREMIUM_RED} -a "$4" == "WINC-00-00" ]; then
/sbin/poweroff
fi
root@GL-AR150:~# chmod 755 /root/bin/dnsmasq-script.sh
GL-AR150/OpenWrtを再起動し、ダヴ Dash Buttonを押したら、バックカメラの映像が液晶モニタに表示されるか確認します。更にプレミアムレッド Dash Buttonを押したら、GL-AR150/OpenWrtがシャットダウンされるか確認します。
root@GL-AR150:~# reboot
課題
- これでバックカメラが使えるようになりましたが、やはりDash Button ひと押しなしが便利です。これを何とか自動化させたいです。
これから
- GL-AR150/OpenWRTにL-02Cを繋げてLTE通信できる環境ができているので、まだまだいろんなことができそうです。(=^・^=)