先日、「Raspberry Pi Pico W」で、一定時間毎にランダムな数値をWebサーバに送信(HTTP GETリクエスト)するプログラムをつくりました(記事は こちら)。
今回は、先日のプログラムの「ランダムな数値」の部分を「センサから取得したデータ」に置き換え、本物のIoTデバイスとして仕上げようと思います。
今回は、「GROVE – デジタル温度・湿度センサ(DHT20)」を使います。
このセンサで、1分毎に温度データを採取し、Webサーバに送信することとします。
このセンサはI2C出力です。
また、こちら のドキュメントによれば、「Raspberry Pi Pico W」のI2Cピン(デフォルト)は以下のようになっているとのことです。
I2C0 SCL | Pin 9 |
I2C0 SDA | Pin 8 |
I2C1 SCL | Pin 7 |
I2C1 SDA | Pin 6 |
よって今回は「I2C1」を使うこととし、「Raspberry Pi Pico W」と「DHT20」を以下のようにつなぎます。
Raspberry Pi Pico W | DHT20 |
---|---|
GND | GND |
3V3(OUT) | VCC |
6 | SDA |
7 | SCL |
「DHT20」でのデータ採取方法については、こちら を参考にします。
こちら から、DHT20用のライブラリをダウンロードします。
ダウンロードしたファイルを解凍し、中に入っている「dht20.py」を「Thonny」で開きます。
「ファイル」>「名前を付けて保存」で、開いた「dht20.py」を「Raspberry Pi Pico W」に保存します。その際、名前は「dht20.py」のままにしておきます。
以下のとおり、プログラムをつくります。
from machine import I2C
from dht20 import DHT20
i2c = I2C(1)
dht20 = DHT20(i2c)
while True:
temper = dht20.dht20_temperature()
humidity = dht20.dht20_humidity()
print("temper : " + str(temper))
print("humidity : " + str(humidity))
これを「Raspberry Pi Pico W」に「main.py」という名前で保存し、「実行」ボタンをクリックすると、以下のようにシェルに温度と湿度が表示されます。
それでは、先日つくったプログラムに対し、「ランダムな数値」の部分を「センサから取得したデータ」に置き換えてみます。
import machine
import time
import network
import urequests
from machine import I2C
from dht20 import DHT20
i2c = I2C(1)
dht20 = DHT20(i2c)
led = machine.Pin("LED", machine.Pin.OUT)
led.value(1)
ssid = 'XXXXXXXX'
password = 'XXXXXXXX'
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
chipid = int.from_bytes(wlan.config('mac'), 'big') % 65536
wlan.connect(ssid, password)
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
time.sleep(1)
if wlan.status() != 3:
raise RuntimeError('network connection failed')
else:
print('connected')
status = wlan.ifconfig()
print('ip = ' + status[0])
while True:
led.value(1)
value = round(dht20.dht20_temperature(), 1)
url = "http://XXXXXXXX?chipid=RPI" + str(chipid) + "&val0=" + str(value)
r = urequests.get(url)
print(r.content)
r.close()
led.value(0)
time.sleep(60)
これを「Raspberry Pi Pico W」に「main.py」という名前で保存します。
「Raspberry Pi Pico W」をパソコンから外し、ACアダプタにつないで電源供給すると、「Raspberry Pi Pico W」が動作開始します。
そのまましばらく置いておくと、このように温度データが取得できていました(Wabサーバ側のプログラムは、以前PHPでつくったものです)。
期待していたとおり、とても簡単にIoTデバイスをつくることができました。