前回、ESP Easyを焼いた ESP-01S と MOSFET を組み合わせ、 Raspberry Pi のRUNピンヘッダを利用して強制再起動させてみました。今回はその逆、 Raspberry Pi とP-ch MOSFETを組み合わせて、 ESP-01S の給電系を制御して再起動出来るようにしたいと思います。これにより、 Raspberry Pi と ESP-01S 、どちら側に不具合が生じても他方から強制再起動させると言う保守ストーリーが完結します。
今回のように、普段はON、これを必要な時にOFFさせる、と言う動作に適したMOSFETはP-chかな、という漠然としたイメージから、正直苦手なP-ch MOSFETの挙動や使い方を調べ、次のようなハイサイドスイッチ回路を追加してESP-01Sの電源系を制御しようと思います。
N-chの時より流通している種類数が少ないP-ch MOSFETは、価格の安さと低いVgs電圧で動作してくれることから、Si2301(A1SHB)を採用します。主な諸元は次の通りでON抵抗が少し高めです。
- VDS : -20V
- ID : -1.9A
- RDS : 190mΩ
- VGS(th) : -0.45V
このMOSFETも前回のAO3400N同様SOT23パッケージですので、同じモジュール基板のゲートに100Ωのチップ抵抗を載せるためのパターン切りを追加し、部品を実装しました。
まずは負荷としてLEDを繋ぎ、ゲート端子をRaspberry PiのGPIO23に繋いで挙動を確認します。
Raspberry PiのGPIO制御には様々な方法があり、また便利なライブラリも数多く存在しますが、今回は何もインストールすることなく使える以下の要領で制御してみます。
1 2 3 4 5 6 7 8 |
## DECLARE GPIO NUMBER TO CONTROL sudo echo "23" > /sys/class/gpio/export ## SET DIRECTION AS OUTPUT sudo echo "out" > /sys/class/gpio/gpio23/direction ## 0 (Lo: Default) -> ON sudo echo 0 > /sys/class/gpio/gpio23/value ## 1 (Hi) -> OFF sudo echo 1 > /sys/class/gpio/gpio23/value |
基本的にONで、GPIO23がHiになっている間のみOFFとなる仕様です。これはRaspberry Piが再起動などの特殊な状況下であってもONとなっていなければならず、実際に再起動させてみましたが、LEDが点灯し続けたままでした。
早速、ESP-01Sと繋いでみましょう。
配線の後、Raspberry Piを起動させ、ESP-01Sも起動されていることを確認。LEDの時と同じくGPIO23をHiにするとESP-01Sは落ちました。そして再びLoに戻して数秒するとESP-01S復活、ですがここで問題が発生します。ESP-01S再起動時にRaspberry Piにも再起動がかかってしまうのです。一連の流れをスクリーンキャプチャ撮影したのが次の動画です。
(二分割コンソール上がESP-01Sへのping応答、下がRapsberry Piへssh接続してGPIO操作)
これはESP-01S再起動時にRUNピンヘッダが何らかの因果でGNDに一瞬落ちる為で、試しにRUNピンヘッダへの配線を外した場合では、Raspberry Piの再起動は発生しませんでした。致命的ではないので一度時間を置いてから、ゆっくり対策を考えるつもりです。
これまで計3回に渡り、Raspberry PiとESP-01Sを繋いでの互いの制御や管理手段の構築について述べてきましたが、今回で一区切り。これまでの取り組みを図にまとめると次のようになります。
図中の(1)〜(3)が本ブログ中の次の記事に対応します。
- ESP-01SからRUNピンを介したRaspberry Piの再起動操作
- ESP-01SにESP Easy焼いてSer2Net機能を試す
- Raspberry Piに繋いだESP-01SをP-ch MOSFETを介して再起動させる(本記事)
参考と鳴謝)