2023/05/06
今回は、以前の
ブログで紹介した、
技適をようやくパスして購入できるようになったRaspberry Pi Pico Wの動作確認についてです。
Raspberry Pi Pico W(¥1,210)以下の手順で準備・評価を行いました。
1. Raspberry Pi Pico Wの開発環境のセットアップ
2. Wi-Fi接続の動作確認(wifi_scanプログラム実行)
3. Micro Pythonの実行環境構築
4. WebServer構築と動作確認
1. Raspberry Pi Pico Wの開発環境のセットアップ 開発を行うPCはRaspberry Pi4にしました。PCとマイコンの違いはありますが、Raspberry Pi同士です。Raspberry Piのサイトにセットアップ手順の
PDFファイル(getting-started-with-pico.pdf)がありますので、そのChapter.1を実行しました。必要なSDKやプログラムのサンプルがセットアップされました。
2. Wi-Fi接続の動作確認(wifi_scanプログラム実行) 次に、同じくRaspberry Piのサイトにあるネット接続に関する
マニュアル(connecting-to-the-internet-with-pico-w.pdf)のChapter.2に記載の「wifi_scan」というプログラムを書き込んで動かしました。
プログラムを動かすと、自宅のWi-Fiルータでも通信していることが確認できました。

また、ターミナルアプリのminicomを立ち上げると、Wi-Fiのスキャン状態を確認できました。Wi-Fiの動作は問題ないようです。
3. Micro Pythonの実行環境構築 Raspberry Pi4から立ち上げたVisual Studio Code上でMicro Pythonを実行できるように環境を構築しました。ネットからMicro Pythonの
Firmwareをダウンロードしておきます。

Raspberry Pi Pico WをRaspberry PiにUSB接続すると、デスクトップ上に「RPI-RP2アイコン」が現れますので、このダウンロードしたFirmwareを書き込む(ドラッグする)とPico W側でMicro Pythonが利用できる環境が整います。VSCodeには「Pico-W-Go」という拡張機能を入れておきます。
4. WebServer構築と動作確認 Pico WをWebServerとして利用し、Pico Wに実装されているのLEDのON/OFFや温度センサの値をブラウザから制御、閲覧できるプログラムを作成し、動作確認しました。プログラムは以下の通りです。
import machine
import network
import socket
from time import sleep
import utime
led = machine.Pin("LED", machine.Pin.OUT)
sensor_temp = machine.ADC(4)
conversion_factor = 3.3 / (65535)
ssid = 'Buffalo-G-C870'
password = 'my password'
def connect():
#Connect to WLAN
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
while wlan.isconnected() == False:
print('Waiting for connection...')
sleep(1)
ip = wlan.ifconfig()[0]
print(f'Connected on {ip}')
return ip
def open_socket(ip):
# Open a socket
address = (ip, 80)
connection = socket.socket()
connection.bind(address)
connection.listen(1)
return connection
def webpage(temperature, state):
#Template HTML
html = f"""
<!DOCTYPE html>
<html>
<form action="./lighton">
<input type="submit" value="Light on" />
</form>
<form action="./lightoff">
<input type="submit" value="Light off" />
</form>
<p>LED is {state}</p>
<p>Temperature is {temperature}</p>
</body>
</html>
"""
return str(html)
def serve(connection):
#Start a webserver
state = 'OFF'
led.off()
while True:
client = connection.accept()[0]
request = client.recv(1024)
request = str(request)
reading = sensor_temp.read_u16() * conversion_factor
temp = 27 - (reading - 0.706)/0.001721
temp = round(temp, 1)
temp = str(temp)
try:
request = request.split()[1]
except IndexError:
pass
if request == '/lighton?':
#led.on()
led.on()
state = 'ON'
elif request =='/lightoff?':
led.off()
#led.off()
state = 'OFF'
temperature = temp # 25.0 # pico_temp_sensor.temp
html = webpage(temperature, state)
client.send(html)
client.close()
try:
ip = connect()
connection = open_socket(ip)
serve(connection)
except KeyboardInterrupt:
machine.reset()
実行結果は以下の通りです。Micro Pythonを実行しているRaspberry Piのブラウザから確認した結果です。

LEDのON/OFFがブラウザから制御できました。

また、Androidのスマホのブラウザからも同様に問題なく動作しました。

今までのRaspberry Pi Picoは無線機能がなかったため、不便に感じていました。Wi-Fiを利用したい場合には別途ESP8266やESP32などのWi-Fiマイコンが必要でした。そうなると、Pico自身の存在感がなくなってしまいます。このPicoWのリリースでESPシリーズと同じ土俵に上がれたような気がします。SDK等、充実しているので、また遊んでみようと思います。