電子ブロック工房 / Raspberry Pi Pico https://www.rad51.net/blog/mycom/ IC・トランジスタで出来たコンピューターを設計・製作するためのブログ / Raspberry Pi Picoを使った作例 ja Jeans CMS © Weblog http://backend.userland.com/rss https://www.rad51.net/jeans/skins/jeans/images/jeans2.gif 電子ブロック工房 https://www.rad51.net/blog/mycom/ Raspberry Pi Pico用のC/C++ビルド環境を構築する https://www.rad51.net/blog/mycom/?itemid=988 MachiKania のソースコードからビルドする方法について述べるが、他の Raspberry Pi Pico 用のプログラムでも同じであり、また、Pico 2, Pico W, Pico 2 W にも対応できる。

Raspberry Pi Pico 用のソースコードからビルドするには、VS code の extension を用いる方法があるが、私自身がその extension の中身をよく理解しておらず、どういう操作を行っているか分からないので、使っていない。この記事でも、VS code は使わず、必要なソフトウェアーを個々に揃えて利用する方法をとる。

success.png
(画像は、ビルドに成功した時のスクリーンショット)


必要なツール

Raspberry Pi Pico 用の C/C++ プログラムをビルドするのに必要なツールは以下の通り。

1.Git
2.pico-sdk
3.CMake
4.MinGW
5.ARM CC (ARM C コンパイラー)
6.Python

Git は、バージョン管理システムと呼ばれるもので、多くのソフトウェアーが Git で管理されている。次に述べる pico-sdk が Git で管理されているため、これが必要になる。また、目的の C プログラムをビルドするときにも、Gitが必要になる場合がある。

pico-sdk は、Raspberry Pi Pico 向けの C/C++ 開発用ソフトウェア開発キットだ。必要なライブラリーを含んでおり、ビルドの方法も提供する。

CMake は、ソフトウェアプロジェクトの構築を管理するためのクロスプラットフォームツールだ。プロジェクトの構造や依存関係を記述するスクリプトを基にプラットフォームに応じたビルドシステム生成するためのものだ。

MinGW(Minimalist GNU for Windows)は、Windows 向けの軽量な開発環境で、GNU コンパイラコレクション(GCC)を使用して C、C++ などのプログラムをコンパイルするためのツールである。

ARM CC (ARM C Compiler)は、Raspberry Pi Pico で採用されている CPU、ARM cortex M0+ もしくは ARM cortex M33 用に、C/C++ ソースコードをコンパイルするためのコンパイラーだ。

Python は汎用性の高いプログラミング言語で、シンプルな構文と豊富なライブラリが特徴である。pico-sdk によるビルドの際にもこれが使われる。

では、順番に見ていく。ここでは、これらのツールのうち Windows のインストーラーを用いてインストールするのは Git のみで、他のものは ZIP アーカイブをダウンロードして、解凍してできたファイル群を特定のフォルダーに配置する形をとる。

環境によっては、Git や Python などがすでにインストール済みであったりするケースもあるだろうが、その場合はそれぞれの項をスキップしていただきたい。また、それぞれのツールのインストール先、配置先が異なる場合は、後に説明するパス指定を、適宜修正する必要がある。

Git

Windows 用の Git は、次の場所から入手できる。
https://git-scm.com/downloads/win
64-bit Windows 用には「Click here to download」もしくは「64-bit Git for Windows Setup」をクリックすれば、インストーラーがダウンロードされる。2025/03/15 現在、「Git-2.48.1-64-bit.exe」である。

インストーラーをダウンロードしたら、ダウンロードファイルをダブルクリックしてGitをインストールする。基本的にデフォルトの設定のまま「Next」ボタンを押し続けてインストールすればよい。
Git.png

pico-sdk

Git をインストールすると、スタートメニューの検索欄に「git bash」と打つことで、次のようなアプリケーションが出るようになっているはずだ。これをクリックして、起動する。
gitClone.png
このコンソール上で、順に「cd Desktop/」 「git clone --recurse-submodules https://github.com/raspberrypi/pico-sdk.git」とタイプする。デスクトップ上に「pico-sdk」が現れる。すべてのファイルを取得するのに、数分かかる。エラー無く作業が済めば、「pico-sdk/libs」内にある5つのフォルダー(btstack, syw43-driver, lwip, mbedtls, tinyusb)のすべてが、空ではなくファイル・フォルダーが含まれている状態になっているはずなので、確認する。もし空のフォルダーがあれば、「git clone」に失敗しているので、一度「pico-sdk」フォルダー全体を削除してやり直す。

ここでは、「pico-sdk」フォルダーを「c:\pico」に移動して使用することとする。「c:\」に「pico」という名で新規にフォルダーを作成し、デスクトップ上の「pico-sdk」をそこに移す。

「c:\pico\pico-sdk」フォルダーの中身は、次のようになる。
picoSdkFolder.png

CMake

Windows 用の CMake は、次の場所で手に入る。
https://cmake.org/download/
「Latest Release」のZIPアーカイブのものを選べばよい。ここでは、Windows x64 ZIP(cmake-3.31.6-windows-x86_64.zip)を選んだ。

ZIPアーカイブに含まれているフォルダーを展開し、フォルダー名を「cmake」に変更して、「c:\pico」に移す。「c:\pico\cmake」フォルダーの中身は、次のようになっている。
cmakeFolder.png

MinGW

MinGW (MinGW-w64)は、次の場所で手に入る。
https://winlibs.com/
Web ページの上から4分の1ぐらいのところに、「Help! I don't know which download to choose!(助けて!どのダウンロードファイルを選択したらよいかわからない!)」 「Don't worry. For most purposes the latest Windows 64-bit release version with MSVCRT runtime and POSIX threads is a good choice.(心配しないで。ほとんどの目的には、MSVCRTとPOSIX対応の64ビットバージョンを選ぶのがよい選択だよ!)」という記述の後に「Download it here.(ここで、それをダウンロード)」というリンクがあるので、それを選ぶ。ここでは、「winlibs-x86_64-posix-seh-gcc-14.2.0-mingw-w64msvcrt-12.0.0-r3.zip」をダウンロードした。

ダウンロードした ZIP アーカイブには「mingw64」というフォルダーがあるので、それを解凍して「c:\pico」に展開する。「c:\pico\mingw64」フォルダーの中身は、次のようになる。
migw64Folder.png

ARM CC

ARM C コンパイラーは、次の場所で手に入る。
https://developer.arm.com/downloads/-/gnu-rm/product-release
Windows 用の ZIP アーカイブを選択する。2025/03/15現在、最新版は「Version 10-2020-q4-major」なので、ここでは「gcc-arm-none-eabi-10-2020-q4-major-win32.zip」を選んだ。

ZIP アーカイブのフォルダーを解凍し、フォルダー名を「gcc-arm」に変更して、「c:\pico」フォルダーに移す。「c:\pico\gcc-arm」フォルダーの中身は、次のようになる。
gccFolder.png

Python

Python は、次の場所で手に入る。
https://www.python.org/downloads/windows/
「Windows installer」ではなく、「Windows embeddable package」を選ぶ。ここでは、「python-3.13.2-embed-amd64.zip」を選択した。

「c:\pico」フォルダーに「python」という名のフォルダーを作成し、そこにZIPアーカイブのすべてのファイルを展開する。「c:\pico\python」フォルダーの中身は、次のようになる。
pythonFolder.png

ソースコードを入手して配置

必要なツールのインストールが終了したので、いよいよビルドの準備を行う。まず、ソースコードを入手して、配置する。次の場所から、開発中の MachiKania を入手する。
https://github.com/machikania/phyllosoma/tree/production
「Code:」ボタンを押して、「Download ZIP」を選択すると、「phyllosoma-production.zip」がダウンロードできる。

ダウンロードしたZIPアーカイブの「phyllowoma-production」フォルダーを解凍し、フォルダー名を「phyllosoma」に変更して「c:\pico」フォルダーに移す。「c:\pico\phyllosoma」フォルダーの中身は、次のようになる。
phyllosomaFolder.png

ビルド用のフォルダーを作成

「c:\pico」フォルダーに、「build」という名で新規にフォルダーを作成する。このフォルダー内に、「cmake.bat」 「make.bat」の2つのバッチファイルを作成する。バッチファイルの中身は、次の通り。

cmake.bat
@cd "%0\.."
@SET PATH=%PATH%c:\pico\cmake\bin;c:\pico\gcc-arm\bin;c:\pico\mingw64\bin;
@SET PICO_SDK_PATH=c:\pico\pico-sdk
@SET PARAMS=
@SET PARAMS=%PARAMS% -DPython3_EXECUTABLE="c:\pico\python\python.exe"
@SET PARAMS=%PARAMS% -DPICO_BOARD=pico -DPICO_PLATFORM=rp2040
cmake.exe -G "MinGW Makefiles" %PARAMS% ..\phyllosoma
pause

make.bat
@cd "%0\.."
@SET PATH=%PATH%c:\pico\cmake\bin;c:\pico\gcc-arm\bin;c:\pico\mingw64\bin;
mingw32-make
pause

ただし、これらのバッチファイルの中で、「cmake」 「gcc-arm」 「mingw64」 「pico-sdk」 「python」のインストール先を指定している。もしこれらが実際の場所と異なる場合は、適宜書き換える必要がある。また、「..\phyllosoma」はソースコードを含むフォルダーの指定なので、これが異なる場合も、書き換えなければならない。


「c:\pico\build」フォルダーの中身は、次のようになる。
buildFolder.png

これで、すべての準備ができた。「c:\pico」フォルダーの中身は、次のようになった。
picoFolder.png

いよいよビルド

まず、「c:\pico\build」フォルダーに作った「cmake.bat」のアイコンをダブルクリック。エラーなしに終了すると、次のような結果になる。
cmake.png

次に、「make.bat」のアイコンをダブルクリックすると、ビルドが開始される。1分から数分でビルドが終了し、エラーがなかった場合、次のような結果になる。
make.png

上記のような結果でビルドがうまく行くと、「c:\pico\build」フォルダーに、「phyllosoma.uf2」と「phyllosoma_kb.uf2」の2つのバイナリーが作成されているが、これらがビルドできたファームウェアーだ。「BOOTSEL」ボタンを押しながら Raspberry Pi Pico を USB スロットに差し込むと、「RPI-RP2」もしくは「RP2350」ドライブが出現する。ここに「*.uf2」ファイルをドラッグ&ドロップすると、これらのファームウェアーが Raspberry Pi Pico に書き込まれる。

Pico 2, Pico W, Pico 2 W 用のビルド

上記で説明した方法は、Raspberry Pi Pico 用のビルドであるが、Pico 2, Pico W, Pico 2 W用のビルドもできる。「cmake.bat」の内容で「-DPICO_BOARD=pico -DPICO_PLATFORM=rp2040」の部分をそれぞれ、次のようにすればよい。
Pico:     -DPICO_BOARD=pico -DPICO_PLATFORM=rp2040
Pico2:    -DPICO_BOARD=pico2 -DPICO_PLATFORM=rp2350-arm-s
Pico W:   -DPICO_BOARD=pico_w -DPICO_PLATFORM=rp2040
Pico 2 W: -DPICO_BOARD=pico2_w -DPICO_PLATFORM=rp2350-arm-s

また、「build」というフォルダー名ではなく「build_pico2」などの名でフォルダーを作って「cmake.bat」 「make.bat」を配置すれば、4つの異なる Raspberry Pi Pico 用のファームウェアーをそれぞれ別々に作成することも可能である。

ソースコードに変更があった場合のビルド

ソースコードに変更があった場合は、「make.bat」を実行しなおすだけでよい。「cmake.bat」の実行は不要である。

SDKに変更があった場合のビルド

pico-sdk に変更があった場合は、「c:\pico\build」ディレクトリーにあるファイルのうち、「cmake.bat」 「make.bat」以外のファイルを全部削除し、「cmake.bat」の実行からやり直す。これをやらないと、おかしなファームウェアーがビルドされる可能性がある。]]>
Raspberry Pi Pico https://www.rad51.net/blog/mycom/?itemid=988 Sat, 15 Mar 2025 21:26:43 PDT ITEM988_20250315
Raspberry Pi Picoを使った赤外線リモコンと受信機 https://www.rad51.net/blog/mycom/?itemid=984 20240525-controller.jpg
20240525-receiver.jpg

赤外線リモコン

リモコン(送信機)の回路図は、以下の通り。
20240525-schematic1.png

3V の電池駆動で、いずれかのボタンを押したときに回路図上側の MOSFET(2N7000) がアクティブになり、Pi Pico に給電される仕組み。この回路では、ボタンを押さないときの消費電流は最小限(測定すると、30 μA ほど)に抑えられているため、まったく使わなければ3年ほどは持つ計算。

赤外線 LED の駆動には、Pi Pico の昇圧回路から発生する 3.3 V を使っているため、電池が少々減っても、安定した出力が期待できる。昇圧回路の発振ノイズを軽減するため、47 μF のキャパシターを接続してある。このキャパシターは、発信機と受信機の距離が短いときのシグナル認識を向上させるようだ。LED の駆動は、回路図下側の MOSFET で行っている。LED と直列に接続している抵抗(10-150 Ω)の値をどれぐらいにすればよいのかは、使用する LED によって異なる。私が使った LED では、30 Ωぐらいが一番成績が良かった。なお、使用する LED が発する赤外線の波長は、赤外線リモコンでは一般的に 950 nm 付近が使われるようである。

リモコンのボタン数を作例では 7 個としたが、用途によって最大 25 個まで増やすことができる。各々にダイオードを接続して、MOSFET のゲートに繋げればよい。マトリックスを組めば、より多くのボタンの押下を認識することができるはず(ただし、ソースコードの大々的な変更が必要)。

Pi Pico のソースコードは、以下の GitHub レポジトリーに載せた。自分の用途に応用するには、main.c の「#define BUTTON_INPUT_MASK」の部分と「// Check button」以降の部分を編集して、ビルドする事。
https://github.com/kmorimatsu/ir_controller

赤外線受信機

リモコン受信機の回路図は、以下の通り。
20240525-schematic2.png

この回路図では、赤外線センサーからの入力のみしかないように見えるが、実際は、出力は USB を介して PC に送信される。PC に接続するバーチャルキーボードとして機能する。

赤外線センサーは、手元にある Sharp 製の GP1UD26XK を使用した。既に廃番になっているが、アクティブローで 3.3 V で機能する物であれば、殆どの物が使えると思われる。ただし、38 kHz 点滅の 950 nm 付近の赤外線に反応する物を選ぶこと。

Pi Pico のソースコードは、GitHub に上げた。
https://github.com/kmorimatsu/ir_receiver_keyboard

どの赤外線データーを認識させるかは、input.c 内の check_button() 関数内のコードを編集する。また、バーチャルキーボードとして、どのキーを送出するかを変更するには、main.c 内の hid_task() 関数内、「bool button_0 = check_button(0);」等の記述と、「if ( button_0 )」などの記述以降の行を、編集する。

32 ビットデーターの取得

ここで利用している 32 ビットの送受信データーは、MachiKania を持っている人であれば、IR_RX クラスを用いて、簡単に取得することができる。IR_RX クラスのヘルプファイルに使用例があるので、それをそのまま用いればよい。ただし、MachiKania に赤外線受信モジュールを接続する必要がある。

MachiKania を持っていないけれど、上の赤外線受信機を作成した人なら、次のようにしてデーターを抽出する事が可能。

1.ここから、uf2 ファイルを含むアーカイブをダウンロード
2.uf2 ファイルを、Pi Pico にアップロード
3.Pi Pico が COM ポートとして認識されるので、PuTTY や Tera Term などのシリアルコンソールで接続する
4.赤外線受信機に向けて、赤外線リモコンから送信する]]>
Raspberry Pi Pico https://www.rad51.net/blog/mycom/?itemid=984 Sat, 25 May 2024 15:35:19 PDT ITEM984_20240525