Raspberry Pi Pico WでTWSNMPシリーズのセンサーを作る練習 その3
今朝は5時半から開発開始です。
早く寝たのに、起きられませんでした。夜暑いほうがよく眠れます。
まず、寝ている間に思いついた改造をPico使ったセンサープログラムにしてみました。
Wifiが繋がらない時はLED知らせる
syslogの送信間隔を設定ファイルから読む
LEDの制御をtoggle関数にする
Wifiは、
# wait wifi connect
while wlan.status() != 3:
led.toggle()
utime.sleep_ms(200)
のようなコードにすれば、接続中はLEDが短い間隔で点滅します。
動作中は1秒間隔で点滅にしました。
ここまでは、調子がよかったのですが、昨日、諸々、部品が届いたので音量センサーをつけてみようとしました。
適当につなげばなんとかなるだろうという、いつもの感覚で
回路を作ってました。ソフトも適当にGP0から読み込むコードを書いてみました。デジタルIOだけなので簡単に動くだとうとやってみると、まったく反応しません。デバッグのコードをいれてみてもだめです。
ここで助手の猫が天から一言
「電子回路は、ソフトのよう甘くない。適当に作っても動かにゃい」
とのこと。おっしゃる通りです。せっかちな私は、先走るので助手の猫が必要です。
そもそそも、GP0からちゃんと読み込めるのか怪しいものです。
いきなりセンサーではなく、押しボタンSWの値を取得する回路とプログラムを試すことにしました。
をみると、私が適当に作った回路やプログラムに沢山間違っていることに気づきました。
途中でWIfiが繋がらなくなったり、悪戦苦闘の末、SWの状態を取得することはできました。
今朝のプログラムは
import machine
import utime
import socket
import network
import ntptime
import config
# get LED port
led = machine.Pin("LED", machine.Pin.OUT)
ado = machine.Pin("GP0", machine.Pin.IN,machine.Pin.PULL_DOWN)
#connect wifi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(config.ssid,config.password)
# wait wifi connect
while wlan.status() != 3:
led.toggle()
utime.sleep_ms(200)
# setup clock by ntp
ntptime.settime()
#make syslog socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)
i = 0
while True:
led.toggle()
utime.sleep(1)
if ado.value() == 1:
print("H")
else:
print("L")
if i % (60 * config.interval) == 0:
reading = sensor_temp.read_u16() * conversion_factor
temp = 27 - (reading - 0.706)/0.001721
now =utime.gmtime()
ts = "%d-%02d-%02dT%02d:%02d:%02d+00:00" %(now[0],now[1],now[2],now[3],now[4],now[5])
status = wlan.ifconfig()
syslog = b"<%d>%s %s twRPPico: temp=%.1f" % (21*8+6,ts,status[0],temp)
print(syslog)
for dst in config.syslog_dst:
s.sendto(syslog,(dst,514))
i+=1
ここで時間切れです。明日、音量センサーに再挑戦するつもりです。
明日に続く
開発のための諸経費(機材、Appleの開発者、サーバー運用)に利用します。 ソフトウェアのマニュアルをnoteの記事で提供しています。 サポートによりnoteの運営にも貢献できるのでよろしくお願います。