C/C++でもPicoってみる!(RapberryPi Pico・C/C++ でLチカ)
RaspberryPi picoをRaspberryPi400につないでCのプログラムを実行してみようというやつです。
↑の続き的なやつ。ちょっと難易度高い版?
前回、MicroPythonでちょー楽べんり!ってやってみたわけですが、もちろん C/C++ でもできるようなので、環境構築がてらやってみました。
公式PDF
https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf
↑元ネタ、というか公式の情報PDF、英文ですが、こちらに従ってやればおkです。
SDKのインストールナド
真面目にやる人は公式PDFの Chapter 2. The SDK の手順を進める感じになると思いますが、不真面目で面倒くさがりの私のような人は、 Chapter 1. Quick Pico Setup のままでよいようです。(こっちがおすすめ!)
ようはインストールスクリプトをwgetで持ってきて、実行するだけでセットアップOK、かんたんですw
そのスクリプトは、母艦のRaspberryPiのterminalから、
$ wget https://raw.githubusercontent.com/raspberrypi/pico-setup/master/pico_setup.sh
で持ってこれます。
※wgetが動かないばあいは、sudo apt install wget すること!
すると、pico_setup.sh というファイルができているはずなので、
$ chmod +x pico_setup.sh
をして実行権限を与えて、
$ ./pico_setup.sh
で実行します。
こんなかんじ。この後もだあああーーーって沢山ダウンロードして、展開してくれます。
どんどんすすみます。見てると結構たのしいですw(時間かかります)
やたら時間かかりますw
中で何をやっているかというと
Create a directory called pico
• Install required dependencies
• Download the pico-sdk, pico-examples, pico-extras, and pico-playground repositories
• Define PICO_SDK_PATH, PICO_EXAMPLES_PATH, PICO_EXTRAS_PATH, and PICO_PLAYGROUND_PATH in your ~/.bashrc
• Build the blink and hello_world examples in pico-examples/build/blink and pico-examples/build/hello_world
• Download and build picotool (see Appendix B), and copy it to /usr/local/bin.
• Download and build picoprobe (see Appendix A).
• Download and compile OpenOCD (for debug support)
• Download and install Visual Studio Code
• Install the required Visual Studio Code extensions (see Chapter 6 for more details)
• Configure the Raspberry Pi UART for use with Raspberry Pi Pico
だそう。英文ですがまあなんとなくわかりますね。
時間かかると思ったらサンプルコードのコンパイル&ビルドもやってくれてるし、VS Codeのインストールまでやってくれちゃっているようです。
手厚い!w
さて、無事終了したら、
コマンドラインでLチカmakeしてみる
(いきなりVS Codeでやってみたい人はここ飛ばしてもOK)
Chapter 3. を参照。
先ほどのインストールスクリプトで自動的に突っ込んだ場合は不要ですが、Chapter 2. The SDK を真面目にやった方は、下記の操作が必要です。
ソースコードはこちら https://github.com/raspberrypi/pico-examples/blob/master/blink/blink.c
pico-sdk と pico-examples リポジトリが同列の同じディレクトリに並べてクローンされている状態で、
$ cd pico-examples
$ mkdir build
$ cd build
として buildに入ります。
$ export PICO_SDK_PATH=../../pico-sdk
としてSDKのパスを設定し、いざ
$ cmake ..
Using PICO_SDK_PATH from environment ('../../pico-sdk')
PICO_SDK_PATH is /home/pi/pico/pico-sdk
.
.
.
-- Build files have been written to: /home/pi/pico/pico-examples/build
というかんじで make & build できます。
Lチカだけなら
$ cd blink
$ make -j4
Scanning dependencies of target ELF2UF2Build
Scanning dependencies of target boot_stage2_original
[ 0%] Creating directories for 'ELF2UF2Build'
.
.
.
[100%] Linking CXX executable blink.elf
[100%] Built target blink
でOKね♪
build / blink にできている blink.uf2 ファイルをPicoに転送すれば動く、はず、です(今回は下のVS Codeでやってみてからやっちみます)
VS Codeでやってみる!
さて本題!
Chapter 1. Quick Pico Setup でまるっと環境を作成すると、もれなくVS Codeもついてきます!
これこれ!
さっそく立ち上げてみましょう。
見慣れた画面!
これがRaspberryPiでうごいちゃうんですねえ。
さて、最初は一緒に入っている pico-examples フォルダを File -> Open Folder でフォルダごとオープンしちゃいましょう
すると、右下のほうでプロジェクトを構成したり、cmake をしてくれたり
なにやらどんどんやってくれますが、基本、許可してあげれば大丈夫っぽいですw (キャプチャし忘れてるうちにどんどん進んで、気が付いたらVS Codeも日本語化されてました!? これ、自動的にできちゃうんですかね?w)
さて、ソース
Lチカのソースは、 pico-examples / blink に入っています。
↑では、試しに15行目と17行目のsleepの数字を 250 -> 50 に書き換えたところです。 (ファイルを変更しないとコンパイラが(もうやってんじゃん)っていって処理してくれないのでw)
キットの設定
ウィンドウ下部の↑の所をクリックして、
GCC for arm-none-eabi というやつをセットします。
下部が
こう変わればOK
次に、その隣の「ビルド」と書かれているところをクリックすると、ビルドが始まっちゃうのですが、ターゲット(その右側にあるやつ)が、[all]になっていると、exampleをぜんぶまるっとビルドしてしまうので、
[all]をクリックしてターゲットを
blink に指定しなおします。
↑の表示になればOK、安心して ビルド をクリックします。
できた!(∩´∀`)∩☆
Picoに転送
ビルドが終わったファイルは、プロジェクトのある blinkと同列の build フォルダに入っています。
build以下にいろいろはいっちゃってるのは、他のサンプルもビルドされた結果です。
※最初の環境インストールスクリプトで全部クリーンビルドされているので、やたら沢山はいっちゃっています。今回は blink だけをビルドさせたかったので、ソースをすこし(waitの数字)を書き換える形でコンパイル&ビルドを blink だけやらせてみたかんじです
この状態で、例のコレ
をやって、
生えてきた RPI-RP2 (ストレージデバイス)へ blink.uf2 ファイルを転送すると……
光りました!(∩´∀`)∩
すごい勢い(100ms)で点滅してます!
まとめ
以上のような感じで、RaspberryPi Picoのプログラムを C/C++ で作成して、コンパイル&ビルドして転送するまでの手順がわかったかんじです。
最初に書いたように、
公式PDF:https://datasheets.raspberrypi.org/pico/getting-started-with-pico.pdf
に従って進めていけば、意外に簡単にここまで進められると思います。
流石にMicroPythonのほうが初心者向けで簡単ですが、C/C++のほうが大規模なプロジェクトとかも組みやすそうなので期待ですね。
あと、PDFを読みすすめてみると、二台のRapberryPi Picoを使って VS Code上で実機のデバッガもつくれちゃうみたい! 二台体制でやるって、なんだかそれだけでわくわくしてきますが(謎)それも今度挑戦してみたいとおもいます♪
※↑で2台のRaspberryPi Picoを使用してのデバッグ、というのは私の勘違いで、PCやMacから行うときにそういう技がある、ということのようです。RapberryPiを母艦として使うときは、わざわざ2台のPicoをつなげなくてもデバッグできる模様。詳しくは別noteで~。