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