Pi PICO W + DS18B20 (1)

PICO W に 1-Wire 温度センサー DS18B20 を接続し測定
結果を WebServer へ送信し、CSV に追記 一覧表・グラフにて表示させる。

参考サイト

DS18B20 は、他の用途が設定されてない GPIO22 へ接続
三端子レギュレーターは、3.3V 1A (たまたま有った在庫品を使用)

ds18x20.py と onewire.py を準備して、pico w へ入れておく。

main.py

import machine, utime, time, socket, network, onewire, ds18x20

HOST = 'WebServerIPアドレス'
PORT = port番号
interval = 測定休止(秒)
SSID:str = 'WiFi-AP ID'
PASS:str = 'パスワード'

ds_pin = machine.Pin(22)
ds_sensor = ds18x20.DS18X20(onewire.OneWire(ds_pin))
roms = ds_sensor.scan()
led = machine.Pin("LED", machine.Pin.OUT)

def wifi_up():
	wlan = network.WLAN(network.STA_IF)
	wlan.active(True)
	wlan.connect(SSID, PASS)
	while wlan.isconnected() == False:
		print('Connecting')
		time.sleep(1)
	wlan_status = wlan.ifconfig()
	print('Connected!')
	led.on()
	status = wlan.ifconfig()
	print(f'IP Address: {wlan_status[0]}')

def com_send(mess):
	while True:
		try:
			led.on()
			sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
			sock.connect((HOST, PORT))    
			sock.send(mess.encode('utf-8'))
			led.off()
			sock.close()
			break
		except:
			print ('retry: ' + mess)
			led.off()

while True:
	wifi_up()
	ds_sensor.convert_temp()
	time.sleep_ms(750)
	for rom in roms:
		tempC = ds_sensor.read_temp(rom)
		if tempC is None:
			continue
		else:
			temperature = '{:.1f}'.format(tempC)
	print(temperature)
	temp_info = str(temperature)
	com_send(temp_info)
	print('temp send')
	utime.sleep(interval)

WebServer 側の受取設定は、次回