
ラズベリーパイ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 ドキュメント