hogehoge, world.

米国カリフォルニアのソフトウェアエンジニアがIT・自転車・音楽・天体写真・語学などについて書く予定。

ESP-WROOM-02(Arduino)によるWiFiネットワーキング (10) ~ 回転灯システム

次は回転灯システムの話である。ハードウェア的にはこれまた変哲なく、ESP8266のGPIO出力でパワーMOS-FETのスイッチをON/OFFするだけである。

f:id:tomoto335:20160508014255j:plain

f:id:tomoto335:20160621014533p:plain

ソフトウェアの挙動はこんな感じ。これもあまり難しくないのでソースを見てもらえればすぐわかるだろう。

  • リクエスト: 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フォーラムで引いたら「電源大丈夫?」くらいの情報しか出てこなかった。よくわからない。
  • パスコンや抵抗などスパイク対策になりそうなものを入れてみても改善された感じはしない。
  • オシロスコープで電源の波形を見ても不安定には見えない。前触れなく突然一瞬電流が切れ、初期化シーケンスが走り出すような感じ。

何かのノイズの影響を受けているようだが、なんとも言えない。何か気付く人がいたら教えていただきたい。