新しくリリースされたRaspberry Pi Pico 2には、2種類のCPUが搭載されています。デュアルコアArm Cortex M33、またはデュアルコアRISC-V Hazard3です。そう、Raspberry Pi初のRISC-V製品です!後者のCPUは、旧型のRaspberry Pi PicoのデュアルコアArm Cortex M0+と新型Arm Cortex M33の中間の性能を備えています。RISC-V CPUは、Raspberry Piの従業員であるLuke Wren氏が興味深いサイドプロジェクトとして開発しました。
スワイプして水平にスクロールします
特徴 | ラズベリーパイ ピコ2 | ラズベリーパイ ピコ |
---|---|---|
SoC | RP2350、デュアルコア Arm Cortex M33、または最大 150 MHz で動作するデュアルコア RISC-V Hazard3 | RP2040、最大133 MHzで動作するデュアルコアArm Cortex M0+ |
スラム | 520 KB | 264KB |
フラッシュストレージ | 4MB QSPI | 2MB QSPI |
安全 | Arm TrustZone、8KB OTP、セキュアブート | なし |
Wi-Fi / Bluetooth | なし | なし(Pico Wにはあります) |
言語サポート | MicroPython、CircuitPython、C、C++ | MicroPython、CircuitPython、C、C++ |
USBインターフェース | USB 1.1 デバイスとホスト | USB 1.1 デバイスとホスト |
GPIOロジックレベル | 3.3V | 3.3V |
GPIO | 26 x デジタルIO | 26 x デジタルIO |
4 x 12ビットADC(アナログピン) | 3 x 12ビットADC(アナログピン) | |
2 x UART、2 x I2C、2 x SPI、24 x PWM | 2 x UART、2 x I2C、2 x SPI、16 x PWM | |
プログラマブルIO | 12個のPIOステートマシン | 8 つの PIO ステートマシン |
オンボードLED | GPIO 25 | GPIO 25 |
力 | マイクロUSBまたはVSYS経由で1.8~5.5V | マイクロUSBまたはVSYS経由で1.8~5.5V |
MCUスリープモード | 10uA未満 | 100uA |
寸法 | 21 x 51mm | 21 x 51mm |
価格 | 5ドル | 4ドル |
現在、この新しいCPUを使用するには、C++ワークフローを使用する方法と、最新のMicroPythonファームウェアのプレビューを使用する方法の2つがあります。今回はRISC-V用の最新のMicroPythonファームウェアを使用し、Arm CPU用のMicroPythonと同じくらい簡単に使用できることをお見せします。
このプロジェクトの目標は、WS2812B「NeoPixel」ライト シーケンスを作成し、RISC-V CPU がタイミングが重要な WS2812B プロトコルを処理できることを実証し、オフィスに素晴らしい「ディスコ ライト」効果を生み出すことです。
この方法に必要なのは
- ラズベリーパイ ピコ2
- 高品質のマイクロUSBケーブル
- ハーフサイズのブレッドボード
- WS2812B「NeoPixel」スティック
- オス-オスジャンパー線3本
Raspberry Pi Pico 2 に RISC-V 用 MicroPython をインストールする
1. MicroPythonリソースからRISC-V MicroPython UF2ファイルをダウンロードします。RISC -Vプレビュー版をダウンロードしてください。これはプレビュー版であるため、不具合が発生する可能性があります。そのため、このファームウェアを使用してミッションクリティカルなプロジェクトをビルドしないでください。
2. Pico 2のBOOTSELボタンを長押しし、マイクロUSBケーブルでコンピューターに接続します。コンピューターにドライブRP2350が表示されたら、BOOTSELボタンを放します。
3. UF2ファイルをRP2350ドライブにドラッグ&ドロップします。Raspberry Pi Pico 2が再起動し、MicroPythonが実行されます。
MicroPythonを使ったことがない方のために説明すると、これはマイクロコントローラ向けに開発されたPython 3のバージョンです。Pythonが書けるなら、MicroPythonも書けます。MicroPythonのコードを書くには専用のエディタが必要です。このチュートリアルでは、デフォルトの基本エディタであるThonnyを使用します。
Tom's Hardware の最高のニュースと詳細なレビューをあなたの受信箱に直接お届けします。
4.お使いの OS 用のThonnyをダウンロードしてインストールします。
5. Thonny を開きます。
6. Raspberry Pi Pico 2をコンピューターに接続し、Thonnyで「ツール」>「オプション」に移動し、「インタープリター」タブをクリックします。インタープリターのドロップダウンリストから「MicroPython (Raspberry Pi Pico)」を選択します。ポートのドロップダウンメニューはそのままにして、Picoを自動検出するように設定できます。「OK」をクリックして閉じます。
7. Python Shell (REPL) で「Raspberry Pi Pico2 with RP2350-RISCV」をチェックして、正しくインストールされていることを確認します。
回路の構築
この回路は、Pico 2とWS2812B「NeoPixels」を3本の線で接続するシンプルなものです。電源とデータ用の接続が必要です。
スワイプして水平にスクロールします
ラズベリーパイ ピコ2 | ネオピクセル | 配線色 |
---|---|---|
3対3アウト | +5V(入力電圧) | 赤 |
GND(任意) | GND | 黒 |
GPIO 16 | DIN(データ入力) | オレンジ |
ヘッダーピンを Neopixel にはんだ付けする必要がある場合があります。そのためには、最高のはんだごてまたははんだ付けステーションと、はんだ付け方法の簡単な復習が必要になります。
コードを書く
このコードの目的は、NeoPixels の全長に沿って疑似ランダムなライト シーケンスを作成することです。
1. Thonny で新しい空のファイルを作成します (ファイル >> 新規)。
2.一連のモジュール(事前に記述されたコード)をインポートします。まずmachineモジュールをインポートします。これにより、コードがPico 2のGPIOと通信できるようになります。次にNeoPixelモジュールをインポートします。これはWS2812B RGB LEDの操作を容易にする抽象化モジュールです。次に、コードに遅延を追加するために使用するtimeモジュールをインポートします。最後に、randomモジュールから乱数生成器をインポートします。これは、コード内で乱数を生成するために使用します。
import machine
import neopixel
import time
from random import randint
3.オブジェクト「np」を作成し、コードにNeoPixelがピン16に接続され、チェーン内に8個の「ピクセル」(個々のLED)があることを伝えます。この値は、実際の数に合わせて変更してください。
np = neopixel.NeoPixel(machine.Pin(16),8)
4. try という例外処理シーケンスを作成します。これは基本的に、Pico 2 に、その内部でインデントされたコードの実行を試行するように指示するものです。失敗した場合は例外が発生し、後でそれを捕捉します。
try:
5.これが「試して」実行するコードであることを示すためにインデントし、while True ループを追加してコードを永久に実行します。Thonny は入力すると自動的にコードをインデントします。
while True:
6. r、g、b、n の4つのオブジェクトを作成し、0~128(r、g、b)と0~7(nはチェーン内のNeoPixelの数です。ここでは8個ありますが、Pythonは0からカウントを開始します)の範囲でランダムに生成された数値を保存します。128という値はNeoPixelの明るさの半分です。この値を255に設定して最大輝度にすることもできますが、消費電力が増加し、光過敏症の方には影響が出る可能性があります。
r = randint(0,128) g = randint(0,128) b = randint(0,128) n = randint(0,7)
7.現在のカラーミックス値をPythonシェルに出力します。これは、ランダムに選択された色を構成するR、G、Bの混合値です。
print("This color is: ","{} {} {}".format(r,g,b))
8.先ほど作成した np オブジェクトを使用して、ランダムに選択されたピクセル (n) の値を r、g、b として保存されたカラー ミックスに設定します。
np[n] = (r,g,b)
9. NeoPixelsに変更を書き込み、0.1秒待ちます。これにより、コードがwhile Trueループの先頭に戻って処理を繰り返す前に、短い遅延が追加されます。
np.write() time.sleep(0.1)
10.ユーザーが [停止] をクリックしたとき、または Ctrl + C を押したときを検出するコードの例外ハンドラー部分を作成します。
except KeyboardInterrupt:
11. Pythonシェルに「EXIT」というメッセージを出力します。これは、例外が正常に発生し、ハンドラプロセスが制御権を握ったことをユーザーに伝えます。
print("EXIT")
12. forループを使って、すべてのNeoPixel(今回は8個)を反復処理します。すべてをオフに設定し、変更を有効にするために書き込みます。
for i in range(8): np[i] = (0,0,0)
np.write()
13.コードをpixels.pyとしてRaspberry Pi Pico 2に保存します。
14. [実行] > [現在のスクリプトを実行] をクリックするか、緑色の実行ボタンをクリックしてコードを開始します。
チェーン内のすべてのNeoPixelは、0.1秒ごとにランダムな色に変化するはずです。Pythonシェルは現在の色をRGB値で表示します。
停止したい場合は、停止ボタンをクリックするか、キーボードの CTRL + C を押します。
完全なコードリスト
import machine
import neopixel
import time
from random import randint
np = neopixel.NeoPixel(machine.Pin(16),8)
try: while True: r = randint(0,128) g = randint(0,128) b = randint(0,128) n = randint(0,7) print("This color is: ","{} {} {}".format(r,g,b)) np[n] = (r,g,b) np.write() time.sleep(0.1)
except KeyboardInterrupt: print("EXIT") for i in range(8): np[i] = (0,0,0) np.write()
レス・パウンダーは、トムズ・ハードウェアのアソシエイトエディターです。クリエイティブテクノロジストとして、7年間にわたり、老若男女を問わず、教育と啓発のためのプロジェクトを手がけてきました。Raspberry Pi Foundationと協力し、教師向けトレーニングプログラム「Picademy」の執筆・提供にも携わっています。