4日目の@mikawanさんの記事に触発されて、かなり以前サトー電気で買ってあった人感センサーを使ってみました。
使わなくなった古い無線ルーターのBroadcom BCM4712というSOCを使ったモジュールでmrubyを動かしてThingSpeakにポストするようにしてみました。
#
# yabm mruby script
#
# thingspeak channel update
#
APIKEY = "naisyo"
def delay(yabm, val)
start = yabm.count()
while yabm.count() < start + val do
end
end
begin
# ip address setting
yabm = YABM.new
yabm.netstartdhcp
ntpaddr = "10.0.1.18"
yabm.sntp(ntpaddr)
ip = yabm.getaddress
yabm.print ip
interval = 0
last = yabm.gpiogetdat & 0x01
while 1 do
yabm.print "."
delay(yabm, 1000)
if interval == 0 && last != yabm.gpiogetdat & 0x01
yabm.print "*"
res = SimpleHttp.new("https", "api.thingspeak.com", 443).get("/update?api_key=" + APIKEY + "&field1=1", {'User-Agent' => "test-agent"})
interval = 1
end
if interval != 0
interval = interval + 1
end
if interval == 60
last = yabm.gpiogetdat & 0x01
interval = 0
end
end
rescue => e
yabm.print e.to_s
end
蟹さんとこのBCM/mipsをまとめて、Yet Another Bare Metal(YABM)と呼ぶ事にしました。
httpsでBearSSLを使っているのですが、証明書の有効期間を確認するためにある程度正確な時間が必要なのでおうちの中のntpサーバに接続して時間を取得しています。
センサーの出力をルーターのボタンに接続してあります。それをGPIOで拾っています。ボタンはプルアップされて0ビット目になります。使っていませんが、裏のボタンが2ビット目でLEDが3,4ビット目になります。
このセンサーモジュールの仕様はアクティブセルさんのページが参考になります。
センサーの電源はルーターから分けてもらっているのですが、ルーター電圧が3.3Vだったのでセンサーのレギュレーターを外して、直結にしました。
スイッチはヒートガンではがしたのですが、暖め方が足りずパターンをはがしてしまいました。スイッチを使えるように取ろうとしたのが失敗だったかもしれません。かろうじてプルアップの抵抗のところで接続しています。
このモジュールは上のカバーを外してから、全面のパネルを外すと分解できます。ネジを使わないはめ込みでプラスチックの爪が折れやすいです。
スクリプトを起動するとこんな感じで出力されます。
ThingSpeakにはこのようにデータが入りました。
このルーターはHardOffに108円でたくさん転がっていて、気軽にIoTができて楽しいと思います。