ラズベリーパイ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の消費電力へ >> |