Raspberry Pi Pico WでTWSNMPシリーズのセンサーを作る練習 その2
浦和レッズ、悔しい引き分け!
今朝は5時から開発開始です。
昨日に続いてRaspberry Pi Pico Wを使ってTWSNMPシリーズのセンサーを作る練習をしています。
昨日は
に従ってやってました。
どうも、ここで紹介されている開発環境
のエディタが好きになれないのでVSCodeで開発する方法を探しました。
ありました
これを動かしのに少し苦労しましたが、使えるようになって、すごく快適です。この動画で紹介されているVSCodeのヘルプでPIN配置が確認できるヘルプは、面白かったです。
使い慣れたエディタで開発すると、どんどん開発が進みます。
Raspberry Pi Pico Wに標準で搭載されている温度センサーで取得した値を
syslogでTWSNMP FCに送信するプログラムができました。
import machine
import utime
import gc
import socket
import network
import ntptime
import config
#connect wifi
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(config.ssid,config.password)
#make syslog socket
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)
# setup clock by ntp
ntptime.settime()
led = machine.Pin("LED", machine.Pin.OUT)
i = 0
while True:
led.on()
utime.sleep(1)
led.off()
utime.sleep(1)
if i % 60 == 0:
if wlan.status() == 3:
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
config.pyに
ssid="WifiのSSID"
password="Wifiのパスワード"
syslog_dst=["syslogの宛先IP1","syslogの宛先IP1"。。]
書いてPico Wにアップロードすれば動きます。
TWSNNMP FCで受信した結果は、
です。実際の室温よりりは高めですが、測定できています。
朝でも室内がむっとしていたので、エアコンの設定を標準に戻すと2℃ぐらい下がりました。快適です。
このハードウェアでの開発は、昔を思い出してかなり楽しいです。
GO言語とかJavaScriptとか高級な言語に慣れていると、戸惑うことが沢山でてきます。
例えば、syslogで送信するタイムスタンプの処理でもちょっと苦労しました。そのもそも、電源いれただけでは、時計が合っていません。2000/1/1になってしまいます。NTPサーバーに問い合わせて時刻を設定する必要があります。OSのある環境の開発言語だと日時のデータを文字列にいい感じにフォーマットする関数がありますが、ないので自分でフォーマットする必要があります。
ますます、新しいハードウェアでなにか作るやる気がでてきたので、
以前、断捨離で捨てたハンダゴテとか、センサーのチップとか、いろいろ注文しました。一ヶ月ぐらいは楽しめそうです。
明日に続く