ESP-WROOM-02(Arduino)によるWiFiネットワーキング (10) ~ 回転灯システム
次は回転灯システムの話である。ハードウェア的にはこれまた変哲なく、ESP8266のGPIO出力でパワーMOS-FETのスイッチをON/OFFするだけである。
- 例によって基本回路部分は省略。
- 出力は2個あるが、IO13につながれている1個だけ記載。実際にはもうひとつがIO14につながれている。
- 回転灯をつなぐコネクタはRCAを使ったがこれは単なる好み。
- パワーMOS-FETはこれ。ゲート電圧3.3Vでしっかり開いてくれるようだ:
- 本来MOS-FETは負荷のプラス側に入れて開閉するのがお行儀がよいと思われるが、そのためにはP-chのMOS-FETを買ってきて追加する必要がある(たぶん)。どうせつなぐのがモーターやライト(電流が流れればよく電位はあまり関係ないはず)なのでこれでよし、とする。
- 出力とGNDの間には抵抗内蔵LEDを入れている。これはLチカの役目(負荷をつながなくても出力が確認できる)と、出力にたまった電荷をGNDに逃がすプルダウン抵抗の役目とを兼ねている。このような電荷を逃がす道がないと、プログラム書き込み中(IO13/IO14が遮断状態)に電荷が徐々にたまって勝手に回転灯が回り出してしまう。
抵抗内蔵5mm黄緑色LED(5V用) OSG8NU5B64A−5V(10個入): LED(発光ダイオード) 秋月電子通商 電子部品 ネット通販
- 回転灯は12Vのものを用いた。ACアダプターもそれに合わせ、且つ電流に余裕のあるものを使う必要あり。ちなみに負荷の電圧は3.3VレギュレーターとパワーMOS-FETが耐えられる範囲ならば何でもよい。
ソフトウェアの挙動はこんな感じ。これもあまり難しくないのでソースを見てもらえればすぐわかるだろう。
- リクエスト: GET /light/{出力先; 0 or 1}/on?duration={ONする秒数}&power={出力%}
- 現在の出力%と残り何秒ON状態かを表すJSONが返る。
- ちなみに GET /light/{出力先} すると現在の状態を同形式で見ることができる。
- 出力はPWMで調整。
- ON中に新たなリクエストを送ると状態が直ちに更新される。秒数=0や出力=0を送るとその場でOFFになる。
- ルートにGETを投げるとインタラクティブに操作できるUIがHTMLで返って来る
なお、このシステムのデモ中に、回転灯をONするタイミングでリセットがかかるというトラブルに何度か見舞われた。電源に使うACアダプターや回転灯の種類に依存し、電源に余裕があると起こりにくいということ以外、理由はよくわかっていない。
- シリアルにException (28)といった例外メッセージとスタックトレースが出ることもあるし、出ないこともある。この例外メッセージをESP8266フォーラムで引いたら「電源大丈夫?」くらいの情報しか出てこなかった。よくわからない。
- パスコンや抵抗などスパイク対策になりそうなものを入れてみても改善された感じはしない。
- オシロスコープで電源の波形を見ても不安定には見えない。前触れなく突然一瞬電流が切れ、初期化シーケンスが走り出すような感じ。
何かのノイズの影響を受けているようだが、なんとも言えない。何か気付く人がいたら教えていただきたい。