あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

ESP-WROOM-02でトイレの電気がつけっぱなしだったらZabbix経由で通知する

インターネットに繋がってないのでIoTじゃないです(前置き)

前にAitendoでESP-WROOM-02を買ったんですが、つなぎ方がよくわからず放置していました。部屋の隅でブレッドボードにブスブス刺されまくって宙に浮いてたのを、片付けるついでに活用してみました。というはなし。

開発ボードだとリセットとかのボタンがあったりプルアップ抵抗がついてたりしますが、Aitendoのブレイクアウトボードはそのへんが何もついておらず、そのへんが必要というのもあまり理解してなかったので、最初は3V3とGNDだけつないで動かないなあとか言ってました。いろいろ読んで回った結果、EN-3V3、GPIO2-3V3、GPIO15-3V3はとりあえず常時10KΩでプルアップして良さそうということがわかったので、ブレッドボードでぐちゃぐちゃつないでいましたが、今回は思い切ってブレイクアウトボードに用意入れていたパターンに抵抗を直接取り付けました。

f:id:Akkiesoft:20190323135944j:plain

ファームウェアは前回(ブログに書いてない)MicroPythonを書き込んでいたので、3V3とGNDをつなぐだけで動かせるようになりました。本当はGPIO0から10KΩを挟んでGNDにプルダウンする必要があるようですが、動いてるのでいいか。ファームウェアを書き換えるときはGPIO0から10KΩを挟んで3V3にやれば良いようです。こう言う切り替えがあるところこそブレッドボードでやりましょうかね。

(参考) マイコンの実験:ESP-WROOM-02でWiFi通信の実験1

さて、MicroPythonでこんなコードを作成。WiFiに接続するだけなんですけど。ファイルの転送はampy(https://github.com/pycampers/ampy)を使うと便利です。boot.pyとしてESP-WROOM-02に転送しました。

import machine
import network

wlan = network.WLAN(network.STA_IF)
if machine.reset_cause() != machine.SOFT_RESET:
  wlan.active(True)
  wlan.ifconfig(('192.168.xx.xxx', '255.255.255.0', '192.168.xx.1', '192.168.xx.1'))

if not wlan.isconnected():
  wlan.connect('<SSID>', 'パスワード')
  while not wlan.isconnected():
    machine.idle()

電源は3.3Vが必要なので、まあとりあえずUSBシリアル変換のボードを使用。

f:id:Akkiesoft:20190323141739j:plain

これをトイレに設置。電源もだいぶ前から用意してたんですが特につなぐものがなく放置していたものをいよいよ活用!

f:id:Akkiesoft:20190323143526j:plain

この電源、照明を消すと同じく落ちるので、照明がついている間だけESP-WROOM-02が起動するということになります。

つまり、あとはZabbixでping監視すればトイレの照明がつけっぱなしかどうか見られますね。pingを30秒ごとに確認するようにしたので、トリガーは10分(直近20回)のあいだに0(消灯)が0回だったら警告として通知するようにしました。

{toilet:icmpping[<ESPのIPアドレス>,4].count(#20,0)}=0

今のトイレはLED電球で、常夜灯程度の消費電力で光るのでそんなにガッツリ監視しなくてもいいんですけどね。あとは家を出る前に消し忘れをチェックできるようになると良さそうです。

いやでもねえ、もうちょいいい使い方したい気もするよね🤔