1 2 3 4 5 6 7 8 9 |
noizumi@greyhound:~$ ping -w 5 192.168.11.19 PING 192.168.11.19 (192.168.11.19) 56(84) バイトのデータ 64 バイト応答 送信元 192.168.11.19: icmp_seq=2 ttl=64 時間=204 ミリ秒 64 バイト応答 送信元 192.168.11.19: icmp_seq=3 ttl=64 時間=1.62ミリ秒 64 バイト応答 送信元 192.168.11.19: icmp_seq=4 ttl=64 時間=333 ミリ秒 --- 192.168.11.19 ping 統計 --- 送信パケット数 5, 受信パケット数 3, パケット損失 40%, 時間 4027ミリ秒 rtt 最小/平均/最大/mdev = 1.615/179.474/332.910/136.348ミリ秒 |
RX-7車載の Raspberry Pi Zero 2 W(以降rx7pi) だが、家の Wi-Fi に繋ぐと、謎のパケットロスが発生する。
rx7pi はプログラムで次の機能を持たせている。
- 車載警報装置からのイヤホンマイク端子ON信号を GPIO で検出するGPIO監視
- Bluetooth ヘッドフォン接続時に警戒モードをOFFにするBluetooth監視
- GPSデータを読み取り、100m移動したらメールを飛ばすGPS監視
これらの機能のプログラムを走らせると、Wi-Fiのパケットロスが発生する。
GPIOの信号線半田付けする時に、チップ抵抗まで盛ってしまい、ショートさせたので、まだショート箇所が残ってるのかと半田吸い取り線をヨドバシから買って、信号線の付け直しをしてみたが症状変わらず。
GPIO監視だけのテストプログラムを動かしたら発生しないので、GPIOでは無いようだ。
端末から監視プログラムを動かすと、
1 2 3 4 |
noizumi@rx7pi:~/bin $ alarm_monitor.sh & [1] 5150 noizumi@rx7pi:~/bin $ エラー: 接続のアクティベーションに失敗しました: (44) Bluetooth 接続が失敗またはタイムアウトしました. エラー: 接続のアクティベーションに失敗しました: (44) Bluetooth 接続が失敗またはタイムアウトしました. |
携帯電話へ bluetooth テザリングで接続してなかったらするようにしてるが、家なので、携帯電話は有効にしていない。
ちょっと気になるので、bluetooth テザリング接続部をコメントアウトすると、パケットロスが無くなった。
1 |
sudo nmcli dev connect ${BTPAN} |
この部分でパケットロスが発生しとるようで、bluetooth と Wi-Fiは同一チップで制御しとるから、大方、bluetooth の制御コマンドを送ると、Wi-Fi の回路の処理が停止して影響が出とるのかな?
安物の Wi-Fiチップだと、回路共通部分での競合ってありそうで、嫌だのう。
今まではUSBテザリングを使っていたが、スマートフォンの画面ロックを解除しないと、通信が確立しないので、朝、システムを起動して、画面ロック解除を忘れて、その後、通信不可ってのが嫌で、bluetooth テザリングにしたんだよなあ。
車載機としては、bluetooth テザリングが通信の生命線なので、接続断の場合は、何度もリトライを繰り返す処理にしてるけど、Wi-Fi 接続時はキャンセルする例外を入れんといかんかな?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
function bt_tethering_check(){ # Wi-Fi繋がってたら何もしない。 WIFI=`ifconfig|grep wlan` if [ "${WIFI}" != "" ]; then return 0 fi # bluetooth 接続状態確認 PATTERN="[\s\S]*?${BTPAN}" if [[ ! $CONNECTED =~ $PATTERN ]]; then sudo nmcli dev connect ${BTPAN} else # 接続中に携帯電話の応答が無い場合、 # bluetooth死亡の可能性大なので再起動 if [ -e $FILE_TE_DEAD ]; then sudo reboot fi fi } |
Wi-Fi繋がってたら、bluetooth テザリング接続をしないようにした。
これで謎のパケットロスは解消した。 🙂