Raspberry Pi Compute Module 5を買ったのでレビュー

Raspberry Pi Advent Calendar 2024の14日目です。今日はこちらのブログに投稿です。

先月末に発売されたRaspberry Pi Compute Module 5を買ってみたのでレビューしていきます。

最初に言うと、CM5は技適がまだなので、今回は電波暗箱で検証しています。技適未取得機器を用いた実験等の特例制度を申請して検証するのもアリだと思いますが、180日ごとに検証内容を変えてまで、技適マークがつくのをまたずに買うものかどうかは各自で判断が必要そうです。わたしの場合は、暗箱である程度検証が済んだら、無線チップはヒートガンで炙って剥がしてしまおうかと考えています。

Seeedさんでポチポチ

今回は、先に販売ページができてたSeeedさんで購入しました。ついでにSeeed XIAO RP2350が欲しかったのもあります。さらについででUSBハブもポチり。

CM5は、4GB RAM・32GB eMMC・無線ありモデルです。Dev Kitに含まれているのと同モデルのため、これがCM5の標準的なモデルに当たりのではないかと思っています。Pimoroniでは8GB RAMモデルなど別のモデルも展開されていますが、今のところ”無線なし”が売られているところは確認していません。よって、日本では現状は技適がないなりの対応が求められます。

IOボードは、購入時点では売られていなかったので、一旦はCM4のIOボードを流用する方向にしました。

しかし、もう少し待てば、PimoroniからIOボードとかも含めて一式が発売されていたので、焦らないで待てばよかったなあと後悔しました。あと、Seeedからの配送は2週間ほどかかり、Pimoroniで購入した勢の方が先に受け取っていたようなので、それもまた悔しみ。

外観とか

表面は冒頭の画像の通り。右上には、Pi5で登場した容量の表記があります。CM5はeMMCの概念もあるので、列は2つです。16GBはCM5のリリースでも触れられていましたが、シルク印刷は今のところ略されている模様。Pi 5で増えたRP1がどうなるか気になっていましたが、ちゃんと搭載されましたね。このおかげで、CM5でもUSB3.0が標準で使えるようになったのはいい話です。

裏面。CM4と比べると、チップ部品が増えた印象です。そして、部品の斜め配置も少し増えたなと言う感じです。eMMCはこちらに移動しました。CM5ではRP1チップが増えたので、追いやられた感がありますね。認証は、FCCIDとIC、KC IDの3つが見えます。PIPで確認するとFCC、CE、イスラエルとシンガポールしか確認できませんでしたが、KC IDって韓国だったような。

実際にCM4と並べて比較。下がCM5です。上のCM4がLite版なせいもあるとは思いますが、密度が違いますね。

表面もついでに比較。

側面。Pi 5では側面の加工が改善されてバリがなくなりましたが、CM5でも同じく側面がきれいな処理になりました。以前のモデルでは、届いてたらまず紙やすりで側面を削ったりしていましたが、そんな作業とはお別れです。

GbEのトランシーバーチップは、CM4から変わらず、BCM54210PEが採用されています。

無線チップも、RPi-RM0 Cモジュールが搭載されています。じゃあ技適とか問題ないんじゃないのって思うかもしれませんが、アンテナがCM5側にあるため、アンテナと込みで技適の取り直しが必要になると推測されます。これがRM2みたいに、アンテナも込みのモジュールだったら関係なくなるんじゃないかと思うのですが、そうはなってないし、推測の話をしてもしょうがないので忘れます。

ブートローダーEEPROMも、さりげなく裏面に移動していたので、いちおう。

さわるぞ!!

というわけでやっと本編(?)。実際に触っていきます。いつもJAMの開催スペースを提供くださっているミドクラさんから借用中の電波暗箱を活用させていただきました。

箱内の構成は、スイッチサイエンスさんの5A対応電源と、D-Sub9端子経由で有線LANで接続をします。今回使用したのはIOボードはWaveShareのCM4-IO-BASE-Bと、CM4-NANO-Bの2種類。前者はNVMe SSDの接続も含めた検証用で、校舎はeMMCの書き込み管理およびeMMCからブートして試験する用にしました。

CM4-NANO-Bを使用してeMMCに書き込む準備をした状態。箱の右側にあるUSB端子を経由してMacに接続します。有線LANはいらないですが、その後起動することも考えて一応。IOボードのBOOTスイッチをオンにしたら箱を閉じます。

eMMCへのRaspberry Pi OSの書き込み

eMMCにRaspberry Pi OSを書き込むには、usbbootリポジトリのrpibootコマンドを使用します。コンパイルの手順はREADMEに従ってください。

https://github.com/raspberrypi/usbboot

rpibootコマンドのコンパイルができたら、次のコマンドを実行して、USBケーブルを接続します。箱の外から伸ばしたUSBケーブルをMacに接続します。しばらくすると、eMMCストレージが見えるようになるので、後はRaspberry Pi Imagerで書き込みを行います。

$ sudo ./rpiboot -d mass-storage-gadget64

起動!

一度MacからUSBケーブルを抜いて箱を開き、BOOTスイッチを戻したら、電源ケーブルにつなぎ替えて箱を閉じます。箱の外のコンセントを接続して、Raspberry Piを起動します。

起動後は普通にSSHして、いつも通りに使えます。

IOボードの互換性?

今回使用しているIOボードは、いずれもCM4向けのボードです。USB3.0ポートはないため、USB3.0の性能を得ることはできませんが、USB2.0ポート、HDMIポート、LANポートは使えるようでした。LANはSSHで、HDMIはUSBキャプチャボードで、USB2.0ポートは適当なCircuitPythonなPicoボードで確認できました。カメラポートとかも確認すべきですが、今日は一旦割愛ということで。まあ、一通り使えていそうです。

USBキャプチャから得られたデスクトップ多少日本語化とかの調整をした後だけどなにもない

HSMIキャプチャの接続の様子。

NVMeのことを忘れていますが、これはIOボードをチェンジする必要があるので後述します。

eMMCの読み書き速度をみてみる

CM4では、eMMCの速度はややいまいちな印象でした。実際、ベンチマークを取ってみると、100MB/s以下と、もっさりめです。ちなみにベンチマークは https://pibenchmarks.com/ のテストを使用しました。

$ sudo curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash
(略)
MMC Type: eMMC v4 (Embedded) - Manufacturer: Samsung/SanDisk/LG - Model: AJTD4R - Size: 14.3G
(略)
     Category                  Test                      Result     
HDParm                    Disk Read                 75.54 MB/sec             
HDParm                    Cached Disk Read          76.34 MB/sec             
DD                        Disk Write                32.1 MB/s                
FIO                       4k random read            7922 IOPS (31690 KB/s)   
FIO                       4k random write           7449 IOPS (29799 KB/s)   
IOZone                    4k read                   18428 KB/s               
IOZone                    4k write                  22075 KB/s               
IOZone                    4k random read            20386 KB/s               
IOZone                    4k random write           20903 KB/s               

                          Score: 4701

では、CM5ではどうかと言うと……早い!!シーケンシャルリードは300MB/s、シーケンシャルライトは100MB/sと、普通に使うぶんにはまず困らない速度になりました。ランダム性能も100MB/s前後で悪くないですね。これは意外です。

$ sudo curl https://raw.githubusercontent.com/TheRemote/PiBenchmarks/master/Storage.sh | sudo bash
(略)
MMC Type: eMMC v4 (Embedded) - Manufacturer: Samsung/SanDisk/LG - Model: BJTD4R - Size: 28.6G
(略)
     Category                  Test                      Result     
HDParm                    Disk Read                 313.89 MB/sec            
HDParm                    Cached Disk Read          227.71 MB/sec            
DD                        Disk Write                109 MB/s                 
FIO                       4k random read            23594 IOPS (94377 KB/s)  
FIO                       4k random write           25006 IOPS (100024 KB/s) 
IOZone                    4k read                   45470 KB/s               
IOZone                    4k write                  69301 KB/s               
IOZone                    4k random read            44893 KB/s               
IOZone                    4k random write           56323 KB/s               

                          Score: 13136

NVMeはどう?

IOボードをCM4-IO-BASE-Bにチェンジして、NVMeの性能をみていきます。Jeffがすでにテスト済みらしいのですが、CM4向けのIOボードでもPCIe3.0x1接続でNVMeを使えるらしく、追試ということにして私も試してみました。

ちなみに、デフォルトのブート順はeMMCが先になっているので、EEPROMの設定を開いて、eMMCの順番を後ろにしておきました。

$ sudo rpi-eeprom-config -e

# Default BOOT_ORDER for provisioning
# NVMe -> USB -> SD -> Network
BOOT_ORDER=0xf2146

これでNVMeからブートするようになりましたので、PCIeのスピードを3.0に変更します。

$ sudo vi /boot/firmware/config.txt

[cm5]
dtparam=pciex1_gen=3

これで再起動して、ベンチマークを取ってみましょう。結果は……あれ、なんかリードが妙に遅いですね。ライトは早いんですけど。あと、ランダムリードも早いので、シーケンシャルリードだけなんかおかしいですね。SSSTC CL1-3D256-Q11 256GBを使いましたが、こいつが悪いのかしら。

     Category                  Test                      Result     
HDParm                    Disk Read                 156.65 MB/sec            
HDParm                    Cached Disk Read          125.58 MB/sec            
DD                        Disk Write                594 MB/s                 
FIO                       4k random read            155151 IOPS (620606 KB/s)
FIO                       4k random write           88658 IOPS (354632 KB/s) 
IOZone                    4k read                   243558 KB/s              
IOZone                    4k write                  198683 KB/s              
IOZone                    4k random read            62502 KB/s               
IOZone                    4k random write           232042 KB/s              

                          Score: 51281

というわけで、Samsung PM991a 256GBに変更して再テスト。結果は以下の通り、PCIe3.0x1っぽいスピード感を得られていました。ふぅ〜よかった。

     Category                  Test                      Result     
HDParm                    Disk Read                 748.64 MB/sec            
HDParm                    Cached Disk Read          664.08 MB/sec            
DD                        Disk Write                493 MB/s                 
FIO                       4k random read            208979 IOPS (835918 KB/s)
FIO                       4k random write           93090 IOPS (372363 KB/s) 
IOZone                    4k read                   208154 KB/s              
IOZone                    4k write                  173558 KB/s              
IOZone                    4k random read            57892 KB/s               
IOZone                    4k random write           193770 KB/s              

                          Score: 48226

既存環境でCM5をブートするときはそのままではUSB2.0が使えないので注意

既存環境でブートしてUSBデバイスを試そうとしたら、デバイスが認識しなくて「おや?」となりました。IOボードの互換の問題かと思ったらそうではなく、CM4ではotg_modeの設定を投入する必要があったのと同じように、CM5ではdwc2の設定が必要になるようでした。eMMCに導入した環境のconfig.txtには含まれていたので、古いバージョンからのアップデートでは自動挿入されないようです。それもそうか。

というわけで、既存環境にも設定を投入したところ、無事にUSB2.0ポートが認識するようになりました

[cm4]
otg_mode=1

# [cm4]と[all]の間あたりに差し込んでおく
[cm5]
dtoverlay=dwc2,dr_mode=host

[all]

まとめ!

届いたCM5を早速舐め回してみました。一晩でざっと触っただけなので、まだ全然見きれていないですが、CM5は逃げるわけではないので、ゆっくり触っていけたらと思っています。

そう、冬コミの執筆が終わったら、ゆっくり触りたいンゴね……(死)

Raspberry Pi AI Cameraをさわってみた

こんにちは、あっきぃです。

先日発売されたRaapberry Pi AI Cameraのサンプルをミドクラ様からお借りできましたので、さわってみたレポートをお送りします。

製品のようす

カメラ本体。カメラセンサーはソニーのIMX500という、2020年頃に登場したセンサーを使用しています。

一見すると今までのカメラモジュールと同じように見えますが、AI Cameraは、搭載されているIMX500カメラセンサー自体がAI処理を実行して結果を返すため、映像と結果を受け取ることも、結果だけ受け取ることもできます。後者を活用すれば、通信帯域を節約しながら物体検出を行ったり、プライバシーに配慮しながらデータを軽量に保存することも可能になります1。ちなみに、右側のパーツはレンズ部分に付属する保護カバー?のようです。使うときは外して使用するようです。

カメラセンサーの下にチップが見えていますが、これはRaspberry Pi PicoでおなじみRP2040チップです。以下は製品画像の引用2ですが、センサーの下はこうなっているようです。

こちらは特筆することはないのですが、カメラセンサーの裏側も。

パッケージと付属物はこちら。白いドーナツ状のパーツは、Camera Module2にも付属していた。レンズのフォーカス調整用リングです。カメラケーブルはPi 5で登場した、今までより硬めのケーブルが、Pi 5とZero系向けのものと、それ以外の従来モデル向けのものの2種類付属しています。

導入してみよう

今回はドキュメントのチュートリアルをそのまま試すだけとしたため、手順は以下のページを参照ください。

https://www.raspberrypi.com/documentation/accessories/ai-camera.html

とはいえ、OSを最新にアップデートして(カーネル、libcamera、Picamera2などをIMX500のバージョンに上げる必要があります)、imx500-allパッケージを導入するだけで遊び始められるため、比較的かんたんです。

動かしてみる

実際に動かしてみましょう。まずはRaspberry Pi 5を使用して、いろいろなサンプルを動かしてみました。カメラは、カメラケーブルにマスキングテープで針金(ケーブルを束ねるのに使われているネジネジのやつ)を貼り付けて、フレキシブルなケーブルにするハックと、スマホスタンドの組み合わせで固定しました。

まずはシンプルな物体検出のサンプル。最近はあまり見かけないような気もする、Raspberry Pi公式マスコットのクマ「Babbage Bear」が、きちんと「teddy bear」として認識されていますね。皆さんご存知でしょうか?Pimoroniで現在もふつうに購入できるので、気になる方はこちらです。

少し見づらいですが、ディスプレイの左下でhtopコマンドを実行しています。Raspberry Pi自体に負荷がそれほどかかっていない=カメラがAI処理をやっています。

こちらはスクリーンショットでちゃんと撮影してかつ、Picamera2バージョンの物体検出サンプルです。AI Cameraももちろん、Picamera2で開発できるのが利点の一つです。こちらのほうがhtopの結果が見やすいですね。ちなみに、左上のデモ実行の出力を見ると、Network Firmware Uploadという出力が見えますが、コマンドを実行すると、カメラにデータを転送する処理があり、起動までに30秒〜1分ほど時間がかかります。

こちらは人間のモーション検出デモ。これも先のデモも含め、AI Kitで同様のデモが実行できますが、ほぼ同じことがカメラだけでできています。おかしなポーズをとってもちゃんと認識していますね。

これはセグメンテーションのデモ。検出したものの物体に色をつけてくれるものですが、暗めの緑で色付けをされて、呪いにかかった人間のエフェクトっぽいなと思ったので、そんなポーズにしてみました。夜に試していたときの写真なので、実際に疲れているのですが。

他のモデルでも動かしてみる

AI Cameraのリリースの記事では、AI CameraはPi Zeroをふくむすべてのモデルで動作しますと言及されています。

The AI Camera can be connected to all Raspberry Pi models, including Raspberry Pi Zero, using our regular camera ribbon cables.

実際に、先日のMaker Faire Tokyo 2024のKSYブースでは、Raspberry Pi Ltdから来ていたMattさんがAI Cameraのデモを持参して展示していて、ここではPi Zero(おそらく2W)が使用されていました。

というわけでわたしもPi Zero 2Wで環境を再現してみました。ディスプレイはPimoroniのHyperPixel4を使用しました。

裏面。こちらのカメラの固定には簡易的に、厚紙とマスキングテープを使用しています。

MicroSDカードのセットアップは、あらかじめRaspberry Pi 5で済ませて、動作も確認してからPi Zero 2Wに移しました。が、どうやらこれではPiZero 2W上のRaspberry Pi OSがカメラを自動認識できないようです。ドキュメントのチュートリアルでも、「少し手を加えれば」という一文があるので、どうやら手を加える必要がありそうです。

With minor changes, you can follow these instructions on other Raspberry Pi models with a camera connector, including the Raspberry Pi Zero 2 W and Raspberry Pi 3 Model B+.

ドキュメントには記載がありませんが、はカメラを手動でも認識できるようにすれば良いので、つまり、/boot/firmware/config.txtに設定を追記すればOKです。

# この設定をコメントアウトする
# Automatically load overlays for detected cameras
#camera_auto_detect=1 

# ファイル末尾の[all]以下に追記
[all]
dtoverlay=imx500

# これはHyperPixel4用の設定
dtoverlay=vc4-kms-dpi-hyperpixel4

設定後にOSを再起動をしたら無事に認識してくれたので、試してみた結果がこちら。

動画で!

もちろん、PiZero 2WはRAMが512MBしかないため、デスクトップが起動するまで待たされたりしますが、起動してしまえば、動画のように物体検出の結果がすぐにでてきます。

AI KitとAI Cameraどちらにしよう?

公式のリリースでも言及されていますが、AI Kitはパフォーマンスの代わりにPi 5限定である一方、AI Cameraはカメラと一体になっているため用意するものがこれ一個で済んで、Pi 5以外のほぼすべてのRaspberry Piで使えます。

個人的には、手軽な入門としては、後者のほうが手軽そうな印象をもちました。

入手するには?

AI Cameraは各リセーラーを通じて販売される見込みです。観測している範囲では、KSYさんと、イギリスのPimoroniは未入荷です。スイッチサイエンスだけ昨晩に販売がありましたが、初回入荷分は少量だったようで、一瞬で完売してしまったようです(わたしはなんとか間に合って購入できました)。1万3千円ほどするのに、皆さん判断が早い……!!

そう言った状況のため、例によって当面入手が難しいと予想されます。AI Cameraが欲しい方は、リセーラーさんの入荷通知機能や、Pre-Orderを活用してみてください。

  1. https://www.sony.com/ja/SonyInfo/News/Press/202005/20-037/ ↩︎
  2. https://www.raspberrypi.com/products/ai-camera/ ↩︎

Raspberry Pi 4のリビジョンと消費電力の話

昨日はちょっと久々のRaspberry Pi JAM Tokyoでした。天気が悪くてどうなるかと思いましたが、ピークが前にずれたおかげで、移動してる間に雨がやんだのでなんとかなりました。よかったーー。

ミドクラさんのスペースの入口にJAMのロゴが入りました。すごい……!

参加人数は天気などの都合で参加できなくなってしまった人もいたぶん減ってしまいましたが、たこ焼きパーティをしながらラズパイの話とかとかラズパイじゃない話とかで盛り上がりました。

Raspberry Pi 4のリビジョンの話

昨日の発表はPi 5とかOSの近況をやったのですが、当日追加でつっこんで話したPi 4の話題をブログにもまとめなおしてみます。Pi 4は最初の発表から3回ほどリビジョンが変わっていて、現在はRev.1.5です。ざっくり以下の内訳です。Rev.1.3がないのは不明ですが、ボツにでもなったのでしょう……?。

  • Rev.1.1(2019/6〜): 最初。PD電源が使えない問題があった初期リビジョン。日本未発売なので大多数の日本人ユーザーには関係ない
  • Rev.1.2(2019/10〜12): PD電源が使えるように修正されたリビジョン。ここから日本で発売されるようになった。 
  • Rev.1.4(2020/5, 2021/1〜): 8GB RAM登場以降のデザイン。Dialogのsub-PMICが搭載され、TVSダイオードが移動した。2021/1〜はおそらく他のRAMのモデル?
  • Rev.1.5(2021/10〜): 現行。PMIXがMxLからDialog DA9090に変更された

カッコ内はおもに変更履歴のTransition Dateから引用(1.4の2020/5は8GB RAM登場時)ですが、現行リビジョンは2021年10月から移行ということになっていて、実はもう2年半くらい経過しているので、多分これを持っている人も多そうな気がしますが、半導体不足真っ只中だったので、そうでない可能性もあるような気がしています。どうでしょう。

変更履歴はRaspberry Pi Production Information Portal(PIP)で誰でも確認できます。

https://pip.raspberrypi.com/categories/560-pcn

また、手持ちのPi 4のリビジョンはcat /proc/cpuinfoコマンドで確認できます。

最新リビジョンが欲しい

わたしの場合、出たらすぐに買ってしまうので、最新リビジョンは持っていないことに気づきました。パーツが変わっても動作に変更はないはずですが、もしかして電力の効率が変わって省エネになってたりしたら嬉しいよななどと思ってしまい、しばらく悶々とした結局、我慢できずに買ってしまいました。

ヤフオクで1週間くらい出物を探し回り、マークしてたやつが値下げ再出品されたタイミングで即決落札して、ヤフオクのクーポンとPayPayのポイントを駆使しました。おかげで散財が軽減されました(セルフ暗示)。届いたのがこちら。赤枠部分がPMIC、MxLからDialogになっているのがわかります。

ところで、ヤフオクで物色するために見分け方を研究しまくっていたせいで、先日話題になっていた、ロシアで使われていたというPi 4も、瞬時に「こいつはRev.1.4以降…」と見分けられてしまいました。ちなみに、TVSダイオードがHDMI0の左にいなければRev.1.4以降です。

https://togetter.com/li/2385032

半導体不足でメイカー向けに流れなくてヒーヒー言ってるそばでロシアにRPiが戦争用途に流れてしまっていたのは遺憾(製品の規約でも元から禁止されている)です。ロシアには、やはりというか中国から流されているのがイギリス有料ニュース記事で指摘されていたようです。500万ドル分らしいので、4GB RAM(55ドル)と仮定して利益云々無視した単純な割り算をすれば約9万台となり、なかなかひどいお話です(なお、ウクライナ側も使っていたりするようで……?)。

https://forums.raspberrypi.com/viewtopic.php?t=368865

消費電力を見る

話を戻し「もしかして電力の効率が変わって省エネになってたりしたら嬉しいよな」を確かめるべく電力を測ってみます。USB電流計測器のUT70にPi 5の公式電源を入力して、OUTからPi 4に接続して、MicroSDからOSを起動します。起動が終わって落ち着いた頃の電流をチェックしていきます。

なお、OS側では、電源LEDオフと、無線の無効化の設定を投入しています。設定してない状態で比較すればよかったですね……。設定方法は私のブログのほうで触れています。

また、EEPROMのバージョンも全部そろえてあります。

Rev.1.2

これだけRAMが4GBですが(このリビジョンに8GBモデルはない)それは見なかったことにしつつ、結果は358mAでした。

Rev.1.4

8GBがでてすぐに買ったやつです。結果は353mA。誤差かもしれないけど、Rev.1.2よりも5mAくらい低いかも?

Rev.1.5

これも8GB RAMです。なんと285mA!?50〜60mAも差があるのですが、なんですかこれは?

ついでにRev.1.1

昔Pimoroniで2GB RAMを買ってみたら、まだ在庫のRev.1.1があったらしく来ちゃったやつもいちおう試してみます。技適はないことになっているので、ここでは念のため暗箱に投入します。特例出すよりこっちのが出すだけで早いので……。なお、今回からミドクラ様からユーザー会に貸与いただいた暗箱を使用しています。ありがとうございます。そしていきなり個人的な興味のために使ってしまいすみませんでした。

雑に箱の中にiPhoneをつっこんで、動画をとることでUT70の値を読むことにしました。

結果は390mA。1.5とは100mAも差がついてしまいました。さすがにこの結果をもってPi 4同士で買い替えることはないと思うのですが、Rev.1.1ユーザーはちょっと心揺れてしまいそうな結果です。

Rev.1.5ならSoCの温度も低い気がする

この消費電力ならと、アイドル時のRev.1.5のSoCに指を乗せると、やはりというか全然ぬるいことに気が付きました。初期のアツアツはどこへやら。SoCに指を載せては「熱くて触れない!」などと言われがち(どうしてそんなことを?)ですが、そんな一部な方にもぜひ触ってみて欲しいです。ちなみに45.7℃でした。やっぱりぬるめ。

$ vcgencmd measure_temp
temp=45.7'C

まとめ

1万円ちょっとでただ知的好奇心を満たしました。なんとなく想像だけで買ってみたものの、想定外に消費電力が減っていたのでビビりました。しかし散財である。

リビジョンアイドル時の電流(mA。無線と電源LEDを無効化した状態)
1.1390
1.2358
1.4353
1.5285
表でまとめ。

DA9090に変更後にそのような支店で見ている人がいるか探そうとしたら、フォーラムで「DA9090が壊れやすく、入手性がMxLよりも悪いため修理もできない」と騒いでいる、おそらく少数の人を見かけました。入手性はさておき、本当に壊れやすいならとっくに対策が入っているはずですから、無視して良いと思われます。

買ったPi 4は、デスクの上で動いているPi 2Bを置き換えるのに使おうと考えているところです。上に張ったカリカリチューニングのブログに書きましたが、Pi 2Bは現状340mAで動いているので、50〜60mAの節電をしながらRAMを8倍にできそうです。

Raspberry Pi Connectがでた(どこからでもラズパイにリモートデスクトップ!)

Raspberry Pi Ltdから、Raspberry Pi Connectなるサービスがベータ扱いで公開されました。

https://www.raspberrypi.com/news/raspberry-pi-connect/

あらかじめRaspberry Pi IDを取得して、Raspberry Pi OSのデスクトップ環境にRaspberry Pi Connectをセットアップしておけば、Raspberry Pi IDを使用して世界中のどこからでもWebブラウザ経由でリモートデスクトップ接続ができるというサービスです。

インストールや設定手順はドキュメントが公開されているので、興味がある人はここを参照してセットアップしてみてください。

https://www.raspberrypi.com/documentation/services/connect.html

ただし、ベータ版のため、予期せぬ不具合等が起こる場合もあるかもしれないとのこと。なにかあった場合はフォーラムで報告してみると良いでしょう。

手元で動かしてみた様子はこちら。LAN内で試しているのでさすがに動画再生もスムーズです(音声は非対応です)。

再生しているのはJeff Geerling氏のRaspberry Pi Connectレビュー動画。多分この私の記事より情報があるのでこちらをおすすめします。

自分でVPNを用意せずに手軽にリモート接続ができるので、自宅に1台セットアップしておいて、自宅LAN内の踏み台環境なんかに使うと便利そうです。最新のRaspberry Pi OSなら構築できるので、モデルはあまり問いませんが、Pi 5+NVMe SSDな環境ならアイドル4W、上のように動画を再生してActive Coolerがゆるゆると回っている状態で5〜8Wと、PCと比較すればまあ省電力なデスクトップ環境にできるので、どこでも自宅Pi 5環境に接続できるというのはアリっぽい気がします。

当然、Raspberry Piのインターネット環境はRaspberry Piの設置場所によるので、海外旅行中に日本でしか見られないサイトを見る、あるいはその逆、なんて使い方もできそうですね。

ちょっと可能性を感じるおもしろげなこのサービス、一度試してみると良いと思います。

(追記) 家から出るとやはり遅い

会社から自宅のRaspberry PiにConnectしてみたところ、画面が表示されないか、表示されてもほぼ操作できない状態になりました。Jeffの動画でも触れられていましたが、これはロンドンの中継サーバーを中継してしまっているので遅くなってしまうようです(鍵アイコンにカーソルを合わせると表示されます)。中継サーバーが増えれば改善されるかもしれませんが、そうすると無料でサービス維持ができるかどうか……?という話題にもなってきそう。

会社から自宅にVPN接続した状態でConnectすると、こちらは中継サーバーを使用しないpeer-to-peer接続になり、快適に使用できました。これはちょっとおもしろい挙動のような気がしました。

あと、Jeffの動画を全部ちゃんと見ていなくて気づいてなかったのですが、動画中に私のYoutubeアイコンが映り込んでいました😆(メンバーシップのユーザー一覧でした)

Raspberry Pi 5の日本国内販売が開始

Raspberry Pi 5が日本での工事設計認証取得を完了し、本日より日本のRaspberry Pi Approved ResellerであるKSYおよびスイッチサイエンスの2社から販売が開始されました。

https://raspberry-pi.ksyic.com/main/index/pdp.id/1059,1015,1016/

両リセーラーとも、本体以外にもケースやカメラ・ディスプレイケーブルなどのアクセサリーが同時に販売開始されているため、必要に応じて購入すると良いでしょう。

Raspberry Pi 5の各種NVMe SSDボードを試す

あっきぃです。

日本ではRaspberry Pi 5の発売はまだですが、先週末には日本の技適に関する証書PDFがRaspberry Piのポータルにアップロードされ、進捗が見えてきています。残念ながらこのPDFをもって日本で買ったり使ったりして良いことにはなっておらず、製品(またはパッケージ等)にマークと番号が印字されたものが販売開始されて初めて適法に利用できるようになるため、もう少しの辛抱です。

https://pip.raspberrypi.com/categories/894-approvals

さて、今回はRaspberry Pi 5のNVMe SSD用アクセサリーボードの話題。PCI Expressポートを使用したNVMe SSDの接続用アクセサリーボードについて、公式から販売が予告されていますが、まだ発売はされていません。しかし、すでにサードパーティベンダーからはいくつものNVMe SSDの接続用アクセサリーボードが発売されています。何種類か入手して試してみましたので、それぞれの使用感をレポートしていきます。

3種類のボード

今回紹介するのはこちらの3種類です。

各ボードについて、それぞれ詳しく見ていきましょう。

コンパクトながら2280サイズに対応するX1001

GeekwormのX1001は、Pi 5上に搭載するタイプのボードです。GPIO接続は不要かつGPIO部分が空いているため、HATボードの接続等のGPIOポートアクセスが可能です。固定用のネジ穴は3つで、スペーサーをつけると3本足で立つ、少しふしぎな形になります。

NVMe SSDは2230、2242、2260、2280のサイズに対応しますが、SSDの固定のダボは2280で固定になっていて外せないため、写真のように2280サイズ以外のSSDを使う場合には、別のアダプター等に付属している固定ネジが必要になります。また、動作中はACTのLEDランプが点滅します。

HAT形状のHAT Drive! Top

2023年9月末に設立されたばかりという、ポーランドのPineBerry Piが販売するHAT Drive Top!は、HATサイズにまとまったコンパクトなボードです。コンパクトな分、対応するNVMe SSDのサイズは2230、2242のみとなります。通電中の電源ランプとACTランプを搭載しています。

Raspberry Piへの接続は、PCIeケーブルのみでも動作しましたが、GPIOポートに接続するための延長ピンソケットが付属しており、これを使用して他のHATボードなどとセットで搭載することができます。なお、延長ピンソケットの抜き差しは慣れるまでは少し大変な印象でした。

Pi 5の下に配置!NVMe Base

イギリスのPimoroniが販売するNVMe Baseは、先述の2つとは違い、Pi 5の下に搭載するタイプのボードです(ちなみに、Pineberry PiやGeekwormも同様にボトムに配置するタイプのボードがあるようです)。

SSDのサイズはX1001と同じく2230、2242、2260、2280に対応します。SSDの固定は付属のネジとナットを使用して固定します。

ボードの裏面は波紋のような模様が特徴的。また、FPCケーブルのカーブも面白い設計ですね。

組み立てたあとの様子。ボードが下にあるため、Pi 5の全ポートにアクセス可能なのが便利です。一方、SSDの交換については都度ネジを外す必要があるのが、用途によっては面倒に感じるかも知れません。また、公式ケースやPimoroniのPiBowとは組み合わせられないのも惜しいところです。NVMe Baseに対応したPiBowケースの登場に期待したいです。

Raspberry Pi 5でNVMeブートをするための手順

Pi 5でNVMeブートをするには、事前にPi 5のEEPROM上の設定に対してブート順序の変更が必要なため、MicroSDカードでOSを起動して、rpi-eeprom-configコマンドを実行して設定作業を行います。

コマンドを実行するとエディターに設定が表示されるため、以下の2つのパラメータについて設定します。

$ sudo rpi-eeprom-config --edit

[all]
# BOOT_ORDERを変更。fより右に6を含める
BOOT_ORDER=0xf416

# 追記する
PCIE_PROBE=1

BOOT_ORDERパラメータは、6がfよりも右に含まれるように書き換えます。Raspberry Piの起動時には、数字の右側から起動が試行されます。0xf416の場合は、NVMe、MicroSD、USBの順に試して、起動メディアがなければまたNVMeから再試行していきます。各数字の意味の詳細は公式のドキュメントを参照してください。

https://www.raspberrypi.com/documentation/computers/raspberry-pi.html#BOOT_ORDER

PCIE_PROBEパラメータは、次期HAT(おそらくHAT+)の仕様をサポートしないボードのためのパラメーターで、設定するとCM4と同様のPCIe x1検出方法になります。この設定はX1001とNVMe Baseの場合は不要です。HatDrive! Topの場合のみGPIO接続時にパラメータが必要ですが、GPIOに接続しない場合は不要です(今後のHatDrive!の設計変更によってはGPIO接続時でも不要になる可能性があります)。

https://github.com/raspberrypi/rpi-eeprom/releases/tag/v2023.12.06-2712

設定後はファイルを保存して終了し、一度OSを再起動します。再起動後はOSをシャットダウンしておきます。

NVMe SSDへのOSの用意

NVMe SSDにRaspberry Pi OSをインストールするには、作業PCにNVMe SSDを接続するために、USBに変換するためのエククロージャが必要です。Amazon等で販売されているので、1つ用意しておくと良いでしょう。

USB変換を使用してPC等に接続するとUSBストレージとして認識するので、MicroSDカードのときと同様に、Raspberry Pi Imager等を使用してRaspberry Pi OSを書き込みます。

OSを書き込んだ後、再度PCに接続してブートパーティションをマウントし、/boot/config.txtをエディターで開いて、以下の設定をファイルの末尾に追記します。

[all]
dtparam=pciex1
dtparam=pciex1_gen=3

dtparam=pciex1は、PCI Expressの外部コネクターを有効にするためのオプションです(なくても動作しますが一応記述します)。有効化すると、ポートがPCI Express 2.0 x1として利用できるようになります。

しかし、公式にはサポートされていないものの、dtparam=pciex1_gen=3を追加することで、PCI Express 3.0 x1として利用できるように強制できます。ただし、起動できなかったり、不安定になる場合もあるようなので、不具合が生じた場合はこのパラメータと除いてみてください。

起動!

OSが用意できたらボードをPi 5に搭載して起動します。ユーザー会では引き続き電波暗箱を使用しているため、箱にボードを入れての試験となります。基本的にボードに因る性能差異はなかったため、HatDrive! Topで検証した内容を掲載します。PCIe 3.0×1で問題なく利用できたため、SSDの性能をより引き出すことができました。

まずはhdparmを使用したシーケンシャルリードのテスト。800MB/sという、ラズパイらしからぬ性能が出ています。

akkie@nvmepi1:~ $ sudo hdparm -t /dev/nvme0n1

/dev/nvme0n1:
 Timing buffered disk reads: 2454 MB in  3.00 seconds = 817.58 MB/sec

続けてddコマンドでシーケンシャルライトのテスト。こちらも700MB/s弱の性能を叩き出していて、やはりラズパイらしからぬスピードです。

akkie@nvmepi1:~ $ dd if=/dev/zero of=a.zero bs=1M count=10000
10000+0 records in
10000+0 records out
10485760000 bytes (10 GB, 9.8 GiB) copied, 15.0922 s, 695 MB/s

Raspberry Piのストレージをテストしてサイトに掲載するスクリプトを提供しているPi Benchmarksのスクリプトを使用したテスト結果は以下の通り。DDの書き込み方法が異なるためか、あるいは熱による性能低下によるものかは不明ですが、こちらは359MB/sにダウンしてしまいました。ランダムの読み書き性能は150〜200MB/sと、なかなかの数字となりました。

     Category                  Test                      Result     
HDParm                    Disk Read                 798.84 MB/sec            
HDParm                    Cached Disk Read          675.10 MB/sec            
DD                        Disk Write                359 MB/s                 
FIO                       4k random read            126419 IOPS (505679 KB/s)
FIO                       4k random write           59883 IOPS (239532 KB/s) 
IOZone                    4k read                   198011 KB/s              
IOZone                    4k write                  144889 KB/s              
IOZone                    4k random read            57412 KB/s               
IOZone                    4k random write           167898 KB/s              

                          Score: 37236 

まとめ

色々なNVMeボードについて特徴を解説し、実際にボードをRaspberry Pi 5で利用するための手順について解説しました。

公式のNVMe HATボードがまだ登場していませんが、すでにサードパーティベンダーから、今回紹介したような、使い方やNVMe SSDのサイズに応じた様々なボードを選べるようになっているため、お好みで用意してみてはいかがでしょうか。

NVMe SSDを利用することで、MicroSDカードよりも高信頼かつ高速なRaspberry Piの環境が構築できます。サーバー用にRaspberry Pi 5を検討している方は、NVMe SSDの採用も合わせて検討すると良いでしょう。

Raspberry Pi PicoとWIZnetのEthernetモジュールでWebサーバーを立てて謎APIを作って遊ぼう

こんにちは、あっきぃです。この記事はRaspberry Pi Advent Calendar 2023の15日目の記事です。

WIZnetさんからサンプルをいただいたので、今回はそちらを使って少し遊んでみます。レビューのほうは別の方がする予定となっているため、私からはとにかくなんか遊ぶ感じの話題をお届けします。ちなみにいただいたのは以下の3種類(下のHATは2つ)。WIZnetさん、ありがとうございます!

今回遊ぶ内容的にはどれを使用しても同じですが、今回はEthernet HATの方を使用しました。こちらの場合別途Raspberry Pi Picoが必要になりますが、EVB-Picoよりも全長が少し短くなってコンパクトになります。また、EVB-Picoと比べるとボード上の通電LEDがPicoで覆い隠せるため、実運用に投入するとLEDが眩しくて邪魔という問題が緩和できます。まあ、EVB-PicoのEVBはEValuation Boardの略だと思うので、実運用に適しているのかは不明ですが……。

なお、WIZnet製品は、スイッチサイエンスで購入できます。

https://www.switch-science.com/collections/all/cat:%E3%83%A1%E3%83%BC%E3%82%AB%E3%83%BC%2F%E3%83%96%E3%83%A9%E3%83%B3%E3%83%89_WIZnet

今回はCircuitPythonを使用して、Raspberry Pi Picoが接続されているPCのマウスカーソル操作をWeb API化して、リモート操作できるようにしてみます。

CircuitPythonを使う時、Macユーザーは注意

Macユーザー向けにナウな注意として、現在のmacOS Sonoma(14.2時点で問題は継続中)では、macOSの不具合によって、CircuitPythonを接続してすぐにスクリプトの読み書きをすると、I/Oエラーが発生してデータが破損するなどのおそれがあります。以下のページにあるシェルスクリプトを使用して再マウントすることで問題を回避できます。

https://learn.adafruit.com/welcome-to-circuitpython/troubleshooting#macos-sonoma-14-dot-x-disk-errors-writing-to-circuitpy-3160304

ネットワークに接続する

WIZnetのデバイスを扱うには、adafruit_wiznet5kモジュールを使用します。CircuitPythonのライブラリバンドルに収録されているので、ここからadafruit_winzet5kモジュールをデバイス上のlibディレクトリにコピーして使用します。

WIZnetのデバイスを使ってDHCPでアドレスを取得するまでのコードは、以下のようになります。このコードをデバイス上の/code.pyとして保存します。

import board
import busio
import digitalio
import time
from adafruit_wiznet5k.adafruit_wiznet5k import WIZNET5K

# SPIの初期化
SPI_SCK = board.GP18
SPI_TX = board.GP19
SPI_RX = board.GP16
SPI_CSn = board.GP17
W5500_RSTn = board.GP20
cs = digitalio.DigitalInOut(SPI_CSn)
spi_bus = busio.SPI(SPI_SCK, MOSI=SPI_TX, MISO=SPI_RX)

# デバイスをリセットする
ethernetRst = digitalio.DigitalInOut(W5500_RSTn)
ethernetRst.direction = digitalio.Direction.OUTPUT
ethernetRst.value = False
time.sleep(1)
ethernetRst.value = True

# 接続する
eth = WIZNET5K(spi_bus, cs, is_dhcp=True)
print("MAC Address:", [hex(i) for i in eth.mac_address])
print("My IP address is:", eth.pretty_ip(eth.ip_address))

実行結果は以下の通り。デバイスはMACアドレスは持っていないため、”dead beef feed”になっています。MACアドレスを指定することは可能なため、複数動かすなどの場合には適宜変更すると良さそうです。

code.py output:
MAC Address: ['0xde', '0xad', '0xbe', '0xef', '0xfe', '0xed']
My IP address is: 192.168.29.127

Code done running.

Webサーバーにする

CircuitPythonでWebサーバーを作成するにはadafruit_httpserverモジュールを使うのが簡単です。ただ、WIZnetのボード向けのCircuitPythonにはhashlibモジュールが内蔵されていないため、現在のモジュールのバージョンでは、インポート時にエラーが発生します。そのため、ライブラリバンドルからではなく、Githubリポジトリから最新のコードを取得して、adafruit_httpserver/response.pyにあるimport hashlibの行をコメントアウトする必要があります。この問題は報告をして、現在やり取りをしているところです。 (追記)修正されたようです。リリースもされたため最新のバージョンが使用可能です。

https://github.com/adafruit/Adafruit_CircuitPython_HTTPServer/issues/73

ライブラリの方に一手間が発生してしまいましたが、気を取り直して、上記のIPアドレスを取得するコードに、次のコードを書き加えると、Webサーバーが起動するようになります。

import adafruit_wiznet5k.adafruit_wiznet5k_socket as socket
from adafruit_httpserver import Server, Request, Response

socket.set_interface(eth)
server = Server(socket)

@server.route("/")
def root(request: Request):
    print("GET /")
    return Response(request, "Hello!")

server.serve_forever(str(eth.pretty_ip(eth.ip_address)))

実行時に表示されたIPアドレスにアクセスすると、Hello!の文字が表示されました。

マウスを操作する

個人的にCircuitPythonを気に入っている理由の一つに、USB HIDデバイスとして使えるという点が上げられます。MicroPythonにはないので、私がCircuitPython推しなのはこの一点が大きいです。

USB HIDとして使えるようにするには、adafruit_hidモジュールを使用します。code.pyにコードを書く……前に、以下の内容を記述したboot.pyを用意する必要があります。

import usb_hid

usb_hid.enable((usb_hid.Device.MOUSE,))

Webサーバーが動くようになったcode.pyは一旦リネームして退避しておき、あたらしいcode.pyには以下のコードを用意します。

import time
import usb_hid
from adafruit_hid.mouse import Mouse

mouse = 0
while not mouse:
    try:
        mouse = Mouse(usb_hid.devices)
    except:
        pass
    time.sleep(1)

for i in range(0, 8):
    mouse.move(x=20, y=20)
    time.sleep(0.25)

boot.pyの反映はソフトリセットではできないため、code.pyの保存までできたら、ケーブルを抜き差ししてハードリセットします。(macOS Sonomaユーザーは上に書いた再マウントのWorkaroundを忘れずに!)。

抜き差し直後に、マウスカーソルをよく見ると、右下に少しだけカクカクと移動していきます。hidモジュールはクリックなどの操作ももちろんできるので、マクロ的な操作も作ることができます。

マウス移動をWeb APIにする

WIZnetのデバイス初期化、Webサーバー起動、マウス操作を組み合わせて、マウスカーソル移動をWeb APIにしてみます。

マウス操作のテストコードのうち、import timeとfor文以外をコピーして、退避したWebサーバーのコードをcode.pyにリネームし直し、コピーしたコードをcode.pyの最初の方にでも貼りつけておきます。

/にアクセスしたときは、マウスカーソルを操作するボタンを配置したHTMLを返すように変更します。また、マウスカーソルを上下左右に20px移動するAPIとして、/mouse/up・/mouse/down・/mouse/left・/mouse/rightを作成します。

Hello!を返すためのコードのかたまり(4行)を消して、以下のコードを追加します。

indexhtml = """<!DOCTYPE html><html><head><meta name="viewport" content="width=device-width,initial-scale=1"><meta charset="utf-8"><title>Web mouse cursor API</title><link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-9ndCyUaIbzAi2FUVXJi0CjmCapSmO7SnpJef0486qhLnuZ2cdeRhO02iuK6FUUVM" crossorigin="anonymous"><script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-geWF76RCwLtnZ8qwWowPQNguL3RmwHVBC9FhGdlKrxdiJJigb/j/68SIy3Te4Bkz" crossorigin="anonymous"></script><script>function s(p){fetch(p).then(function(r){return r.text()}).then(function(t){document.getElementById('r').innerText=t;});}</script></head><body><main class="px-3 col-6 mx-auto text-center"><h1 class="mt-2">Web mouse cursor API</h1><div class="container"><div class="row"><button class="btn btn-primary mt-3 mb-3" onclick="s('/mouse/up');">👆</button></div><div class="row d-flex justify-content-between"><button class="btn btn-primary col-5 mt-3 mb-3" onclick="s('/mouse/left');">👈</button><button class="btn btn-primary col-5 mt-3 mb-3" onclick="s('/mouse/right');">👉</button></div><div class="row"><button class="btn btn-primary col-12 mt-3 mb-3" onclick="s('/mouse/down');">👇</button></div></div><div id="r" class="m-3"></div></main></body></html>"""

@server.route("/")
def root(request: Request):
    print("GET /")
    return Response(request, indexhtml, content_type="text/html")

@server.route("/mouse/<direction>")
def move_mouse(request: Request, direction: str):
    print("GET /mouse/%s" % direction)
    if direction == "up":
        mouse.move(x=0, y=-20)
    elif direction == "down":
        mouse.move(x=0, y=20)
    elif direction == "left":
        mouse.move(x=-20, y=0)
    elif direction == "right":
        mouse.move(x=20, y=0)
    else:
        return Response(request, "invalid parameter")
    return Response(request, "moved mouse cursor to %s side" % direction)

マウスの操作APIについては@server.route("/mouse/<direction>")のようにパラメータを変数に取ることができるので、これを活用しました。あとはパラメータに応じてマウスカーソルを移動させて、メッセージを返します。

完成

Web画面を開くと、以下のような画面が表示され、ボタンをクリックするとマウスカーソルが移動します。

スマートフォンなど、デバイスを接続していない別の端末からアクセスして操作するとちょっと楽しいと思います(楽しさの感じ方は人によります!)。

なお、同じネットワーク内にいる他人にアドレスがバレると、いたずらされる可能性があるので、程々に遊んだら片付けるのが安全でしょう。ちなみに私はインターネットに公開してURLをSNSで共有し、10分くらいマウス操作を開放して遊びました。操作している人たちは私のPCのカーソルがどうなっているか見えてもいないのに、なぜかとても楽しそうだったので何よりです。

まとめ

WIZnetのEthernet拡張を使用してWebサーバーを立ち上げて、マウスカーソル移動をWeb API化する例を紹介しました。

Raspberry Pi Picoでネットワーク接続と言えば、現在ではPico Wがあるため、無線LANでいいという考え方もできます。ただ、無線LANが不安定な環境だったり、そもそも無線LANがない環境で使いたい場合などには、やはり有線LANがあると嬉しいですよね。

WIZnetのEthernetモジュールは、ライブラリが揃っていて扱いやすい印象です。今回したCircuitPython以外に、MicroPythonでも使用可能です。難点は、MACアドレスを持っていないので自分で定義が必要な点と、EVB-Picoボードでは通電LEDが目障りになりがちな点でしょうか……。通電LEDは、いざとなればテープや引っ付き虫などで隠してしまっても良さそうです。

今回作成したコードは、諸々整えた状態で以下に公開してあります。

https://github.com/Akkiesoft/akkiesoft-pico/tree/main/CircuitPython/web_mouse

実は、ほぼ同じノリでマクロキーボードAPIというものを以前作っているのですが、こちらで使用していたadafruit_wsgiモジュールでは通信速度が非常に遅く、今回adafruit_httpserverモジュールで書いてみたら高速で転送できるようになったので、マクロキーボードAPIもそのうち書き直したいですね。

Raspberry Pi 5公式ケースが届いたのでレビュー

あっきぃです。

Pimoroniで予約していたケース””だけ””が届きました。PiBowと公式ケースで、いずれもサンプルではなく、いずれRaspberry Pi 5の技適が通った時のために個人用に購入したものです。……私はPi 5を2台買うんだろうか🤔ちなみに、写真のPi 5はサンプルですが。今回は話題的に通電しない済むので技適等は無関係ですね。

PimoroniのPiBowはすでにMaker Faire Tokyo 2023・OSC2023 Tokyo/Fall・Raspberry JAM 2023.10で展示済みですが(が、どれもレポートを書いていないですね……)、公式ケースを自分で触って組み立てたりするのは今回が始めてなので、ゆるりとレポートをしていきます。ちなみにこちらがPiBowの組み立てた様子。公式のActive Coolerを組み合わせる前提の作りで、今回もPimoroniらしい出来栄えですが、組み立て手順が少し複雑になり、下からレイヤー0〜2、Pi 5、レイヤー3、ActiveCooler、レイヤー4の順に重ねるようなりました。

それでは公式ケースについて見ていきましょう。

一周見渡す

まずは外観。電源ポート周りの面はPi 4と比べると、3.5mmプラグを差す場所がなくなり、少しスッキリとしました。LAN・USBの配置はPi 1B+〜Pi 3B+までを彷彿させる配置ですが、他の面が全く違うので互換はありません。

先に互換の話をしておくと、これまでの公式ケースで過去のモデル間で互換性があったものは、実はありません。毎回変わっています。サードパーティの互換は諸説あるかも知れませんが、公式はそう言う感じです。iPhoneも毎回ビミョウに寸法が変わって互換がある回はあまりありませんよね。

ケースを真横から見ると、フタと本体の間に隙間が空いていることがわかります。中にはファンが標準添付されていて、このファンのエアフローとなるためです。

SDカード・LEDランプ側です。Pi 4のケースでは、SDカードを差し込んだまま本体を取り出そうとするとSDカード破損などの可能性がありましたが、Pi 5のケースではそれが改善されており、SDカードを差し込んだままの本体を出し入れ可能です。

また、電源ランプは電源ボタンも兼ねて降り、ここを押すことで電源の入り切りが可能です。便利ですね。

底面。公式ケースで初めて、HATの位置に合わせて穴が開けられました。この穴とボルト・ナットを組み合わせて活用すると、ケースを連結して使うこともできるようです。また、放熱用の穴も今回初の改善ですね。

中を見ていく

上の白いフタを外すと、真ん中の白いカバーと、それにはまる形で取り付けられた、ファン付きの半透明のプレートが現れます。

真ん中のカバーを外すと、赤いボトムに小さい紙袋が挟まるようにして入っています。これにはゴム足と、SoCに貼り付けるヒートシンクが入っています。

ヒートシンクは、Active Coolerと比較するとだいぶささやかなサイズ感ですね。ちなみに、もうお気づきかも知れませんが、ケースを使用するときはActive Coolerは不要です。

Active CoolerをつけたPI 5をケースに入れることも可能ですが、この場合は真ん中の白いカバーとから半透明の部分取り外せば運用可能です。

真ん中の白いカバーと半透明の部分は、ツメで固定されているだけのため、簡単に取り外し可能です。

半透明の部分を取り外すと、HATボードを取り付けたまま真ん中のカバーを取り付けることもできます。以前の公式ケースではHATをつけたままケースに収めることができたりできなかったりしたため、これも嬉しいアップデートの一つといえます。

半透明の部分にはGPIOの穴が開いているため、Booster Header( https://shop.pimoroni.com/products/booster-header )などを使用すれば、ファンとHATボードを同時に取り付けることも可能です。以下は、Booster Headerを1つ使用してHATボードを搭載した様子です。上のフタはできなくなりますが、半透明のパーツのおかげで開放感はなく、ケースとしてまとまっているように見えて良いですね。

本体を入れてみる

上の写真のいくつかではもう入ってしまっていますが、Pi 5本体をケースに入れてみます。と言っても、赤いボトムパーツにPi 5をポンと載せるだけ。簡単です。

ファンは、USB2.0ポートの後ろにファン用のコネクターがあるので、こちらに接続します。

あとはフタを乗せて完成です。簡単ですね。

Pi 5を入れた状態の外観はこちら。おしゃれです。

Pi 4のケースと比べてみると

Pi 5のケースを手に持ってみると「もしかして、大きくなった……?」という気持ちがしたので、Pi 4のケースと並べてみました。たしかに、一回り大きそうですね。

側面から。高さもPi 4のケースより少し高くなったようです。ただ、SDカードをつけたまま着脱可能、HATを載せたままフタ可能、ファンのエアフロー確保など、数々の機能性向上を考えると、少し大きくなってでも必要な設計なのではないかと推察します。

まとめ

Raspberry Pi 5 公式ケースのレビューでした。

今までの公式ケースはGPIOやカメラへのアクセスがイマイチで個人的にはずっとPimoroniのPiBowケースを推してきましたが、Pi 5のケースこそは(?)便利そうな印象を受けたので、両方を買ってみた次第です。

9月にイギリスに行った際には軽く触っていましたが、実際に改めて触ってみても、とても使い勝手が良さそうな印象なので、早く技適取得済みのPi 5をケースに入れて使いたいな……!!と思いましたし、Ltdの中の人がデモをしていたケースのスタックも興味があるので、公式ケースの買い増しももう検討が必要そうです。え、Pi 5を3台も……??

ちなみに、公式ケースはPi 4のときと同じく、グレー/ブラックのカラーもすでに登場していて、Pimoroniなどで予約を受け付けているようです。

オープンソースカンファレンス2023 Tokyo/Fallに出展します

10月21日(土)に開催される、オープンソースカンファレンス2023 Tokyo/Fallに、Japanese Raspberry Pi Users Groupが出展予定です。

基本的にはMaker Faire Tokyo 2023にて展示した内容とほぼ同等ですが、一部違う作例も持ち込み予定です。

また、Raspberry Pi 5本体も展示しますので、この機会にぜひご覧ください。

https://event.ospn.jp/osc2023-fall/

Raspberry Pi 5の電源回りを確かめてみる

あっきぃです。

Raspberry Pi 5が出たら多分騒ぎになるのかな……?と思っていた電源周りが、やはり騒ぎになっているようです。

最小要件が5V/3Aなのはまだ良いのですが、推奨要件(USBとか諸々電気を使う場合)の5V/5AのUSB-C PD電源という点がなかなかのクセモノになりそうです。

5V/5Aに対応したPD電源アダプターは世の中にほぼ存在せず(オフィシャル電源アダプターもカスタムPDOというもので実装しているようです)、USB PD3.1のEPRに沿えば5V/5Aの出力が可能になるように見えます(※)。PDについては私も詳しくなく、検索などで追って徐々に理解している段階です。

※参照元はこちら。ただ、他の記述を見つけられず、本当なのかどうか……?
https://www.graniteriverlabs.com/ja-jp/technical-blog/usb-power-delivery-specification-3-1

とは言え、5V/5Aが必須なわけではなく、あくまで推奨の話だと思いたいですよね。もちろん、USB SSDを接続したり、将来的にリリースされるM.2 HATを搭載したりすれば、5V/5Aが必要なのは想像できますが、一旦置いといて、ここでは最小要件の3Aでどこまで問題なく使用できるかを確認してみたいと思います。合わせて、消費電力や、発熱、サーマルスロットリングや電圧低下の起こり具合についても見ていきます。

構成

前回の性能検証の記事を書いた時点で作ればよかったのですが、ドタバタしていましたので、ここで改めて検証の構成を解説します。

日本では技適の取得が完了していないため、検証を行うには、シールドボックスに投入して電波を十分に減衰させるか、「技適未取得機器を用いた実験等の特例制度」を用いて180日間内で検証する方法があります(※)。ユーザー会では、以前よりスイッチサイエンスさんからお借りしているシールドボックスがありますので、シールドボックスに入れて検証を行っています。

※検証後は廃止手続き(電波の発射を防止するために必要な措置を講じる、つまり電源を入れないようにする。額縁に入れて飾るとかでしょうかね?)が必要です。また、技適取得前に入手したものについては技適マークが無いため、今後技適の取得が完了したとしても利用可能にはならない点にも注意が必要です。基本的には技適の取得が完了して国内リセーラーが発売するまで購入は待ちましょう。

シールドボックス内外の接続は以下の図の通りです。

Raspberry Pi 5をシールドボックスに入れてながら使用するための電源・USB・ネットワークなどの接続図

電源は、市販のUSB-AC電源(Anker 735)と、USB PDに対応したケーブルを使用しました。ボックス外は、ワットモニターに接続して消費電力が計測できるようにします。

ネットワークは、ボックス内でUSB3.0-LAN変換アダプターを使用して接続し、ボックス外に出るためのUSB端子に接続します。ただし、ボックスのUSB端子はUSB2.0のため、性能は480Mbps内に制限されます。ボックス外で、Raspberry Pi 4で作ったネットワークブリッジにUSB接続し、LANに接続可能としています。iperf3での実測は200Mbps程度でしたが、ログインしたりテストに必要なパッケージを取得する程度ならなど十分でしょう。もしGbEのテストをするときは、ボックス内にPi4などを追加で投入してテストすれば対応可能です。

ボックスのもう一つのUSB端子には、Rspberry Pi Debug Probeを接続しています。これを用いることで、OS起動前の情報が取得できますし、OS起動後もシリアル通信でログインして操作することが可能です。

まずは小さいヒートシンクだけでSDカード起動してみる

いままでのRaspberry Piなら許された、適当な小さいヒートシンクと、MicroSDカード(Samsung EVO Plus 64GB)の組み合わせで起動してみます。シールドボックスの様子はこちら(Debug Probeが光っていますが、これは端末からの給電のためで、Raspberry Pi 5にはまだ通電していません)。

シールドボックに、MicroSDカードを挿入したRaspberry Pi 5、USB-LANアダプター、Raspberry Pi Debug Probe、USB-AC電源を入れ、接続を済ませた様子。

シリアル接続しながら通電を開始すると、以下のようなメッセージが表示されます。

RPi: BOOTSYS release VERSION:3094eda5 DATE: 2023/09/21 TIME: 17:58:43
BOOTMODE: 0x06 partition 0 build-ts BUILD_TIMESTAMP=1695315523 serial ******** boardrev d04170 stc *******
AON_RESET: 00000003 PM_RSTS 00001000
RP1_BOOT chip ID: 0x20001927
PM_RSTS: 0x00001000
part 00000000 reset_info 00000000
PMIC reset-event 00000000 rtc 00000004 alarm 00000000 enabled 0
uSD voltage 3.3V
Initialising SDRAM 'Micron' 32Gb x2 total-size: 64 Gbit 4267
DDR 4267 1 0 64 152
RP1_BOOT chip ID: 0x20001927

RP1_BOOT chip ID: 0x20001927
RP1_BOOT: fw size 25968
PCI2 init
PCI2 reset
PCIe scan 00001de4:00000001
RP1_CHIP_INFO 20001927

RPi: BOOTLOADER release VERSION:3094eda5 DATE: 2023/09/21 TIME: 17:58:43
BOOTMODE: 0x06 partition 0 build-ts BUILD_TIMESTAMP=1695315523 serial ******** boardrev d04170 stc *******
AON_RESET: 00000003 PM_RSTS 00001000
 status
USB_PD CONFIG 0 41
Boot mode: SD (01) order f4
SD HOST: 200000000 CTL0: 0x00800f02 BUS: 400000 Hz actual: 390625 HZ div: 512 (256) status: 0x1fff0000 delay: 276
SD HOST: 200000000 CTL0: 0x00800f02 BUS: 400000 Hz actual: 390625 HZ div: 512 (256) status: 0x1fff0000 delay: 276
OCR c0ff8000 [313]
CID: 001b534d454331533530d5186366a166
CSD: 400e00325b590001dd7f7f800a400000
SD: bus-width: 4 spec: 2 SCR: 0xeeeeeefe 0xeeeeefef
SD CMD: 0x333a0010 (51) 0x59b40000 0x1fff0206
Failed to open device: 'sdcard' (cmd 333a0010 status 1fff0206)
Retry SD 1
SD HOST: 200000000 CTL0: 0x00800000 BUS: 400000 Hz actual: 390625 HZ div: 512 (256) status: 0x1fff0000 delay: 276
SD HOST: 200000000 CTL0: 0x00800f00 BUS: 400000 Hz actual: 390625 HZ div: 512 (256) status: 0x1fff0000 delay: 276
OCR c0ff8000 [2]
CID: 001b534d454331533530d5186366a166
CSD: 400e00325b590001dd7f7f800a400000
SD: bus-width: 4 spec: 2 SCR: 0x02058083 0x00000000
SD HOST: 200000000 CTL0: 0x00800f04 BUS: 50000000 Hz actual: 50000000 HZ div: 4 (2) status: 0x1fff0000 delay: 2
MBR: 0x00002000, 1048576 type: 0x0c
MBR: 0x00102000,124116992 type: 0x83
MBR: 0x00000000,       0 type: 0x00
MBR: 0x00000000,       0 type: 0x00
Trying partition: 0
type: 32 lba: 8192 'mkfs.fat' ' bootfs     ' clusters 261116 (4)
rsc 32 fat-sectors 2040 root dir cluster 2 sectors 0 entries 0
FAT32 clusters 261116
[sdcard] autoboot.txt not found
Trying partition: 0
type: 32 lba: 8192 'mkfs.fat' ' bootfs     ' clusters 261116 (4)
rsc 32 fat-sectors 2040 root dir cluster 2 sectors 0 entries 0
FAT32 clusters 261116
Read config.txt bytes     1229 hnd 0xfef7
[sdcard] pieeprom.upd not found
usb_max_current_enable default 0 max-current 3000
Read bcm2712-rpi-5-b.dtb bytes    71797 hnd 0xcb56
dt-match: compatible: raspberrypi,5-model-b match: brcm,bcm2712
dt-match: compatible: brcm,bcm2712 match: brcm,bcm2712
PM_RSTS 00001000
Selecting USB low current limit

Raspberry Pi 5内の各デバイスの初期化に関するメッセージや、ブートデバイスを探して起動しようとするメッセージが見られます。そして最後の「Selecting USB low current limit」が、5V/5A電源を検出できず、USBポートの供給は600mAまでとして起動しますよ、というメッセージですね。

起動中にワットモニターが表示した消費電力は、3〜6Wの範囲でした。

このあとのシリアルの出力はOSに変わり、少しするとOSのログインプロンプトが出力されます。

NOTICE:  BL31: v2.6(release):v2.6-239-g2a9ede0bd
NOTICE:  BL31: Built : 14:26:57, Jun 22 2023
[    0.902716] spi-bcm2835 107d004000.spi: no tx-dma configuration found - not using dma mode

Debian GNU/Linux 12 pios5 ttyAMA10

pios5 login: 

起動が完了したあとの消費電力は3.3W〜3.5Wくらいで安定しました。つまり0.66Aくらいですね。また、しばし放置してから vcgencmd measure_temp コマンドでCPU温度を取得すると56度ほどでした。空気がこもるシールドボックス内での測定のため、通常の室内などではもう少し低く推移する可能性が考えられます。

yes >/dev/null & を4つ投入して、CPUを全部100%にしてみます。消費電力を観察しつつCPU温度も確認したところ、10Wまで消費電力が上昇しますが、CPU温度が85度に達したところで、消費電力が7.5〜8Wくらいまで下がりました。サーマルスロットリングが働いたことがわかります。また、電圧低下も時々発生していました。アイドル時の56度からyesコマンドを実行してサーマルスロットリングが働くまでの時間は、40秒ほどでした。

Alasdair Allan氏(Raspberry Pi Ltdの方)が公開している、スロットルを確認するスクリプトでも、電圧低下・スロットル・周波数のキャッピングが発生したことが確認できました。

https://gist.github.com/aallan/0b03f5dcc65756dde6045c6e96c26459

$ ./throttled.sh 
Status: 0xf0008
Undervolted:
   Now: NO
   Run: YES
Throttled:
   Now: NO
   Run: YES
Frequency Capped:
   Now: NO
   Run: YES

ヒートシンクのみ、SDカードブートの環境では、アイドル時の消費電力3.3W・CPU温度56度、負荷をかけると消費電力10W・CPU温度は最大85度(以降はサーマルスロットリングで温度維持を優先した周波数以下などが発生)となりました。

小さいヒートシンクにファンを加えてSDカード起動

本来はオフィシャルのケースもしくはActive Coolerがあればよかったのですが、あいにくこちらのサンプルは無いため、先述の小さいヒートシンクで対応しています。ここにPimoroniのFan Shimを追加して、ヒートシンクを空冷しながら動かすとどうなるか確かめます。

Pimoroni Fan Shimを接続したRapberry Pi

まずはアイドル状態。ファンの動作が増えるため、消費電力は3.8W前後に変化します。一方、CPU温度は40度前後で安定しました。

続けてyesコマンドで負荷をかけます。1分ほどかけて65度近くまで上昇しますが、その後は上昇が緩やかになります。2分程で電圧低下とスロットルが検知されますが時々瞬間的に起こるだけのようで、周波数のキャップは発生せずに温度上昇を緩やかに続け、最終的に70度で一旦安定しました。消費電力は10W前後を維持していたため、スロットリングによる性能低下は防げていそうです。おそらく、これ以降は続けてもシールドボックス内の温度上昇次第になりそうなので負荷かけは停止しました。

ヒートシンク+ファンと、SDカードブートの環境では、アイドル時の消費電力3.8W・CPU温度40度、負荷をかけると消費電力10W・CPU温度は70度前後となりました。

ヒートシンク+ファンでUSB SSDブート

USB SSDブートにするとどうなるか確かめます。NVMe SSDをUSBに変換するケースに入れたものをUSB3.0ポートに接続して起動します。M.2 HATが発売されたら、USB3.0ではなく直接PCI Expressで接続できるようになりますね。USBとPCIeでの速度の違いを確かめたりするのが楽しみです。

MicroSDの代わりにNVMe SSDをUSB変換したデバイスから起動しようとするRaspberry Pi 5

通電すると、シリアル通信で以下のメッセージが表示されました。

***
USB boot requires high current (5 volt 5 amp) power supply.
To disable this check set usb_max_current_enable=1 in config.txt
or press the power button to temporarily enable usb_max_current_enable
and continue booting.
See https://rptl.io/rpi5-power-supply-info for more information
***

USBブートの場合、3Aのモードでの起動はサポートされないため、以下のいずれかの対応が必要になります。

  • 5V/5Aの電源を接続する(Raspberry Pi 公式の推奨)
  • usb_max_current_enable=1 を /boot/config.txt に投入して無視する
  • 電源ボタンを1回押して、今回だけ無視する

シールドボックスを開けてボタンを押すのはよろしく無いので、一旦電源を切り、config.txtに設定を投入しました。再度起動すると、起動時のメッセージに、以下のようにメッセージが表示され、無理やりUSB SSDブートが開始します。ただ、やはり無理矢理なので、起動時にさっそく電圧低下が表示されてしまいました。

usb_max_current_enable forced to 1
(中略)
[    6.112188] hwmon hwmon2: Undervoltage detected!

Debian GNU/Linux 12 pios5 ttyAMA10

pios5 login: 

起動が終わってアイドル状態の消費電力は5.3Wほどでした。ここでやっと1Aを超えましたね。CPU温度はファン付きのため38.9度前後でした(設定変更などでボックスを開け閉めしたため下がった様子)。

yesコマンドで負荷をかけます。すると、消費電力は先程より低く9W前後、温度上昇もやや緩やかでした。先程のスクリプトを実行すると、電圧低下とスロットルがオンになりっぱなしになっていました。周波数キャップにはなっていないものの、さすがに電圧不足が出たままになってしまうようです。

./throttled.sh 
Status: 0x50005
Undervolted:
   Now: YES
   Run: YES
Throttled:
   Now: YES
   Run: YES
Frequency Capped:
   Now: NO
   Run: NO

yesコマンドを停止すると、電圧低下もスロットルもすぐにオフに変化しました。

5Aを供給していない環境で、警告を無視してUSBブートした環境では、負荷が高い処理をかけると電圧低下になりやすいことがわかりました。

動作自体が極端に不安定になるわけではないですが、aptでパッケージを入れる程度でも電圧低下が発生するため、USB SSDブートをしたい場合は公式の電源(5V/5A電源)が必須と言えそうです。

まとめ

MicroSDカードから起動する場合は、5V/3A出力の電源アダプターでもおおむね問題なく動作しました。

USB SSDから起動する場合は、3Aで無理やり起動すること自体は可能ですが、電圧低下が発生しやすいため、公式の推奨通り公式の電源アダプターが必要そうです。

消費電力は、アイドル時であれば3.3Wなど、それほど気になる消費電力ではありませんでした。また、負荷をかけてもSDカード環境であれば10W(2A)程度などで済むようでした。

また、温度に関しては、ヒートシンクのみであればおそらく60度以下で動作します。むき出しの状態かつ常に手に握りしめながら使うなどしなければおそらく問題はありません。ただ、負荷が大きくかかり続ける環境等では厳しくなる可能性があるため、安定動作させるにはファンがあると安心でしょう。

もちろん、カメラなどのデバイス、GPIOやDSI接続などのディスプレイや、センサーなどのモジュールなどを搭載した場合、また、ソフトウェアでシステムにかかる負荷などによっては、5V3Aでは電圧が不足するなどの可能性が考えられます。これらを考慮すると公式の電源アダプターが必要になる場合も考えられそうです。USBに関しては、セルフパワータイプのハブを使ったらどうなるかなどは検証してみても良いかもしれませんね。

あともうひとつ、Raspberry Pi 4と同様にブートローダーEEPROMイメージをアップデートできる仕組みがあるため、今後の改良次第では電源周りにも挙動の改善が見られる可能性はあるかもしれません。

https://github.com/raspberrypi/rpi-eeprom

公式の電源アダプターと言われても……PSEマークの取得は?

電源アダプターにも技適のように、PSEマークという認証マークが存在します。このマークが無ければ国内での販売はできません。

これまで歴代のRaspberry Piにも公式の電源アダプターが存在しましたが、残念ながらPSEマークを取得したものは存在しません。代わりに、リセーラー各社が独自の電源アダプターを用意、販売してきました。今回こそは公式のものが発売されないとまずそうに見えますが、果たして発売されるでしょうか……?個人的には、ある意味で技適の件よりもどきどきハラハラしながら見守る次第です。