鳥なき里のマイコン屋(122) Raspberry Pi 4到着、ラズパイPicoの母艦化

Joseph Halfmoon

ようやくと言うべきか、GW前にRaspberry Pi 4 を手に入れました。先に入手のRaspberry Pi Picoの母艦にする、というのが主目的であります。情報もそろい、ツールなども完備のラズパイなので、OSのインストールからクロス開発環境のセットアップなど「スムース」ではあるのですが、例によって引っかかるところもあり。

過去何度となく繰り返してきたラズパイのセットアップ作業ですが、たまにやる度に「便利になっているな~」と感じます。Raspberry Pi model A(まだ2, 3, 4 などという数字のないころのモデル)の頃からすると各段に進歩していると思います。しかし、引っ掛かるところには引っかかります。尿路結石か?今回引っかかったところを先に列挙しますと

  • VNCで接続できたのが、NFSの設定作業したら(?)できなくなってしまった
  • Raspberry Pi Picoの環境構築中、LwIPレポジトリのダウンロードでFAIL、そこでインストールスクリプトが止まってしまった

であります。まあ、なんだかんだと言いながら問題を回避。なんとかラズパイ4上でクロス・コンパイルしたオブジェクトをラズパイPicoへ転送、動作確認までできました。まあ結果オーライ。

まずはRaspberry Pi OSのインストールと設定から

昔、Noobsを使ってRaspbian OSをインストールできるようになったときに、各段に便利になったな、と思った記憶があります。Noobsの前の時代がどんだけ面倒だったかは忘れました。しかし、「Raspbean OS」改め「Raspberry Pi OS」になった昨今、Noobsよりもさらに便利になりました。

Raspberry Pi OS

上のページからダウンロードできる Raspberry Pi Imager なるツールを使えば一撃でRaspberry Pi OS(あるいは他のOS)をインストールしたSDカードが作れてしまいます。勿論「伝統の」マルチOS対応ですが、ラズパイPicoの親機にするのが主目的、かつ、お手頃価格の2GBモデルなので、Raspberry Pi OS 32bit版の一択であります。64bit版も選択可能ですが、以前も申し上げているとおり「人生を複雑にしたくない」stable主義者であります。2GBの主記憶ならば32bit版で十分でしょう。

ま、Imagerのお陰で大した時間もかからず、Desktopを含むRaspberry Pi OSのSDカードが出来上がりました。ラズパイPicoのクロス開発は、コマンドラインでも可能ですが、最近公式サポートになったラズパイ上で直接動く VS Code(以前はラズパイにSSHでリモート接続するVS Codeを使っていました)を使って行きたいです。よってDesktop環境あり必須。なおmicroSDHCカードは、手元にあったものの中では一番まともそうな、32GB UHS-I(SanDisk)を使用いたしました。

ラズパイの場合、どの機種も最終的にはモニタやマウス、キーボード無のヘッドレスの運用としています。しかし簡単のため、インストール時にはモニタ、マウス、キーボードを全て接続して作業しております。また、WiFiは使わず有線LAN。このような環境であれば、ケーブル接続してブートして選択画面をクリクリしていくだけでOSの初期設定はOKっと。このごろは、ラズパイ公式に以下の日本語のセットアップページまで準備されているので難しいことはなにもありません。

Raspberry Pi をセットアップする

ローカル環境の設定

標準的な設定が済んだならば、ようやく固有の事情に合わせた各種設定です。いろいろあるのですが、当方では以下が最低限の要求事項です。

  1. SSHとVNCでリモート接続できること
  2. 「サーバー」として稼働しているラズパイ3のHDD上の共有フォルダをマウントすること

DHCPでIPアドレスが動くと後々メンドイので細工をした後で、CUI上でグラフィカルぽく設定ができる伝統の設定ツール

raspi-config

を起動しました。勿論 sudo つけて。昔から使われているツールなのですが、バージョンによってメニューの表示が微妙に変わることが多いツールでもあります。最低必要なのは、

  1. 「インタフェース」の画面でSSHとVNCをイネーブルにしておくこと
  2. 「ブート」の画面で、Desktopが起動されるように設定しておくこと

です。2を忘れると、ヘッドレスにした後でVNC接続するとGUI画面が立ち上がっていないので、接続不可になります。ここまで設定した後、モニタ、キーボード、マウスを取り除いて再起動。

PCからラズパイ4へのVNC接続、OKです。

こんどは、ラズパイ3のHDDのマウントです。ラズパイ3ではNFSが走っています(HDDを接続したためにラズパイ3の「腰が重く」なり、奥まったところから配線を引き出せなくなりました。このため、結局、「身軽な開発機」として新規にラズパイ4を導入するにいたったのであります。)ラズパイ3側と4側の両方で/etc配下のファイルをちょいと編集し、再起動をかけました。ようやくお楽しみのトラブルがやってまいりました。

VNC接続できません。

なにもVNC関係の設定などいじっていないのです。突如接続できなくなりました。SSHでログインするとNFSでラズパイ3のHDDのディスクのマウントはできました(正確にいうと、syncと書くべきところ sincと書いていて、エラーになってました。syslog のエラーみて修正後OK。)

どうもVNCで接続を受付かけている感じなのですが、接続すべきGUIそのものが動いてない様子です。raspi-config の先ほどの設定を何度か再設定したのですが駄目です。しかし、VNCのイネーブル+ブートでのDesktop起動、に加え、

Displayの解像度を具体的に設定

したらば、あっけなく接続できるようになりました。モニタ付きのときに接続したディスプレイの諸元で、モニタを外した後も「しばらく」VNCは動作していたみたいなのですが、NFS接続作業のどこかで「その解像度設定にかかわる情報」が失われてしまったように推測しています。明示的に解像度を指定してやればヘッドレスでもDesktopが正常に立ち上がり、VNC接続できた、ようです。ようやくOSの最低線設定ができました。

Raspberry Pi PicoのC/C++クロス開発環境のセットアップ

さて本題のPicoのC/C++開発環境セットアップです。別シリーズでMicroPython使ってPicoを動かしています。MicroPythonであればインタプリタをダウンロードして転送するという数分の作業でPicoを動かすことができます。これに対してC/C++のクロス開発環境のセットアップには時間がかかります。ダウンロードしなければならないツールチェーンやら、リポジトリやら結構多いです。そしてそれらのコンパイルやらといろいろ大変。ま、ラズパイ4は結構速いのでありがたいです。その面倒な作業ですが、以下のドキュメントを読めば、1発でそれらを処理できるのでした。

Getting started with Raspberry Pi Pico

ぶっちゃけ、pico_setup.sh なるシェルスクリプトが用意されているので、上記のドキュメントに書いてあるスクリプトのURLからwgetして実行すれば、それら全てをやってくれるのであります。

しかし問題勃発、途中でシェルスクリプトが落ちてしまいました。

なにが原因かと見ると、extras の中のLwIP(Light weight IP)というレポジトリのダウンロードに失敗していました。何度か時間を変えてトライしてみたのですが(時々、レポジトリをホストしているマシンのトラブルなどあるようなので)、今のところ上手く行っていません。なお、再トライするときに変にディレクトリが残っているとスキップされたりします。また、.bashrcに 同じexport行が重複して書きこまれます。綺麗にしてから再トライする方が確実じゃないかと思います。結局、シェルスクリプトを書き換えて

extras 全部スキップ

で先に進めてしまいました。多分、必須のライブラリでは無いのでとりあえず無くてもなんとかなろう、と。それより、最後まで通す方がよろしかろ、という判断です。

extrasをパスしたら、最後まで通りました。

見れば、examplesのbuildディレクトリの配下に、Pico用のBlinkのオブジェクトも出来上がっています。早速、ラズパイPicoをラズパイ4に接続し、オブジェクトを転送してみました。ちゃんとLチカしました。

Lチカ後、電源切ったあとの写真(電源OFFしてから写真ないのに気付いた)

Raspberry Pi 4 and Raspberry Pi Picoま、これで一応、ラズパイ4がラズパイPicoの母艦になったな。まだまだだが。

鳥なき里のマイコン屋(121) nRF52833搭載 BBC micro:bit V2到着 へ戻る

鳥なき里のマイコン屋(123) M5StackとArduino Uno、CANバス接続 へ進む