
Raspberry Pi Picoは素晴らしいキットですが、重要な機能が一つ欠けています。それはWi-Fiです!Raspberry Pi PicoにWi-Fiを追加するというアイデアを初めて思いついたのは、 ESP8266バリアントボード用のESP-01インターフェースを備えたCytron Maker Pi Picoをレビューしていた時でした。しかし、その機能はかなり限られていました。
CircuitPython の主任開発者 Scott Shawcroft が、毎週 Pi をテーマにした番組 The Pi Cast に出演した後、Adafruit には基本的な Wi-Fi 接続を提供する ESP32 ベースのアドオン ボードがあることを知り、1 日かけて調整した後、Raspberry Pi Pico をオンラインにする方法を示すこのチュートリアルを作成しました。
- ラズベリーパイ ピコ
- Adafruit Airlift WiFi Featherwing コプロセッサ
- 8 x オス-オスジャンパーワイヤー
- ブレッドボード
このチュートリアルの目標は、Raspberry Pi PicoをWi-Fi経由でインターネットに接続し、OpenWeatherサービスAPIにアクセスして、選択した場所の天気情報を取得することです。この生データはPythonシェルに送信されますが、OLEDスクリーンやLCDに簡単に送信したり、一連のイベント発生をトリガーするために使用したりすることもできます。
Raspberry Pi Pico を Wi-Fi 用に配線する
このチュートリアルでは、Raspberry Pi PicoとFeatherwing Airliftにヘッダーピンをはんだ付けする必要があります。両方のボードをブレッドボードで使用するため、付属のオスヘッダーで十分です。FeatherwingをAdafruit Featherボード(Feather RP2040など)で使用する場合は、マイクロコントローラの上部にメスヘッダーをはんだ付けする必要があります。図では、FeatherwingのMISO、MOSI、SCKの位置が正しいことに注意してください。これらのピンを必ず確認し、実際のボードではFeatherwingに追加のGPIOピンがあるため、ピン数を数えることに頼らないでください。
画像
1
の
3

ピンマッピング
スワイプして水平にスクロールします
ラズベリーパイ ピコ | Adafruit Airlift WiFi Featherwing コプロセッサ |
VSYS | USB |
GND | 任意のGNDピン |
GPIO 10 | SCK |
GPIO 11 | モシ |
GPIO 12 | 味噌 |
GPIO 13 | ESPCS |
GPIO 14 | ESPビジー |
GPIO 15 | ESPRST |
Raspberry Pi PicoにCircuitPythonをインストールする
CircuitPython を Raspberry Pi Pico にフラッシュするのは簡単です。
- Pico 用の CircuitPython の最新バージョンをダウンロードしてください。
- Pico のBOOTSEL ボタンを押したまま、USB ケーブルを Pico とコンピューターに挿入します。
- CircuitPython UF2ファイルをRPI-RP2ドライブにコピーします。コードの書き込み中はドライブがアンマウントされ、消えます。新しいドライブ「CIRCUITPY」が表示され、書き込みが成功したことを確認できます。
- ダウンロードしたCircuitPythonのバージョンに応じたライブラリアーカイブをダウンロードしてください。今回の場合は6.2.0をダウンロードしたので、バンドルバージョン6をダウンロードする必要があります。
- ダウンロードの内容をフォルダーに抽出します。
- 次のファイル/フォルダをCIRCUITPY ドライブのlib フォルダにコピーします。
adafruit_bus_device
adafruit_minimqtt
adafruit_io
adafruit_esp32_spi
Adafruit_requests
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
OpenWeatherアカウントの作成
このチュートリアルでは、OpenWeather APIを使用して、世界中のあらゆる場所の天気データを取得します。APIを使用するには、無料アカウントに登録する必要があります。
- OpenWeatherサイトでアカウントを作成し、ログインします。
- ユーザー名のドロップダウン メニューにある [My API Keys]に移動します。
- [キーの作成] で [TomsHardware] と入力し、[生成] をクリックします。
- 後で API キーが必要になるので、このページを開いたままにしておきます。
CircuitPythonコードの記述
CircuitPythonはPythonやMicroPythonと同じ構文と操作性を備えていますが、MicroPythonではThonnyのみしか使用できません。CircuitPythonでは、Thonny、Mu、あるいは上級者向けにVisual Studio Codeを使用できます。このチュートリアルではVisual Studio Codeを使用しましたが、テキストファイルを編集するだけなので、どのエディタを使用しても問題ありません。
1. CIRCUITPY にあるcode.py を開き、ファイル内のすべてのテキストを削除します。
2.このプロジェクトの動作に必要な一連のCircuitPythonライブラリをインポートします。board、busio、digitalioライブラリは、SPIインターフェースなどのGPIOとの通信を処理します。requests、sockets、esp32spiは、ESP32を介したネットワーク接続を処理します。最後のライブラリであるsecretsはまだ存在しません。後で作成します。
import board
import busio
from digitalio import DigitalInOut
import adafruit_requests as requests
import adafruit_esp32spi.adafruit_esp32spi_socket as socket
from adafruit_esp32spi import adafruit_esp32spi
from secrets import secrets
3. Python シェルにメッセージを出力する行を追加します。これは、プロジェクトが実行する内容を簡単に記述します。
print("Raspberry Pi Pico WiFi Weather Station")
4. 新しいオブジェクト JSON_URL を作成します。このオブジェクトには、検索したい場所を含むURLと、先ほど生成したOpenWeather APIキーが格納されます。LOCATIONを市区町村名に、API KEYをOpenWeather APIキーに置き換えてください。
JSON_URL = "http://api.openweathermap.org/data/2.5/weather?q=LOCATION&appid=API KEY&units=metric"
5. SPIインターフェース経由でESP32に接続するために使用する3つのオブジェクトを作成します。チップセレクト(CS)、レディ、リセットは、ESP32コプロセッサの有効化とレディ状態の読み取りに使用されます。
esp32_cs = DigitalInOut(board.GP13)
esp32_ready = DigitalInOut(board.GP14)
esp32_reset = DigitalInOut(board.GP15)
6. Pico 上の SPI インターフェイスがどこにあるかをコードに伝える オブジェクト spi を作成します。
spi = busio.SPI(board.GP10, board.GP11, board.GP12)
7. SPI 上の ESP32 の場所と、ESP32 を制御するために必要なピンをコードに伝えるために使用するオブジェクト esp を作成します。
esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset)
8. ソケットを使用するコードを設定します。ソケットは、ネットワーク上の 2 つのデバイスを接続する手段です。この例では、Raspberry Pi Pico を Airlift WiFi Featherwing に接続します。
requests.set_socket(socket, esp)
9. Wi-Fi接続用のループを作成します。次の6行は、Wi-Fi APへの接続を処理します。このループは、ESP32への接続を確認することによって機能します。接続されていない場合は、接続が確立されるまでループを続けます。このループ内には例外ハンドラがあり、secretsライブラリ(後ほど作成します)にあるSSIDとパスワードを使用してWi-Fiへの接続を試みます。接続が確立されない場合は、エラーが表示されます。
while not esp.is_connected: try: esp.connect_AP(secrets["ssid"], secrets["password"]) except RuntimeError as e: print("could not connect to AP, retrying: ", e) continue
10. 3行追加します。1行目は、コードが天気データを取得していることを通知するメッセージを表示し、2行目はOpenWeather API呼び出しから返されたデータを格納するオブジェクトrを作成します。3行目はデバッグ用のHTTPステータスコードを出力します。200番台はすべて正常に動作していることを意味しますが、400番台はAPIに問題があることを意味します。
print("Fetching weather data")
r = requests.get(JSON_URL)
print(r.status_code)
11.マイナス文字「-」を 40 回印刷する行を追加し、Python 出力に区切り文字を作成します。
print("-" * 40)
12.返されたJSONオブジェクト内の温度データをprint関数で出力します。r.json() 関数を使うことで、データ内の2つのキーワード「main」と「temp_max」を検索し、print関数に直接配置することができます。返された温度データは摂氏なので、行末に「C」を追加します。
print("The current temperature is",r.json()['main']['temp_max'],"C")
13.最後の 2 行を追加して、リクエスト オブジェクトを閉じる前に別の区切り線を出力します。
print("-" * 40)
r.close()
14. コードを code.py としてCIRCUITPY ドライブのルートに保存します。
Raspberry Pi Pico の Wi-Fi の完全なコード
import board
import busio
from digitalio import DigitalInOut
import adafruit_requests as requests
import adafruit_esp32spi.adafruit_esp32spi_socket as socket
from adafruit_esp32spi import adafruit_esp32spi
from secrets import secrets print("Raspberry Pi Pico WiFi Weather Station")
JSON_URL = "http://api.openweathermap.org/data/2.5/weather?q=LOCATIONl&appid=APIKEY&units=metric" esp32_cs = DigitalInOut(board.GP13)
esp32_ready = DigitalInOut(board.GP14)
esp32_reset = DigitalInOut(board.GP15) spi = busio.SPI(board.GP10, board.GP11, board.GP12)
esp = adafruit_esp32spi.ESP_SPIcontrol(spi, esp32_cs, esp32_ready, esp32_reset) requests.set_socket(socket, esp) while not esp.is_connected: try: esp.connect_AP(secrets["ssid"], secrets["password"]) except RuntimeError as e: print("could not connect to AP, retrying: ", e) continue
print("Fetching weather data")
r = requests.get(JSON_URL)
print(r.status_code)
print("-" * 40)
print("The current temperature is",r.json()['main']['temp_max'],"C")
print("-" * 40)
r.close()
Wi-Fiログイン用のシークレットファイルの作成
secrets.py ファイルは、Wi-Fi の SSID、ユーザー名、パスワードを保存できる場所です。メインコードでは、ライブラリをインポートし、SSID とパスワードを含む辞書を呼び出すため、Python ライブラリと同じように動作します。これらの処理を実行する前に、secrets.py ファイルを作成する必要があります。
1.テキスト エディターで新しいファイルを作成します。
2.ルーターのSSIDとパスワードを含む辞書「secrets」を作成します。タイムゾーンはお住まいの地域に合わせて設定してください。
secrets = { 'ssid' : 'YOUR WIFI AP', 'password' : 'YOUR PASSWORD', 'timezone' : 'Europe/London', # http://worldtimeapi.org/timezones }
3.ファイルを code.py と同じ場所にsecrets.pyとして保存します。
Raspberry Pi PicoでWi-Fiのコードを実行する
コードは自動実行されますが、出力はPythonシェルに接続した時にのみ表示されます。これを実現する最も簡単な方法は、PuTTYなどのターミナルエミュレータを使用することです。
1. PuTTY をダウンロードしてインストールします。
2. Pico をコンピューターに接続します (まだ接続されていない場合)。
3. PicoのCOMポート番号を確認します。Windowsでは、デバイスマネージャーを開き、「ポート」のドロップダウンメニューをクリックして、Picoのエントリを見つけます(エントリは明確に表示されていないため、どのエントリが消えるかを確認するには、プラグを抜き差しする必要があるかもしれません)。私たちの場合はCOM4でした。
4. PuTTYを開き、「シリアル」をクリックして、デバイスマネージャーで見つかったCOMポートに合わせてシリアルラインを設定します。速度を115200に設定し、「開く」をクリックします。
PuTTYが接続し、Pythonシェルが表示されます
5. Ctrl+Dを押してシェルを再起動し、コードを実行します。数秒後、現在地の最新の天気が表示されます。
レス・パウンダーは、トムズ・ハードウェアのアソシエイトエディターです。クリエイティブテクノロジストとして、7年間にわたり、老若男女を問わず、教育と啓発のためのプロジェクトを手がけてきました。Raspberry Pi Foundationと協力し、教師向けトレーニングプログラム「Picademy」の執筆・提供にも携わっています。