ESP8266搭載のESP-12Eと様々な環境センサをI2C接続して運用するお手軽環境ステーションをESP Easyで簡単に構築したことがありました。もう何台も製作したこの構成は、電源としてUSBポートがあれば良いだけなので、Raspberry PiやルータのUSBポートにぶら下げての運用も可能です。そこで今回は、 GL-iNet GL-AR750S OpenWRT ルータにぶら下がったESP-12Eを再起動させる為の USB 電源制御 についてまとめます。
GL-AR300MのUSB電源制御
以前、GL-iNet社のGL-AR300Mを使っていた時に調べたところ、同社フォーラムにてその制御方法を知りました。
ただ、このGPIOパスは機種に依ったり、また、ファームウェアが大きく変わるとこっそり変更されてたりすることが、過去の経験から得ています。GL-AR300Mでは、
1 2 3 |
/sys/devices/platform/leds-gpio/leds/gl-ar300m:usbpow/brightness /sys/devices/platform/leds-gpio/leds/gl-ar300m:usb/brightness /sys/devices/platform/leds-gpio/leds/gl-ar300m:green:usb/brightness |
と上記の上から下へとこれまで変わってきました。ここへ「0」を入れてOFF、「1」でONという仕組みです。
GL-AR750SのUSB電源制御
今回のGL-AR750Sではこのパスが、
1 |
/sys/devices/platform/leds-gpio/leds/gl-ar750s:white:usbpower/brightness |
となったばかりではなく、ON/OFF関係が逆になっていて導入時に戸惑いました。ともあれ、バッチでUSBポート電力を入切するには、
1 2 3 4 5 6 7 |
# POWER OFF echo 1 > /sys/devices/platform/leds-gpio/leds/gl-ar750s:white:usbpower/brightness sleep 5 # POWER ON echo 0 > /sys/devices/platform/leds-gpio/leds/gl-ar750s:white:usbpower/brightness |
このような制御になります。
USBクライアント死活監視バッチ
実際には、固定IPの割り当てられているESP Easyを定期的にPingで死活監視、応答の無い場合は、上記のようなUSBポート制御を実行させたいと考えています。尚、このESP Easyは計測データをThingSpeakに上げているので、そもそも外向きコネクションが開通していないような異常時は死んでいても構わない、と言う割り切りを織り込んでいます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
#!/bin/sh ## CHECK INTERNET CONN. if ping -c1 -w1 8.8.8.8 > /dev/null 2>&1; then echo "[`date +"%H:%M:%S"`] ESPeasy_INET" > /tmp/ESPeasy_status else echo "[`date +"%H:%M:%S"`] ESPeasy_NO_INET" > /tmp/ESPeasy_status exit 1 fi ## CHECK ESPeasy CONN. if ping -c1 -w1 192.168.51.211 > /dev/null 2>&1; then #NORMAL echo "[`date +"%H:%M:%S"`] ESPeasy_ONLINE" >> /tmp/ESPeasy_status else #ABNORMAL: REBOOT REQUIRED echo "[`date +"%H:%M:%S"`] ESPeasy_OFFLINE" >> /tmp/ESPeasy_status echo 1 > /sys/devices/platform/leds-gpio/leds/gl-ar750s:white:usbpower/brightness echo "[`date +"%H:%M:%S"`] ESPeasy_POWERED_OFF" >> /tmp/ESPeasy_status sleep 5 echo 0 > /sys/devices/platform/leds-gpio/leds/gl-ar750s:white:usbpower/brightness echo "[`date +"%H:%M:%S"`] ESPeasy_POWERED_ON" >> /tmp/ESPeasy_status fi exit 0 |
これをGL-AR750Sへ配置した後、LuCI上の Task Scheduler でcron登録して仕込みは完了です。
実際には自宅にルータと別にもう1台、APとして運用しているGL-AR750Sに繋ぎ、自宅環境監視を昼夜担っています。
実はRaspberry Piにぶら下げた場合にも、同じように制御出来ないか調べたことがあるのですが、残念ながら出来ませんでした。次回はRaspberry Piに於ける対応について書いてみるつもりです。
2022年9月更新
GL-AR750SのOpenWRTファームウェア更新でUSB電力制御するパスが変わっていました。パスが以前はLED制御っぽい名称であったので、訂正されたのかも知れません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
## 値の確認 # cat /sys/class/gpio/usb_power/value 1 ## USB OFF # echo 0 > /sys/class/gpio/usb_power/value # ping 192.168.51.211 PING 192.168.51.211 (192.168.51.211): 56 data bytes 2 packets transmitted, 0 packets received, 100% packet loss ## USB ON # echo 1 > /sys/class/gpio/usb_power/value # ping 192.168.51.211 PING 192.168.51.211 (192.168.51.211): 56 data bytes 64 bytes from 192.168.51.211: seq=1 ttl=255 time=9.703 ms 64 bytes from 192.168.51.211: seq=2 ttl=255 time=2.410 ms |
ファームウェア更新後、USB電源を制御出来なくなった場合は、このパスを探し直してみる必要があるでしょう。