概要
会議室の利用状況をWeb上で把握できる仕組みを
M5Stack+マグネットスイッチ→ThingSpeak
を使って構築しました。
UIFlowを使ったブロックプログラミングを使用したので、コードは1行も書かずに済んでいます。
使用したもの
・M5Stack(Basic)
・マグネットスイッチ
→ダイソーの「ドアが開くと点灯するライト」の部品を流用
→参考:ラズパイで100均のドア開閉センサー検知
接続方法
マグネットスイッチ
→21ピン
→GND
コード
from m5stack import *
from m5ui import *
from uiflow import *
import time
import machine
import urequests
setScreenColor(0x222222)
isOpen = None
DoorStatus = M5TextBox(88, 44, "DoorStatus", lcd.FONT_DejaVu24, 0xFFFFFF, rotate=0)
setScreenColor(0x000000)
DoorStatus.setText('Started')
wait(5)
pin0 = machine.Pin(21, mode=machine.Pin.IN, pull=machine.Pin.PULL_UP)
while True:
isOpen = pin0.value()
if isOpen == 0:
setScreenColor(0xff0000)
lcd.print('Close', 0, 0, 0x000000)
else:
setScreenColor(0x009900)
lcd.print('Open', 0, 0, 0x000000)
if 0 == 0:
try:
req = urequests.request(method='GET', url=(str('https://api.thingspeak.com/update?api_key=★ここにAPIKeyを入れます★&field1=') + str(isOpen)), headers={})
lcd.print('Posted', 50, 120, 0x000000)
except:
lcd.print('NG', 50, 120, 0x000000)
wait(5)
lcd.print('Checking...', 0, 30, 0x000000)
wait(1)
wait_ms(2)
苦労したところ
1.ThingSpeakへの送り方が分からなかった
最初は、下記のDataのところに値を入れるようにしたけどうまくいかず。Pythonのコードを見てもDataの項目がはいっていなかったので、HTTPの項目ですべてデータを渡すようにしたらうまくいった。
2.Pin35,36だとうまくいかなかった
下記の記載を見つけて、Pin21に変更したところうまくいきました。
注意して使うポート
GPIO 34-39 入力オンリー
M5 Stack のポートで外に出ている中では 34, 35, 36 だけですが, これらは入力専用で出力が使えません。 また, 内部でPULLUP も出来ない>ので,外付けする必要があります。
参考:M5Stackでできること 〜使用可能なデジタル入力端子
ただし、35, 36は入力専用端子で、これらについては「INPUT_PULLUP」が使えないようです。
今回は、pinModeで「INPUT_PULLUP」にしたいので、これら2ピンも使えません。
その他
初めてのM5Stack,UIFlowだったので試行錯誤で何とか”動くようになった”感じです。
もし間違った点、改良点等ありましたらコメント頂けると助かりますのでよろしくお願いします。