ラズベリーパイPico WでHTTPリクエストでLEDを点灯できるようにしてみる


ラズベリーパイPico WでHTTPリクエストでLEDを点灯できるようにしてみます。

早速、ラズベリーパイPico W側のコードを書いてみます。


今回の内容はConnect your Raspberry Pi Pico W to a WLAN - Raspberry Pi Foundationを参考にしてコードを作成しています。


ラズベリーパイPico Wのmain.py

import network
import utime
import socket
import machine

led = machine.Pin("LED", machine.Pin.OUT)
led.off()

# ssidは必ず2.4GHz帯(11n)の方を使用
ssid = "your ssid"
pw = "your password"

# ssidとpwでWLANに接続する
def connect(ssid, pw):
	wlan = network.WLAN(network.STA_IF)
	wlan.active(True)
	wlan.connect(ssid, pw)
	wait = 0
	while wlan.isconnected() == False:
		print("Waiting for connection...")
		utime.sleep(1)
		wait += 1
		if wait > 20:
			raise RuntimeError("network connection failed")
	#print(wlan.ifconfig())
	ip = wlan.ifconfig()[0]
	print(f'Connected on {ip}')
	return ip

# ソケットを開く
def open_socket(ip):
	address = (ip, 80)
	connection = socket.socket()
	connection.bind(address)
	connection.listen(1)
	return connection

# レスポンスで送信するHTML
def build_html():
	return f"""
		<!DOCTYPE html>
		<html>
		<head>
		<title>raspberry pi pico w</title>
		</head>
		<body>
		<p>hello raspberry pi pico w!</p>
		<p>
			LED:
			<a href="/on?">on</a> 
			<a href="/off?">off</a>
		</p>
		</body>
		</html>
		"""

# サーバを立ち上げる
def serve(connection):
	while True:
		client = connection.accept()[0]
		request = client.recv(1024)
		request = str(request)
		try:
			request = request.split()[1]
		except IndexError:
			pass
		if request == "/on?":
			led.on()
		elif request == "/off?":
			led.off()
		client.send(build_html())
		client.close()
		
try:
	ip = connect(ssid, pw)
	led.on()
	connection = open_socket(ip)
	serve(connection)
except KeyboardInterrupt:
	machine.reset()

上記コードをThonny上で実行してみると、

Connected on 192.168.1.35

のような文字列が出力されます。

※利用しているネットワークによって上記の値は異なります


ブラウザを開きアドレスバーにThonnyのコンソールで出力されたされたIPアドレス(今回は192.168.1.35)を入力してアクセスしてみると、



main.pyのbuild_html関数で記述したHTMLが出力されます。



ブラウザに表示されているonとoffのリンクをクリックすろと、押した内容に従って、ラズベリーパイPico WのLEDが点灯か消灯になります。


4. ネットワークの基礎 — MicroPython latest ドキュメント