ラズベリーパイPico Wでアクセスポイントを立ち上げLEDを点灯できるようにしてみる


ラズベリーパイPico W(以後、ラズピコ)をアクセスポイント(APモード : SoftAP)にして、HTTPリクエストでLEDを点灯できるようにしてみます。

今回の内容はラズベリーパイPico WでHTTPリクエストでLEDを点灯できるようにしてみるのコードの書き換えになります。


先にアクセスポイントについて触れておきますと、アクセスポイントはWiFiの親機(ルータ)のような機能を指します。

ただ、今回のAPモードではラズピコ自身が外部のネットワークに繋がっていないので、ラズピコと操作用のパソコン(ラズベリーパイ等)間の小さなWiFiのネットワークを形成します。


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

import network
import socket
import machine

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

# アクセスポイントの設定(ssidとpwは自由に決めていい)
ssid = 'RPiPicoW_AP'
pw = 'raspberry'

# アクセスポイント関連
def host(ssid, pw):
	ap = network.WLAN(network.AP_IF)
	ap.config(essid=ssid, password=pw)
	ap.active(True)

	while not ap.active():
		pass

	ip = ap.ifconfig()[0]
	print(f'Hosting on {ip}')

# ソケットを開く
def open_socket(ip):
	address = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
	connection = socket.socket()
	connection.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
	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 = host(ssid, pw)
	led.on()
	connection = open_socket(ip)
	serve(connection)
except KeyboardInterrupt:
	machine.reset()

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

Connected on 192.168.4.1

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

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




APモードで起動したラズピコにWiFi経由でアクセスしてみます。



WiFiネットワークの設定を開き、コード内で指定したSSID(今回であればRPiPicoW_AP)を選択します。

パスワードの入力を求められますが、これも今回指定したパスワード(今回であればraspberry)を入力します。


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



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



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


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

京都の東本願寺で開催されているプログラミング教室で講師をしています。
詳しくはTera schoolを御覧ください。
大阪府高槻市でプログラミング教室を開設しています。
同じカテゴリーの記事
マインクラフト用ビジュアルエディタを開発しています。

詳しくはinunosinsi/mcws_blockly - githubをご覧ください。