ラズベリーパイPico Wのセットアップと使い方
今回の内容
ラズベリーパイPico W(ラズパイPico W)は、MicroPythonと呼ばれるマイコン用Pythonで開発できるマイコンです。ラズパイよりもさらに小型であり、GPIOにセンサやLEDなどの電子部品を接続して制御できます。 従来のPicoに対してWiFiを搭載したモデルのため、小型ながらネットワークに繋ぐことも可能です。ただし、ラズパイとは異なりOSもなくGUIもありませんのであくまでマイコンという点に注意が必要です。
ラズパイPico Wはラズパイよりも高精度にクロックが動作するため、より正確なタイマ制御やPWM制御ができる他、OSレスなので起動が非常に早いです。
Pico Wの活用例として、私は熱帯魚用のライトや自動餌やり機などを作っております。また、WiFiを使用できるのでネットワークIoTや、ChatGPTなどのAI連携などもできます。
ここでは、ラズパイPico Wのセットアップや使い方について、サーバ構築とLチカを例に説明していきます。
[目次]
ラズパイPico Wについて
ラズベリーパイPico WはARMのデュアルコアを積んだマイコンで、値段は1100~1300円ほどです。
[CPU, メモリ]
コアはARM CortexM0+プロセッサ、最大周波数は133MHz、SRAMは256KB、フラッシュメモリは2MBです。
[プログラム言語]
C/C++の他、MicroPythonと呼ばれるマイコン用のPythonで開発できます。
[GPIO]
電子部品等を接続できるGPIOは、下記画像のように26ピンあります。
PICやAVRと同様、SPIやI2C、ADC、PWMの機能を利用できます。
(画像はhttps://www.raspberrypi.com/documentation/microcontrollers/raspberry-pi-pico.htmlより引用)
[ネットワーク]
WiFi 4 (802.11n)、Single-band(2.4 GHz)が使用できます。セキュリティプロトコルはWPA3対応です。
[電源]
電源は1.8~5.5Vのため低電圧で駆動できます。そのためACアダプタの他、電池駆動も可能です。ただし、WiFi接続時は最大200mAが消費されるため、長時間の電池駆動は難しいかもしれません。
[その他]
注意としてはPico W自体にはピンがついていないため、GPIOを使用する場合には、別売りの「20ピン」を2つ、あるいは「40ピンを1つ」を購入し、半田付けする必要があります。
また、ラズパイ等との接続のためのmicroUSBケーブルも必要となります。
Pico Wの開発環境構築
MicroPythonで開発する上で必要なものは下記です。ラズパイは、MicroPythonで記述したプログラムをPico Wに書き込むために必要となります。 WindowsPCでも開発はできますが、ドライバのインストールやSDKのインストール等が必要となりますので少々大変です。 そのため、より簡単なラズパイでの開発方法を紹介します。
ラズパイを持っていない方は、この際に購入しておいて損はないと思います。どんなことができるか興味がある方は記事「ラズベリーパイ」をご覧ください。
必要なもの一覧
- ラズベリーパイ Pico W
- ラズベリーパイ (1,2,3,4どのモデルでも良い)
- micro-USB変換ケーブル x 2 (Pico Wとラズパイの接続用、ラズパイの電源用)
- ACアダプタ5V (ラズパイ電源用)
- USB端子のついたマウスとキーボード (ラズパイ用)
- HDMI対応のディスプレイ (ラズパイ用)
ラズパイを起動後に左上の地球ボタンを押してブラウザを開き、Pico WにMicroPythonを扱うためのUF2ファイルを公式サイトからダウンロードしておきます。
公式サイト: https://www.raspberrypi.com/documentation/microcontrollers/micropython.html
プログラムの開発と書き込み
ラズパイにpicoを接続
Pico WのBOOTSELボタン(白いボタン)を押しながら、ラズパイのUSBポートに接続します。 BOOTSELボタンを押しながら接続することで、Pico Wを書き込みモードにすることができます。 なお、押さない場合はプログラム実行モードとなります。 ただし、購入時のpicoにはプログラムは書き込まれていないため、自動的に書き込みモードになります。
Pico Wをラズパイに接続すると、ラズパイの画面に「リムーバブルメディアが挿入されました」というウィンドウが出るため、「ファイルマネージャで開く」を選択しOKを押します。
もしウィンドウが表示されない場合は、picoを外して再度BOOTSELを押しながらラズパイに接続します。
先ほどダウンロードしたUF2ファイルを、ドラッグ&ドロップでPico Wにコピーします。
プログラミング
MicroPythonでプログラミングするために、開発環境IDEであるThonnyを起動します。
ラズパイ画面の左上「ラズパイマーク」、「プログラミング」、「Thonny Python IDE」の順で起動できます。
Thonnyを起動した後、右下が「MicroPython(Raspberry Pi Pico)」であることを確認します。 「MicroPython(Raspberry Pi Pico)」以外の場合には、その箇所をクリックして選択して下さい。
+ボタン(Newボタン)を押して、プログラミングしていきます。 Pico Wにサーバを立てて個別のURLにアクセスすることでPico W基盤上のLEDをオンオフする、いわゆるLチカをするプログラムを記述してみます。
# This software is based on https://datasheets.raspberrypi.com/picow/connecting-to-the-internet-with-pico-w.pdf
import network
import socket
import time
from machine import Pin
led = Pin("LED", Pin.OUT) # use on-board LED
ssid = 'A Network' # ネットワークのSSID名を記載する
password = 'A Password' # ネットワークのパスワードを記載する
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)
# Pico Wにアクセスした際に表示するWebページのHTML
html = """<!DOCTYPE html>
<html>
<head> <title>Pico W</title> </head>
<body> <h1>Pico W</h1>
<p>%s</p>
</body>
</html>
"""
# 接続できるまで待機する
max_wait = 10
while max_wait > 0:
if wlan.status() < 0 or wlan.status() >= 3:
break
max_wait -= 1
print('waiting for connection...')
time.sleep(1)
# 接続エラーのハンドリング
if wlan.status() != 3:
raise RuntimeError('network connection failed')
else:
print('connected')
status = wlan.ifconfig()
print('ip = ' + status[0])
print('if you turn led on, access to ' + status[0] + '/led/on')
print('if you turn led off, access to ' + status[0] + '/led/off')
# ソケットを開く
addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]
s = socket.socket()
s.bind(addr)
s.listen(1)
print('listening on', addr)
# HTTPリクエスト, レスポンス処理
while True:
try:
cl, addr = s.accept()
print('client connected from', addr)
request = cl.recv(1024)
print(request)
# HTTP Request Header
request = str(request) # ex) b'GET /led/on HTTP/1.1\r\nHost:....
# リクエストが、LED onあるいはLED off用のパスかチェックする
led_on = request.find('/led/on')
led_off = request.find('/led/off')
print('led on = ' + str (led_on))
print('led off = ' + str (led_off))
if led_on == 6:
# LED on
print('led on')
led.value(1)
stateis = "LED is ON"
elif led_off == 6:
# LED off
print('led off')
led.value(0)
stateis = "LED is OFF"
else:
stateis = "LED is KEEPING"
# コンテンツ作成
response = html % stateis
# レスポンス送信
cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
cl.send(response)
cl.close()
except OSError as e:
cl.close()
print('connection closed')
RUNボタンを押して、ラズパイに接続されているPico Wにプログラムを書き込みます。
保存先を聞かれるので、「Raspberry Pi Pico W」を選択します。
もし、ラズパイにも保存したい場合には「This computer」を選択して保存することもできます。
保存ファイル名を聞かれるので、Pico Wに保存する際には必ず「main.py」を選択します。
理由としては、picoでは電源投入後に「main.py」という名前のファイルが自動実行される仕組みだからです。
また、直接起動する必要がないクラスファイル等の場合には、main.py以外の名前に下さい。
無事にPico Wへのプログラムを書き込み完了すると、下記のメッセージが表示されサーバが立ち上がります。
もし、エラーが表示されたらプログラムの記述が正しいか、Pico Wと接続されているかを確かめて下さい。
たまにEADDRINUSEエラーが表示されることがあります。その場合には、ラズパイと接続しているmicroUSBケーブルを一旦抜いたあと、再接続してThonnyの「STOP」ボタンを押しプログラムを停止して、再度Runボタンを押して下さい。
サーバが起動したら、"コンソールに表示されたIPアドレス/led/on"をブラウザに入力してアクセスしてみて下さい。LEDが点灯したら成功です。
次に、"コンソールに表示されたIPアドレス/led/off"にアクセスしてみて下さい。点灯していたLEDが消灯するはずです。
無事にプログラム書き込み完了したら、Thonnyの「STOP」ボタンでPico Wが実行しているプログラムを停止した後にラズパイとPico Wを接続しているmicroUSBケーブルを抜いて下さい。 これで、Pico Wのプログラム開発は完了です。
実際に使う場合にはラズパイは必要なく、Pico Wに電源を直接供給するだけで先程と同様にサーバが立ち上がります。
では、楽しいラズパイPico Wライフを!
| <<ラズパイPicoのセットアップと使い方へ | ラズベリーパイPico Wの消費電力へ >> |