検索キーワード「Pi Pico」に一致する投稿を関連性の高い順に表示しています。 日付順 すべての投稿を表示
検索キーワード「Pi Pico」に一致する投稿を関連性の高い順に表示しています。 日付順 すべての投稿を表示

2025年4月4日金曜日

Raspberry Pi Pico 2を使ってみた〜C/C++ SDKでLチカプログラミング

以前に買ったまま放置状態で、昨年あたりから本格的に使い始めているRaspberry Pi Picoですが、その後継機としてRaspberry Pi Pico 2が開発・販売されています。搭載されているチップが、Pi PicoのRP2040(←DatasheetのPDF)からPi Pico 2のRP2350(←DatasheetのPDF)に変更になっていることが大きな違いのようですが、使用感としてどんな違いがあるのか(それほど違いはないのか)確かめてみたいと思います。
#Pi PicoとPi Pico 2の詳しい違いは、Pico Seriseのページにまとまっています。

これまでPi Picoを使って実験的なことをやってきましたが、Pi PicoでできたことがPi Pico 2でもできるかどうか検証してみたいと思います。(その前に、今回購入したPi Pico 2はピンヘッダなしのものだったので、ピンヘッダのはんだ付けもしました)

無駄なこととは思いながら、以前Pi Pico用にLinux Mintで動かしている自作PCで作った、動作確認(Lチカ)するための「blink.uf2」(プログラムファイル)をPi Pico 2に入れてみたらどうなるだろうかと思って、試しにやってみました。(C/C++でのプログラミング環境の作り方の詳細は、拙Blogの過去記事をご覧ください)当たり前と言えば当たり前のことですが、うんともすんとも言いませんでした。Pi Pico用に構築したC/C++ SDKをPi Pico 2に対応したものにするためにアップデートする必要があります。Pi Picoのときと同じように、Linux Mintの自作PC上でPi Pico 2に対応したC/C++ SDK環境を整えたいと思います。

ちょっと調べてみると、「pico-sdk」の中にRP2350に対応したsrc(source)のセットがないとダメだということがわかりました。ネットの情報を頼りに自分がインストールした「pico」フォルダを開いて「pico-sdk」→「src」とフォルダを開いてみると、確かに「rp2350」フォルダはありませんでした。そこで、「ターミナル(端末)」を起動して、「pico-sdk」フォルダに移動してからC/C++ SDKのアップデートを行いました。手順は以下の通りです。
#今回は、デバイスビジネス開拓団さんの「Pico三昧(22) Raspberry Pico 2、C/C++ SDKで吉例Lチカ」を参考にしました。

$ cd pico/pico-sdk/
$ git pull

しばらく待つとアップデート作業が終わって「src」フォルダ内に「rp2350」というフォルダが出来上がっていました。(他にも増えたところはたくさんありましたが説明は割愛します)これでPi Pico 2に対応したC/C++ SDKが整ったことになります。早速ですが、Lチカの実行ファイル(.uf2)を作ってみたいと思います。「cd」コマンドで元のユーザーディレクトリのトップに移動してから、以下のようにコマンドを打ち込みます。

$ cd pico/pico-examples/build/
$ export PICO_SDK_PATH=../../pico-sdk
$ cmake -DPICO_PLATFORM=rp2350 -DPICO_BOARD=pico2 ..

ここまでできたら、あとは「blink」フォルダ内で「make」するだけのはずです。(上記のコマンドに続いて作業を行います)

$ cd blink/
$ make -j4

Pi Picoのときと同じようにやってみたつもりですが、エラーを吐いてうまくコンパイルできません。「Makefile」に何らかの問題があるようなエラーメッセージが出ていて、「CMakefile」フォルダに「CMakeError.log」というエラーの内容をレポートするファイルが出来上がっているとも書かれていました。これを見ながら、複数のエラーが発生しているような感じだったので、元々のpico-examplesの更新が必要なのではないかと考えて、gitコマンドでのダウンロード作業からやり直してみることにしました。(この作業は、私の作業環境である「pico」フォルダ内に移動したところから行いましたが、このフォルダ名は任意で構いません)

$ git clone -b master https://github.com/raspberrypi/pico-examples.git
$ cd pico-examples/
$ mkdir build
$ cd build/
$ export PICO_SDK_PATH=../../pico-sdk
$ cmake -DPICO_PLATFORM=rp2350 -DPICO_BOARD=pico2 ..

この作業をしているフォルダ内に、既に「pico-examples」フォルダがあると作業はうまくいきません。これまで使っていた「pico-examples」フォルダを残したままだとgit cloneコマンドが通らないためです。(強制的に上書きすることはできるかもしれませんが、ちょっとややこしいみたい…)今後も以前の「pico-examples」を使用する可能性がある場合には、以前のものを別のところに移動させておくと良いと思います。

これで準備が整ったと思いますので、以下のコマンドで再度実行ファイルのコンパイルに挑戦してみます。

$ cd blink/
$ make -j4

これで、無事に実行ファイル「blink.uf2」が出来上がりました。PCにPi Pico 2をつないで(初回はUSBケールでつなぐだけでUSBメモリのように認識しますが、2回目以降は「BOOTSEL」ボタンを押しながらつなぎます)、USBメモリのように開いた窓に「blink.uf2」をコピーすると、自動的にプログラムしたものが動き始めます。少々時間はかかりましたが、無事にLチカ動作実験成功ということになりました。これからは、Pi Pico(無印)の実行ファイルを作る環境との共存が可能なのかを確認したり、Pi Pico 2のThonnyやビジュアルプログラミングへの対応などを一通り確認したりしてみたいと思います。(やることいっぱい思いつくのだけれど、相変わらず時間がない…。orz)

「Raspberry Pi Pico 2を使ってみた」

2025年4月26日土曜日

Raspberry Pi Pico 2を使ってみた〜Thonny(MicroPython)プログラミング

以前の続きです。これまでRaspberry Pi Picoでやってきた動作実験を、Raspberry Pi Pico 2でもやってみようと思って復習を兼ねて取り組んでいます。今回は、Thonnyを使ってMicroPythonでのプログラミングについて動作確認をします。

はじめに、Pi Pico 2をMicroPythonでのプログラミングに対応させるために、ファームウェアを変更する作業を行います。各Pi Picoに対応したファームウェアファイル(「.uf2」ファイルなので他の実行ファイルと区別はつきにくい)は、以下のところからダウンロードすることができます。

今回は、Pi Pico 2を使いますので、対応したファームウェアファイル(.uf2)をダウンロードしておきます。これをPi Pico 2にコピーするために、USBケーブルでPi Pico 2とPCを接続します。その際に、(他のPi Picoシリーズと同じく)接続するPi Pico 2が一度も実行ファイル(.uf2)を入れた(コピーした)ことがなければ、PCに挿しただけでUSBストレージデバイスとして認識されます。この「USBストレージデバイス」として認識されているところに、一度でも実行ファイル(.uf2)を入れた(コピーした)ことがある場合は、それがC/C++でのプログラミングであってもMicroPythonでのプログラミングであっても、それ以降は「BOOTSEL」ボタンを押しながら接続しないと、USBストレージデバイスとしては認識してくれなくなるので注意が必要です。
#ちなみに、今回もPCはLinux Mintで動かしている自作PCを使用して動作確認しています。

USBストレージデバイスとして認識されたPi Pico 2に、MicroPythonでのプログラミングに対応させるファームウェアをコピーすると、自動的にPi Pico 2がリセットされてUSB接続された状態になります。これでPi Pico 2側のセットアップは完了です。続けて、Thonnyを起動すると、既にPi Pico用のセットアップを済ませていたため何の問題もなく接続されました。(詳しい設定方法は、拙Blogの過去記事を御覧ください)

あとは、とりあえずLチカプログラム(.py)を開いて「実行」ボタンをクリックするだけです。ということで、あっけないほど無事にLチカ実験が完了して動作確認ができました。試しに、Pi Picoに挿し替えて同じようにLチカできるか確認しましたが、Pi PicoでもPi Pico 2でもThonnyが自動的に認識して同じLチカプログラムが動くことを確認しました。挿し替える際は、一度「停止」ボタンをクリックしてからUSBケーブルを抜き、挿し替えたらもう一度「停止」ボタンをクリックすると自動的に認識してくれます。この方法でうまくいかなかったら、Thonnyを終了させてから挿し替えて、再びThonnyを起動すれば問題ないと思います。

C/C++でやったときは、環境を整えるためにいろいろと試行錯誤しましたが、あまりにも簡単に動作確認することができてしまい、Pi Picoとの共存も簡単にできることがわかりました。初学者用としては、こちらの方がかなり良いと思いました。

〈参考Lチカプログラム(MicroPython)〉

from machine import Pin
import utime
led = Pin(25, Pin.OUT)
while True:
led.toggle()
utime.sleep_ms(400)

「Raspberry Pi Pico 2を使ってみた」

2025年5月4日日曜日

Raspberry Pi Pico 2を使ってみた〜ビジュアルプログラミング

前回の続きです。Raspberry Pi Pico 2を使ってフィジカル・コンピューティングの動作確認をしていきます。前回は、Thonnyを使ったMicroPythonプログラミングでの動作確認をしました。今回は、ビジュアルプログラミング環境での動作確認をしたいと思います。以前の記事(「Piper Make編」「BIPES編」)で、Piper MakeBIPESでの動作確認をしましたが、今回もこの2つのサイトを利用してビジュアルプログラミングの動作確認をしていきたいと思います。
#今回も動作確認に使うPCは、Linux Mintで動かしている自作PCを使用します。

〈Piper Make編〉
先ほど紹介した拙Blogの記事を参考にしながら、Piper Makeで動作確認をしてみました。まず、ChromeブラウザーでPiper Makeのサイトを開いて「CREATIVE」モードにしておきます。Piper Makeは専用のファームウェアを使用するので、「SETUP MY PICO」ボタンをクリックしてセッティングを開始します。Pi Picoを(ストレージモードで)PCに接続したときは、「RPI-RP2」という名称のUSBストレージデバイスとして認識されたのですが、Pi Pico 2では、「RP2350」という名称になっていました。とりあえず、この中にファームウェアをインストールするように選択をして、セットアップを終えました。

Pi Pico 2(RP2350)の中には、「piper_circuitpython.uf2」というファームウェアが書き込まれたようですが、自動で再起動されることはなく、手動でUSBケーブルを抜いて再度PCへ接続してみました。この状態でPi Pico 2をPCに接続しても、基本的には何も起きません。そこで、Piper Makeの「CREATIVE」モードから、過去に自分が作ったLチカプログラムを開いて動作確認を進めていきます。プログラムを開いたウィンドウの左下に「CONNECT(接続する)」ボタンがあるのでこれをクリックします。すると、シリアルポートが読み取られて接続できるPi Picoが表示されるはずなのですが、「対応デバイスが見つかりませんでした。」と表示されてPi Pico 2は認識されていないようでした。

Piper Makeを詳しく調べていくとPi Pico 2での動作についての記述が見当たらず、今後のことはわかりませんが、現状ではPi Pico 2には対応していないようでした。

〈BIPES編〉
気を取り直して、次にBIPESでの動作確認をしていきたいと思います。こちらも先ほど紹介した拙Blogの記事を参考にしながら作業を進めていきます。BIPESは、内部的にMicroPythonを使うので、動作確認に使用するPi Pico 2にはあらかじめPi Pico 2用のファームウェアを入れてセットアップをしておきます。

BIPESのサイトを開いて、接続するデバイスを選ぶところで嫌な予感がしました。「Raspberry Pi Pico 2」は、選択肢にありません。仕方がないので、ダメ元で「Raspberry Pi Pico」を選択して、デバイスの「Connect(接続)」ボタンをクリックしてみました。すると、シリアルポートに「tty」から始まる接続先が現れたので、これを選択してから「接続」ボタンをクリックしました。
#接続先のポートがわからない場合は、Pi Pico 2をつないでいるUSBケーブルを抜き差しして、消えたり現れたりするポートを確認すると、接続先のポートを見つけることができます。(ターミナルコンソールを開いて確認するより速い)

以前に作っていたLチカプログラムがそのまま残っていたので、少々ドキドキしながら「RUN(右向き三角マーク)」ボタンをクリックしてみたところ、Lチカ動作確認ができてしまいました。期待をしていなかったので、思わず「動いた!」と声を上げてしまいました。
#ここで使ったLチカプログラムも先ほど紹介した拙Blogに記載していたものです。

ということで、Pi Pico 2でビジュアルプログラミングをやりたい場合は、BIPESならできるということがわかりました。日本の小学校でこれを使いたいという場合には、やはり英語表記がネックになると思います。これをよい機会と捉えて、「英語の学習も兼ねて」なんて思ってくれる方がどのくらいいるかわかりませんが、個人ベースでなら小学生でもチャレンジしてくれる子がいてもよい気がしています。こういう攻略を楽しめる子が増えてくれると嬉しいのですが…。

「Raspberry Pi Pico 2を使ってみた」

2024年7月13日土曜日

LinuxでRaspberry Pi Picoを使ってみる

これまで、Raspberry Piのことは何回か記事にしてきましたが、以前のRPiのアップデート作業の際に、購入はしたものの放置状態だったRaspberry Pi PicoシリーズのPicoとPico Wがあることを思い出し、何か使えることはないかと思ってちょっといじってみることにしました。

とは言え、買ったときのこともその使い方もあまり覚えていないので、Google先生にお世話になりながらいろいろと調べて、いくつかのプログラミング方法があるというところまではわかってきました。この手のマイコンボードは様々なものを使ってきましたが、これからも使い続けたいと思うものはだいぶ絞られてきて、現状だとArduino系のものかmicro:bitかというくらいで、他のものはほとんど使わなくなっています。絶対にPico/Pico Wを使わなければならないというほどの需要はないのですが、使い勝手くらいは試してみようと思ってチャレンジすることにしたのでした。
#今回は、主にCQ出版社の「ラズベリー・パイPico/Pico W攻略本」を参考にしました。

まずは開発環境を整えるところから。アプローチとしては、大きく2つあって、1つ目が「C/C++やMicroPythonでプログラムを作る」で、もう1つが「ビジュアルプログラミング環境を利用する」です。手始めに、C/C++でのプログラミング環境を構築して、Picoを動かしてみたいと思います。プログラミング環境(SDK)を整えるのは、Linux Mintで動かしているいつもの自作PCです。

〈C/C++でのプログラミング〉
Raspberry Pi Documentation(Raspberry Pi公式)に、「Microcontrollers」として「Raspberry Pi Pico and Pico W」に関する記述があります。「The C/C++ SDK(英語です)」を読むと、今回の作業で必要なC/C++での開発に関するSoftware(SDK)が、GitHubにあることがわかりました。そこでさらに、てつふくブログさんの「Raspberry Pi Picoの開発環境構築 (Ubuntu PC)」を参考にしながら、GitHubで公開されているSDKを使えるようにセットアップしていくことにしました。

その前に、Gitコマンド(GitHubのバージョン管理システムを使うためのコマンド)が使えるように、インストール作業をしておきます。(wgetは、すでにインストールしてありましたが、まだの場合はこちらもインストールしておく必要があるようです)これで準備が整ったので、後はてつふくブログさんの記事に書かれている通りにセットアップします。(作業領域については、ご自分の環境に合わせてフォルダを作るなどしてください)

  • $ git clone -b master https://github.com/raspberrypi/pico-sdk.git
  • $ cd pico-sdk
  • $ git submodule update --init
  • $ cd ..
  • $ git clone -b master https://github.com/raspberrypi/pico-examples.git

その他に必要なツール類をaptコマンドでインストールします。

  • $ sudo apt update
  • $ sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi build-essential

手始めにLチカで動作確認するために、さらに作業を進めていきます。Gitで構築した「pico-examples」フォルダ内で作業を行います。

  • $ cd pico-examples
  • $ mkdir build
  • $ cd build

「build」フォルダ内で、パスの設定をします。

$ export PICO_SDK_PATH=../../pico-sdk

この状態で「cmake ..」コマンドを実行すると、C/C++ SDKでの作業環境が整うので、「pico-examples」フォルダの方に移動して、「build」→「blink」フォルダに移動し、「make -j4」コマンドを実行すると、「blink.uf2」という実行ファイルが出来上がります。これを「BOOTSEL」ボタンを押しながらUSBケーブルでPCに接続したPico(USBストレージのように見える)に保存します。中に見える他のファイルについてはいじらずに、.uf2ファイルをコピーするだけです。コピーが終わると自動的に再起動され、無事にLチカができました。
あんパンさんの「Arch LinuxでRaspberry Pi Picoに繋いでLチカするまで」が参考になりました。

作業の手順は難しくはないものの、コマンドでの環境構築はそれなりにハードルが高く万人向けとは言えないかもしれません。今回は長くなってしまいましたが、次回以降、もう少し簡単な方法を取り上げてみたいと思います。

〈参考資料〉

2024年7月20日土曜日

MicroPythonでRaspberry Pi Picoのプログラミングに挑戦

前回の続きです。Raspberry Pi PicoシリーズのPicoとPico Wがあったので、いじってみることにしたというのが前回までの話。とりあえず、Lチカまでやってみましたが、もう少し簡単にできないものかと思って最近流行りの(?)のMicroPythonで動かす方法を試してみることにしました。実験環境は、いつものLinux Mintで動かしている自作PCです。
#今回もCQ出版社の「ラズベリー・パイPico/Pico W攻略本」を参考にしました。

〈MicroPython(Thonny)のセッティングとプログラミング〉
MicroPythonでプログラムするためにThonnyというツールをインストールして使うことにします。Ubuntu系のディストリビューションで「ソフトウェアマネージャ」を使っていれば簡単にインストールすることができます。それから、Pico側もMicroPythonでプログラムできるようにファームウェアを書き換えておきます。

PicoにはPicoの、Pico WにはPico WのMicroPython用ファームウェア(.uf2)があるので、それぞれ最新のものをダウンロードしてBOOTSETボタンを押しながらUSBケーブルで接続してコピーしました。

インストールしたThonnyを起動すると言語(Language)と初期設定(Initial Settings)を聞かれるので、日本語とRaspberry Piを選んでおきます。「Let’s go!」ボタンをクリックするとArduino IDEにも似た雰囲気の窓が開きます。ここでもう少し設定を変更すると使いやすくなります。(Simpleモードになっているとアイコン以外のメニューが表示されないので、右上の「通常モードに変更」をクリックします。設定を変更したらThonnyを一度終了してもう一度起動させます)「表示」メニューから「ファイル」にチェックを入れて「ファイル」の窓を表示させます。「実行」メニューから「インタプリタ設定…」を選択し、コードを実行するインタプリタを「MicroPython(Raspberry Pi Pico)」にしておきます。

後は、いつものようにLチカプログラムで動かしてみます。試したコードは以下の通りです。

from machine import Pin
import utime
led = Pin(25, Pin.OUT)
while True:
led.toggle()
utime.sleep_ms(400)

挙動として、Thonnyを起動する前にPico/Pico WをPCにつないでおくとThonnyを起動した後の作業がスムーズです。PC内にMicroPythonで書いたプログラムファイル(.py)を保存して実行することも可能ですが、Pico/Pico W自体に「main.py」ファイルとして保存することで、自立(Pico/Pico W単体に電源供給するだけ)してプログラムを動かすことができます。その場合、Thonnyを起動した状態のままだとThonnyからのコントロールが優先され、Thonnyを終了させてUSBケーブルをつなぎ直すと中に保存したmain.pyに従って動作するようです。
#Pico/Pico Wの中に保存された.pyファイルは、「BOOTSEL」ボタンを押しながらPico/Pico Wをつないでもドライブの中に入っていません。Thonnyからしか見ることができないのです。
ロジカラブログさんの「ラズパイPicoの使い方 MicroPython&開発環境Thonny、SSLエラーの対処方法も紹介」がとてもわかり易かったので参考として紹介しておきます。

ということで、Thonnyを使ってMicroPythonでPico/Pico Wのプログラムを作って動かすことができるようになりました。このThonnyは、micro:bitESP32などのプログラムもできるようなので、ツールごとに開発環境を変えずに同じ環境でプログラムしてみたい方は、Thonnyでやってしまうというのもありではないかと思いました。
#Arduino IDEでもライブラリの追加で使うことができるようになるかもしれませんが…。

〈参考資料〉
MicroPythonプログラミング・ガイドブック」CQ出版社

2024年10月1日火曜日

Raspberry PiでRaspberry Pi Picoのプログラミングに挑戦〜MicroPython編

以前の続きです。これまで、Linux MintRaspberry Pi Picoを動かしていました。そもそも、Raspberry Piという名前を冠しているということは、本家Raspberry Pi(これも基本はLinuxベースOSで動かします)との親和性が高いはず。ということで、PicoをRaspberry Piで動かしてみたいと思います。今回は、普段はiMacの裏側において時々実験的に使っているRPi 3HPのスリムタワーケースに入っている)とRPi 400を使って、Picoのプログラミングができるか検証してみます。Linux Mintのときと同様にThonnyVisual Studio Codeを使いますが、インストールはRPiメニューの「設定」→「Recommended Software」から簡単にできます。
#手順としては、RPi 400でやってみて、同じことをRPi 3で検証するという方法で行いました。

〈Thonnyの場合〉
まず、RPiメニューから「Thonny」を起動して作業開始。起動したThonnyの画面上部に表示されたメニューアイコンの右端に「Switch to regular mode」という文字だけのメニューがあるのでこれをクリックします。一度Thonnyの画面を閉じて再び起動すると、メニューアイコンの上に文字のメニューが現れます。「Tools」メニューから「Options…」を選択し、「Language」を「日本語」にします。もう一度Thonnyを閉じて再度起動すると、メニューが日本語になります。(一部日本語化できていない部分もあります)

次に、「表示」メニューから「ファイル」にチェックを入れて「ファイル」の窓を表示させます。「実行」メニューから「インタプリタ設定…」を選択し、コードを実行するインタプリタを「MicroPython(Raspberry Pi Pico)」にしておきます。これで準備は完了です。一度Thonnyを終了させて、PicoをUSBで接続してから再びThonnyを起動して作業を続けます。
#Picoを接続してThonnyを起動すると、「インタプリタ設定(Select interpreter)…」で「ポート(Port)」の選択が可能になります。ここで、「<ポートの自動検出を試す>」にしておくと、自動的にPicoが接続されました。RPi 3では、「Board in FS mode - Board CDC (/dev/ttyACM0)」を明示的に選択しましたが、RPi 400でも明示的に選択できます。

あとは、過去の拙Blogの記事を参考にして、PicoのLチカ実験をしてみます。今回は、既にMicroPythonが使えるように設定をしてあるPicoを使いましたが、まだの場合はその設定作業も必要です。(前出の拙Blog記事を参考にしてください)実験したLチカプログラムは、今までと同じものです。

from machine import Pin
import utime
led = Pin(25, Pin.OUT)
while True:
led.toggle()
utime.sleep_ms(400)

あらかじめローカル(「ドキュメント」など)に保存しておいた.pyファイルをファイル窓から開いても、Pico内に保存されているmain.pyを開いても、どちらも実行ボタンをクリックして動作させることができました。

〈Visual Studio Codeの場合〉
Visual Studio Codeでも同じことをやってみます。RPiメニューから「Visual Studio Code」を起動して、窓の左側に縦に並んだアイコンの中から「Manage」をクリックし、一番上の「Command Palette…」をクリックします。ここから、「Configure Display Language」を選択し、「日本語」を選んでインストールします。(インストールが終わると再起動が促されます)

次に、同じく窓の左側に並んだアイコンの中から「EXTENSION」を選択し、検索窓に「Pico」と入れて検索すると「Raspberry Pi Pico」の拡張機能が出てくるので、これをインストールします。続いて、先述したLinux Mintでの経験から、検索窓で検索して「MicroPico」もインストールしました。以前は、この状態からPicoをつなぐとつながった感じになったのですが、今回はなんか手応えがない感じ。「▶✓」ボタンから「専用ターミナルでPythonファイルを実行する」をクリックしても、「ターミナル」の窓でエラーが発生している旨のメッセージが出てプログラムが止まってしまい、「問題」の窓には、「”machine”や”utime”って何?インストールされていませんけど?(意訳)」というようなメッセージが出てしまいます。

そもそも、「Python」や「micropython」が動いていないのかもしれないと考えて、これらも検索してインストールしましたが結果が変わらず。どうやっても「machine」や「utime」がネックになっているようです。そこで、「Raspberry Pi Pico」の拡張機能を入れたときに出てきたPicoのアイコンから、「New MicroPython Project」を選択して作業を進めてみることにしました。作業スペース(フォルダ名)を「LED(←これは任意の名前でよいです)」として「ドキュメント」フォルダ内にMicroPython用の作業スペースを作ると、「LED」フォルダ内に「blink.py」というLチカプログラムが自動的に作られていました。

この「blink.py」を開こうとすると「machine」や「utime」をインストールするかと聞かれるので案内に従って作業を続行します。すると「IntelliCode」という拡張機能のインストールが行われ、窓の下側に「✓Pico Connected」や「Run」「Reset」といった見覚えのあるメニューが並びました。

この状態で「blink.py」を前面にして「Run」ボタンをクリックすると、無事にLチカできました。続いて、もともと自分で作って保存していたLチカプログラムでもやってみましたが、問題なく動かすことができました。ただしRPi 3では、Visual Studio Codeをインストールしようとするとエラーが出てしまい、インストール自体が(理由は未検証ですが…)できませんでした。残念ですが、Visual Studio Codeの方がより大掛かりなシステムなので、RPi 3では非力すぎるのかもしれません。その意味でも、Thonnyの方が初学者にとってハードルが低いのではないかと思いました。

【追記】これまでのPicoでのプログラミング(フィジカル・コンピューティング)に関する拙Blogの記事もご覧ください。(2024.11.4←これからも適宜更新していきます)

2024年8月1日木曜日

Visual Studio CodeでRaspberry Pi PicoのMicroPythonプログラミングに挑戦

以前の続きです。Raspberry Pi Pico/Pico Wのプログラムを作成する環境として、前回はThonnyを使ってMicroPythonでのプログラミングを試してみました。今回は、最近よく使われているVisual Studio CodeをMicroPythonでの開発環境として使うことができるようにしてみたいと思います。とは言え、Visual Studio Code自体は、MicroPythonにもPico/Pico Wにも特化したものではなく汎用性の高いIDEであるため、それなりに準備を整える必要があります。備忘を兼ねて、その作業手順をまとめておきたいと思います。
#今回は、「Raspberry Pi Pico W の LED を VS Code を使って、点滅させてみた。(RP-Pico チュートリアル)」も参考にしました。
#Visual Studio CodeでC/C++を使ったPico/Pico Wのプログラミングもできますが、今回はチャレンジしていません。

〈Visual Studio Codeのセッティングとプログラミング〉
Visual Studio Codeのインストール作業については、Thonnyと同様にUbuntu系のディストリビューションを使っていればソフトウェアマネージャで簡単にインストールすることができるのですが、どうもインストール後の不安定さが気になったのでダウンロードサイトから.debファイルをダウンロードしてインストールしてみました。作業をした時点では、ソフトウェアマネージャ(Flatpak)ではバージョンが1.90.…となっているのに対して、ダウンロードしたものはバージョンが1.91.…となっていました。とりあえず、ダウンロードした最新バージョンのものを使うことにして作業を進めました。

インストール後にはじめて起動したとき、日本語表示が必要なら日本語のLanguageパックをインストールした方が良いという案内があって、それに従ってインストール作業をしました。Pico/Pico Wとの接続に必要なのは、「MicroPicoGitHub)」という拡張機能です。ウィンドウ左側のメニューアイコンから「拡張機能」を選択して、検索窓に「micropico」と入力するとPico/Pico w用の拡張機能が表示されます。これをインストールすれば準備完了のはずですが…。

よく見ると、拡張機能のMicroPicoの項目に軽微な不具合があることがアナウンスされています。「workspace」への対応に問題があるというような内容が書かれているのですが、そんなことより面倒な問題が発生しました。MicroPicoをインストールしたままPico/Pico Wをつなぎ(「Pico Connected」と表示される)、以前Thonnyで作った「main.py」ファイルを開いてVisual Studio Codeのウィンドウ下部に位置する「ステータスバー」にある「RUN」をクリックすると、プログラム通りの挙動するところまでは順調にできました。ところが、一度Visual Studio Codeを終了させて、再度起動するとステータスバーにあったはずのMicroPicoのメニューがなくなっているのです。どうやら、「MicroPico」拡張機能が正常に起動していない感じだったので、「拡張機能」メニューから「MicroPico」を選んで「無効にする」→「拡張機能の再起動」→「有効にする」という手順で拡張機能を起動し直しました。すると、ステータスバーのメニューが復活することががわかりました。面倒ではありますが、使えないというほどでもないという微妙な状況。試しに、実験的なことばかりに活用してるiMacでもやってみました(macOS版Visual Studio Code 1.91.…を使いました)が、こちらは全く問題なくMicroPicoのメニューが消えることはありませんでした。

ということで、心もとないところは多々ありますが、Linux版Visual Studio CodeでのPico/Pico Wの動作実験の環境ができました。

挙動としては、Visual Studio Codeを起動した状態で、MicroPythonに対応したファームウェアを入れてあるPico/Pico Wをつなぐと「Pico connected」と表示されます。Visual Studio Codeの「ファイル」メニューから「新しいファイル…」でファイル名を決めて新しいファイルを作ります。プログラムは、MicroPythonで書きますので、.pyファイルを作ってプログラムを書き込めばよいということになります。今回は、以前にThonnyで作った「main.py」があったので、これを開いて前面に表示させて、ステータスバーの「RUN」をクリックしました。すると、「RUN」が「STOP」に変わってmain.pyに書かれたとおりに動作しました。次に別のプログラムを動かしたい場合は一度「STOP」をクリックして動作を止めてから、プログラムを変更し終わったら再び「RUN」をクリックして動作確認します。
#この際のファイル名は、「main.py」でなくても問題ありませんが、最終的にPico/Pico Wに書き込んで自立的に使いたい場合には、「main.py」でないと思い通りに動いてくれません。

Pico/Pico Wにプログラムしたものを書き込みたい場合は、「表示」メニューから「コマンドパレット」を選択し、コマンドを入力する窓に「MicroPico: Upload current file to Pico」と打ち込んでEnterキーを押すと書き込み作業をしてくれます。この辺りは、Thonnyに比べるとやや敷居が高い気がします。「他の用途でVisual Studio Codeを使用していて、その操作性に慣れているから同じ環境でPico/Pico Wを使いたい」という場合には、Visual Studio Codeを使うというのはよい選択肢だと思いますが、Thonnyの方がシンプルで使いやすく初学者にも優しいように思いました。

〈参考資料〉

〈Lチカプログラム〉

from machine import Pin
import utime
led = Pin(25, Pin.OUT)
while True:
led.toggle()
utime.sleepms(400)

2024年10月7日月曜日

Raspberry PiでRaspberry Pi Picoのプログラミングに挑戦〜ビジュアルプログラミング編

前回の続きです。これまで、Raspberry PiRPi 3RPi 400)でThonnyVisual Studio Codeを動かして、MicroPythonでのRaspberry Pi Picoのプログラミングに取り組んでみました。一般的にプログラミングをする際の敷居としては、テキストプログラミングよりビジュアルプログラミングの方が敷居が低いと思いますが、小型のPCと考えると非力なRPiの場合は、マシーンスペックとしてビジュアルプログラミングのほうが敷居が高くなるような印象があります。そこで、RPiでWeb上のビジュアルプログラミング環境を使ってフィジカル・コンピューティングのプログラミングができるのか、検証してみることにしました。
#今回使っているブラウザは、デフォルトでインストールされているChromiumです。

以前に、Linux MintGoogle Chromeでビジュアルプログラミング環境(「Piper Make」と「BIPES」)を動かして、ビジュアルプログラミングを行い、Raspberry Pi Picoを動かすことができています。今回は、その時の経験で得た知見をもとに、動作実験をしていきたいと思います。

#手順としては、今回もRPi 400でやってみて、同じことをRPi 3で検証するという方法で行いました。

〈Piper Makeの場合〉
先ほど紹介した拙Blog(Piper Make編)の記事を参考にしながら、作業をしていきます。Piper Makeのサイトを開いて、MODEレバーの「CREATIVE」をクリックして最初からビジュアルプログラミングに取り組みます。今回は、Linux MintのときにPiper Makeで使ったPicoをUSBでつないでみましたが、ドライブ名が「RPi-RP2」になっていてそのままでは使えませんでした。そのため、プログラミングを始める前に、「SETUP MY PICO」をクリックして、ガイドに従ってPicoの設定を行いました。すると、ドライブ名が「CIRCUITPY」という名前になり、Piper Makeと接続可能な状態になりました。

あとは以前にやった通り、「NEW PROJECT」から新しいプロジェクトを作成し、それを開いて「CONNECT」ボタンを押すとPicoが「Pico(ttyACM0)」として認識されていることがわかるので、これをクリックして「接続」ボタンをクリックします。以前のLチカプログラムを作って「START」ボタンをクリックすると、無事にLチカできました。RPi 3でもやってみましたが、動作が若干もっさりした感じになるものの、Lチカ自体は問題なくできました。
#PicoをPiper Makeで使えるようにすると、ドライブモードがデフォルトになる設定が施されるようです。取り外しは、イジェクトボタンから行わないと正常に取り外されたと認識されないようです。

〈BIPESの場合〉
MicroPythonで使えるようにしたPicoを接続して、動作実験を始めます。これも、先ほど紹介した拙Blog(BIPES編)の記事を参考にしながら作業をしていきました。接続するマイコンボードの選択画面から「Raspberry Pi Pico」を選択し、接続マークをクリックすると「Board in FS mode(ttyACM0)」と表示されますので、これをクリックして「接続」ボタンをクリックします。これで、Picoとの接続が完了するので、あとはプログラムを作って動作確認するだけです。

以前にやったものを参考にしてLチカプログラムを作って動かそうとしてみましたが、どうも動作がおかしい感じ。Piper MakeでのLチカ実験のあと、新しいタグを開いてBIPESの実験を続けていたのがいけなかったのではないかと思い、一度ブラウザを閉じてからもう一度立ち上げ直してやってみました。すると、無事に思い通りの動作をしてくれました。横着をしてはいけないことがわかりました。同じようにRPi 3でもやってみましたが、Piper Makeよりスムーズに動いてくれたので、より実用的ではないかと思いました。(個人の感想ですけどね)

というわけで、RPiでPicoを動かすというのもありですね。そろそろPico 2でも試してみないといけないかもしれません。(RPi 5は、ちょっと手が出ていませんが…)

【追記】これまでのPicoでのプログラミング(フィジカル・コンピューティング)に関する拙Blogの記事もご覧ください。(2024.11.4←これからも適宜更新していきます)

2024年8月26日月曜日

ビジュアルプログラミング環境でRaspberry Pi Picoのプログラミングに挑戦〜BIPES編

前回の続きです。Raspberry Pi Picoのビジュアルプログラミング環境として「Piper Make」を使ってLチカをやってみました。今回は、以前に見つけたもう一つの「BIPES」でやってみたいと思います。BIPESでは、MicroPythonが使えるようになっているPicoを使う必要があるのですが、以前にThonnyVisual Studio CodeでプログラミングをやったときにMicroPythonを使えるようにしたPicoがあるので、これを使ってLチカプログラムの動作確認をしていきたいと思います。
#PicoのプログラミングでMicroPythonを使えるようにする作業については、拙Blogの過去記事を御覧ください。

今回もLinux Mintで動かしている自作PCを使って動作確認をしますが、ブラウザはLinux版のGoogle Chromeです。今まで、ブラウザは何を使っているのかということを書いていませんでしたが、最近では「ソフトウェアマネージャー」からもGoogle Chromeが使えるようになって、LinuxでもGoogle Chromeを使っています。
#大人の事情(?)により、LinuxではChromiumを使わざるを得なかったのですが、できないことも多くて苦労しました。

〈BIPESを使ってみる〉
BIPESのサイトは、Piper Makeとは違って教育プログラムを提供するような感じではなく、あくまでビジュアルプログラミング環境を提供しているのみとなっていますが、それはそれで割り切って考えれば迷うこともなくてわかりやすいと評価することができます。問題点は、Piper Makeと同じくすべてが英語表記であることですが、難しいことはないと思いますので試用だけはしてみたいと思います。
#仕事に余裕があれば、こういうサイトの日本語翻訳にも取り組んでみたい気もしますが…。(お呼びでないかな)
#サイトを丸ごとGoogle翻訳で日本語化してみようと試してみましたがダメでした。

以下、Lチカまでの手順をまとめておきます。

  1. (Google Chromeで)BIPESのWebサイトを開く
    ※このとき、PicoはPCに接続しません
  2. 接続するマイコンボードを「Raspberry Pi Pico」に変更する
  3. 「Loops」から「repeat(while)」、「Logic」から「(true)」、「Timing」から「delay[1](seconds)」、「Machine」→「IN/OUT Pins」から「set output pin …」を取り出してプログラムする
  4. Picoを(USB-A↔micro USBケーブルで)PCに接続する
  5. 「Connect/Disconnect」ボタンをクリックして、Picoの接続先を選ぶ
  6. (マイコンボードを選択した窓の右にある)スタートボタンを押してプログラムを動かす

これで無事にLチカ動作確認ができました。使用感としては、一言に「ビジュアルプログラミング」と言っても、その言語の設計思想によって使用感や難易度が変わるということがわかりました。前回のPiper Makeは、micro:bitMakeCodeでのプログラミングに似ていると感じました。一方、今回のBIPESは、MicroPythonでのプログラミングにも近いように感じて、ビジュアルプログラミングからテキストベースのプログラミングへの橋渡しにもなるように感じました。ただし、私自身はビジュアルプログラミングとテキストベースのプログラミングに優劣があるとは思っていませんし、ビジュアルプログラミングを幼稚だとか将来的に卒業すべきものだとかというようには思っていません。目的や自分のスキルに応じて使い分けることができればよいのではないかと思います。

〈参考資料〉

【追記】これまでのPicoでのプログラミング(フィジカル・コンピューティング)に関する拙Blogの記事もご覧ください。(2024.11.4←これからも適宜更新していきます)

2024年8月20日火曜日

ビジュアルプログラミング環境でRaspberry Pi Picoのプログラミングに挑戦〜Piper Make編

以前の続きです。これまでは、C/C++やMicroPythonThonnyVisual Studio Code)でのプログラミングに挑戦してきましたが、学校での使用となるとまだまだハードルが高いと思います。(現状では、ということで…)そこで、ScratchMake Codeのような、いわゆるビジュアルプログラミング環境を使ってRaspberry Pi Picoのプログラミングができないか調べてみました。すると、「Piper Make」と「BIPES」というビジュアルプログラミング環境を見つけることができました。両方とも英語なので「ビジュアルプログラミングだから簡単」とは言えないところがありますが、使用感だけでも確認してみようと思います。

〈Piper Makeを使ってみる〉
Piper Makeの使い方については、SunFounder(米国にある、ArduinoやRaspberry Piなどを活用したSTEAM教育に力を入れている企業と紹介されています)のテキストが充実していたので、それらを参考にしてPicoの動作確認をしていきます。参考資料は以下のとおりです。

ビジュアルプログラミングをはじめる前に、セットアップ作業が必要です。今回もLinux Mintで動かしている自作PCを使って作業を行います。また、PCとの接続にはPicoの他にUSB-A↔micro USBケーブルが必要です。作業した内容は以下のとおりです。

  1. Piper Makeのサイトを開く
    ※PicoとPCとの接続は、後で指示されるまで行わないでください
  2. 画面上の「SETUP MY PICO」ボタンをクリックする
  3. ガイドのウインドウが表示されるので指示に従ってセットアップ作業を行う
    ※Picoにファームウェアがインストールされます

これで動作確認の準備が整いました。試しにLチカプログラムを動かしてみたいと思います。デフォルトでは「STORY」モードになっていると思いますので、MODEレバーの側にある「CREATIVE」をクリックしてビジュアルプログラミングができる状態にします。Lチカまでの手順を以下にまとめておきます。

  1. 「NEW PROJECT」ボタンをクリックしてプロジェクトを作る
  2. 新しく作ったプロジェクトをクリックしてビジュアルプログラミング画面に入る
  3. 「Chip」から「Start」「turn pin(0) (on)」「wait (1) seconds」、「Loops」から「repeat forever …」を取り出してプログラムする
  4. 「CONNECT」ボタンをクリックしてPicoを接続する
  5. 「START」ボタンをクリックしてプログラムを動かす

これで、PicoのLEDが点滅したので、Lチカ成功ということになりました。作成したプログラムは、「DOWNLOAD」をクリックするとPNGファイルとして保存することができます。CREATIVEモードのトップ画面に「IMPORT PROJECT」ボタンがあるので、これをクリックしてPNGファイルとして保存したものを読み込むと保存したところから編集作業をすることができます。仕組みとしてはとても面白いと思いますし手軽にできるのがよいと思うのですが、Google Chromeで日本語に翻訳しても部分的にしか日本語にならないので、小学校の授業で使うのは難しいかもしれません。
#プログラミング部分については、「ビジュアルプログラミングで Raspberry Pi Pico が扱える「Piper Make」を軽く試した時のメモ(Maker Pi RP2040 でも試す)」を参考にしました。

【追記】これまでのPicoでのプログラミング(フィジカル・コンピューティング)に関する拙Blogの記事もご覧ください。(2024.11.4←これからも適宜更新していきます)

2024年11月17日日曜日

Raspberry Pi Picoのプログラミングに挑戦〜ビジュアルプログラミングで音楽演奏ができるのか

以前の続きです。Raspberry PiでプログラミングをしてRaspberry Pi Picoをコントロールすることにチャレンジしていますが、これまで、MicroPythonThonnyを使用)でのプログラミングに挑戦して、Lチカの次に音楽演奏までやってみました。次のステップとして、Lチカのときと同じようにビジュアルプログラミングでも音楽演奏ができるのか試してみたいと思います。今回もRPi 3RPi 400を使ってやってみようと思ったのですが、普段使っているMacBook Proで確認してからRaspberry Piでやってみることにしました。

〈Piper Makeの場合〉
Picoのビジュアルプログラミングに特化した「Piper Make」ならばきっとできると思い込んで、半ば楽観的な気持ちで試し始めたのですが、それらしいブロックを探していくうちに段々と雲行きが怪しくなってきました。「#Value」の中に「note[A4]」(音階を選ぶことができる)を発見してぬか喜びをしてみたり、「duration[sixteenth]」(音符(音の長さ)を選ぶことができる)と組み合わせてできることがないかと試行錯誤してみたりしましたが、どれもうまくいきませんでした。いくら探してもGPIO PinにOUTする方法が見当たらないのです。

もしかしてと、いつも使っている「CREATIVE」モードではなく「STORY」モードにそれらしいものがあるのではないかと考えて探してみました。Piper Makeを開いた画面の下側に「EXPEDITION TELEPORT MENU」というメニュー一覧があり、デフォルトが「BASE」となっているのですが、その中から「SENSORS」を選ぶと音楽に関係しているようなSTORYが現れます。(「SHOW ALL」をクリックしても見つけられます)これを使って音楽を演奏させてみると、MacBook Pro(PCなどでやっても同じです)から音が出ました。この方法だと、Picoはセンサーとして働くようにプログラムするようになっていて、Picoにスピーカーをつないで音を出すという当初の目的は達成できないことになります。

どうもこの辺りで手詰まりとなってしまいました。

〈BIPESの場合〉
気を取り直して、Picoのビジュアルプログラミングで以前使ったことのある、「BIPES」でスピーカーから音を出すプログラムが作れないかやってみます。BIPESは、Picoに限らずさまざまなマイコンボードに対応しているビジュアルプログラミング環境です。ESP8266系のマイコンボードやESP32系のマイコンボードにも対応しているし、中には、私も持っているものもあります。(そのうち動作確認してみたいと思っています。思っています)また、M5Stackmicro:bitにも対応しているので、英語表記の精神的な壁を乗り越えてしまえば、かなり使えるツールだと思います。

そう思って確認していくと、選択するマイコンボードによって使えるメニューやブロックが変わるということがわかってきました。マイコンボードを選択する窓で、先述のESP…やM5…などのマイコンボードを選んだときには、「Outputs/Actuators」というメニュー項目が現れて、「Sounds」メニューから音(音楽)を鳴らすブロックを選択することが可能になるのですが、Arduino系のマイコンボードやPicoを選ぶと、「Actuators」だけのメニュー項目に変わってしまい、「Sounds」メニューは出てこなくなります。うぅむ、一筋縄ではいかないですね。

仕方がないので、Thonnyで作ったMicroPythonのプログラムを基に、GPIO PinにPWMを出力するブロックがないか探しました。「Machine」メニューの中に「In/Out Pins」というメニューがあり、その中に「RPi Pico PWM…」というそれらしいものが見つかりました。とりあえずこれを並べてみれば音楽演奏っぽいことができそうだと当たりをつけてやってみました。作ったプログラムは、以下のとおりです。

第一段階として、こんなプログラムで音楽演奏ができることはわかりました。とは言え、プログラムとしては、正直にいうとスマートとは言えないなぁと思ってしまいました。また、Frequencyに入力する数値は、整数値しか受け付けないようで、無理やり整数の近似値を入れているので、出てくる音にも違和感があります。これをベースにしながら、よりスマートに応用範囲の広いプログラムに改良していきたいと考えています。

〈関連情報〉
下準備として、PicoでMicroPythonが使えるようにするファームウェアの設定作業は、過去の拙Blogの記事を参考にしてください。公式WebサイトのPicoでMicroPythonの情報もご確認ください。

2024年11月2日土曜日

Raspberry PiでRaspberry Pi Picoのプログラミングに挑戦〜圧電スピーカーをつないで音を出す

以前の続きです。Raspberry Piでプログラミングをして、Raspberry Pi PicoをコントロールしてLチカする実験をしましたが、次のステップとして、「音を出す」ことに挑戦したいと思います。今回もRPI 3RPi 400を使ってやってみます。まずは、MicroPythonでできるかやってみようと思いますが、RPi 3では「Visual Studio Code」が使えなかったので、「Thonny」だけでやってみることにします。
#下準備として、PicoでMicroPythonが使えるようにするファームウェアの設定作業は、過去の拙Blogの記事を参考にしてください。公式Webサイトの情報もご確認ください。

まずは、Thonnyを起動して作業開催。既に様々な設定が終わっているので、すぐにプログラムを書き始めます。今回は、@undo0530さんの「Raspberry Pi PicoでMicroPythonでPWM信号でスピーカーでメロディー演奏」を参考にしながら、曲を演奏するMicroPythonプログラムを書きました。内容は以下のとおりですが、ファイル名は任意で決めていただいて構いません。

from machine import Pin, PWM, Timer
speaker = PWM(Pin(17, Pin.OUT))
led = Pin(25, Pin.OUT)
ahz = 440
A4 = ahz
B4 = ahz * (2 ** (2/12))
C5 = ahz * (2 ** (3/12))
D5 = ahz * (2 ** (5/12))
E5 = ahz * (2 ** (7/12))
F5 = ahz * (2 ** (8/12))
G5 = ahz * (2 ** (10/12))
A5 = ahz * 2
mspb = 400
melody = [C5,0,C5,0,G5,0,G5,0,A5,0,A5,0,G5,0,0,0,F5,0,F5,0,E5,0,E5,0,D5,0,D5,0,C5,0,0,0]
i = 0
def beat(timer):
global melody
global led
global i
global speaker
if i >= len(melody):
speaker.deinit()
led.value(0)
timer.deinit()
elif int(melody[i]) == 0:
speaker.duty_u16(0)
led.value(0)
else:
speaker.freq(int(melody[i] + 0.5))
speaker.duty_u16(0x8000)
led.value(1)
i += 1
tim = Timer()
tim.init(period=mspb, mode=Timer.PERIODIC, callback=beat)

ScratchMicrosoft MakeCodeのように、はじめから音階が用意されていないので、PWMで作らなければなりません。そのために、使う音名に12平均律の各音の周波数を計算して入れて、メロディとして並べて演奏するプログラムにしています。「0」は、休符です。

このプログラムを作る過程で、MicroPythonでの「べき乗」や「累乗根」の計算式の書き方を学びました。各音の周波数値を決めるために近似値を使わずに計算式で計算をさせるプログラムにしたのは、(内部処理によって計算精度が微妙に違うかもしれませんが)できるだけ「正しい12平均律」に近づけたいと思ったからでした。実験した圧電スピーカーとPicoは以下のとおりです。(Seriaで購入した小さなモニタスピーカー模型?に圧電スピーカーを仕込んであります)

プログラムを書き終えてから、PicoをUSBケーブルでRPiにつなぎ、認識された(認識がうまくいかない場合は、一度「Stop/Restert backend」ボタンをクリックすると認識される)ところでRUNボタンをクリックすると、無事にメロディが鳴ってくれました。(「きらきら星」です)RPi 400でもRPi 3でも問題なく、音程も思った通りで「楽器」としても面白いものができた感じになりました。今回取り組んだ「周波数から音階を作る」という作業は、とても面白いと思いました。一方で、もう少しスマートな書き方ができないものかと思案しています。

〈参考資料〉

【追記】これまでのPicoでのプログラミング(フィジカル・コンピューティング)に関する拙Blogの記事もご覧ください。(2024.11.4←これからも適宜更新していきます)

2025年2月3日月曜日

12平均律を鳴らすプログラムについて考える

これまでの続きです。Raspberry Pi Picoを使って、音を鳴らすこと(楽曲の演奏)ができるところまではやってみましたが、これも以前IchigoJamで「(PC用)キーボードを鍵盤のように使って音楽の演奏をする」ことにチャレンジしたように、各キーに任意の音を割り振って楽曲の演奏ができるようにすることができないか、そのプログラムはどう書いたらよいのかということについて考えています。

キーボードの各キーに1音1音を割り当てるのは、力技ではあるものの可能であることは想像ができます。しかし今回は、できるだけスマートにプログラムを書くことを目標に考えていきたいと思っています。そのため、「12平均律の式をプログラムに活かす」ことを目指し、12平均律の仕組みや音の周波数はどのような式で表せるのか、そしてそれをプログラムとして書き表せるのかを検証することにしました。
#以下、わかっている人には当たり前の話が続きます。広い心でご覧ください。(^^;;;

はじめに、「A*2^(n/12)」を使って12平均律の音階をExcelでグラフ化してみました。(「A=440」としてセルに入力した値を参照させ、nはAを0としてAから半音上を1、全音上を2…と表したセルを参照させた)すると、見覚えのある曲線のようなものが見えてきます。すっかり忘れていたので、記憶を頼りに「〇〇曲線」とか「〇〇関数」とか、いろいろなキーワードでGoogle先生に尋ねてみました。

すると、当たり前ではありますが「y=a^x(aのx乗)」の描く曲線にたどり着きました。「指数関数」というやつですね。昔学んだことを思い出してきました。以前にPicoで音を鳴らしたときのMicroPythonでのプログラムの中に、「ahz*(2**(2/12))」や「ahz * (2 ** (3/12))」のような表記をしましたが、「ahz」がA4の周波数を表していて、それに「2の(2/12)乗」や「2の(3/12)乗」をかけるという計算をしています。もう少し汎用的な式で表すと「A[i]*2^(n/12)」というような式になると思います。「i=4」なら「A[4]=440」、「i=3」なら「A[3]=220」となるようにプログラムして、「n」の値を「0」〜「12」までの数値で変化させれば、音階に必要な周波数が得られると考えました。

Excelで作った表には、以前紹介した「12平均律と周波数」で示されている数値と同じ周波数値が並びました。第1段階はクリアできました。しかしこれだと、A[i]の値をいちいち用意しなければなりません。そこで、「A[i]*2^(n/12)」(0≦n≦12)という考え方を改めて、初項の「ahz=440」だけを決めて、「ahz*2^(z/12)」(z=整数)という数式で考えることにしました。「z」には、12を超えた数を入れたり、0よりも小さい負の数を入れたりしても、「A4=440Hz」からの音階的な距離(1あたりの変化量は半音)で表現できることがわかり、実際にExcelで表を作って平均律の周波数を得ることができることも確かめました。

MicroPythonでのプログラミングでは、「ahz*(2**(z/12))」のように表現すればよいことになります。この関数に、「A4」の距離を「0」として、そこからの音階的な距離を表す数値「z」を入れると目的の周波数が得られることになります。これならば、「ahz=442」にしたとしても、12平均律を簡単に作ることができるはずです。

試しにプログラムを作ってみているのですが、どうもうまく動かなくてまだ試行錯誤中です。うまくいったら、失敗の原因も含めてお知らせできればと思っています。

2025年7月25日金曜日

本棚に入るドールハウスを作ってみる〜準備から作り始めた手応え

以前から、「箱庭的な世界観」には強い魅力を感じていて、それこそ「ジオラマ」は大好物な部類に入ります。しかしながら、作ったところで飾るところもないし、大好きな城のプラモデルすら組み立てられずに「大切に保管」されている有り様。作っても邪魔な大きさにならず、それでいて作り上げた満足感と出来上がったあとの実用性を兼ね備えたようなものがあればと思っていたところ、ドンピシャなものを見つけてしまいました。「Book Nook(ブックヌック)」というらしいのですが、「本棚に入るドールハウス」として一部で話題になっていたようで、Amazonで見つけて衝動買いをしてしまいました。
#「Book Nook」が一般名詞なのか商品名なのかはイマイチよくわかっていません。

これを見たとき、直感的に「フィジカル・コンピューティングに使えるのではないか。」と思いました。この本棚ドールハウスにはLEDを仕込むことができて、本棚に入れて暗くなっても中を見ることができます。ということは、Raspberry Pi Pico系のものやArduino系、micro:bitなどのマイコンボードを仕込めばもっといろいろな表現ができるのではないか、音を鳴らしてみたり、中の物を動かしてみたりと、フィジカル・コンピューティングを含む電子工作の素材や改造ベースとして使えるのではないかと思ったのでした。

とは言え、初めてのチャレンジでもあり、写真や文章だけでは情報が足りず、実物で確かめてみようと考えてAmazonでセールをしていたものをいくつか購入してみました。そのうちの1つで一番シンプルそうなもの(「Bakery Shop」風のもの)を選んで作る準備を始めました。今回購入したものは中国製で、中国から日本の代理店のようなところが輸入して販売しているようです。日本語の案内書のようなものは付属していましたが、肝心の説明書は全て中国語表記だったので、写真を見ながら想像力を働かせてどうにか組み立て作業を進めることにしました。

まずは道具の用意から。細かな作業をするためにピンセットやデザインナイフ、スチール定規、ハサミ、工作マット、木工用ボンドなどの道具を用意していきました。

シンプルとは言え、やはり小さなものを組み立てていくので、精度にはそれなりにこだわらないといけないと思います。よく考えたら、自宅にあるハサミは精密な作業に向いているものがなく、紙工作用のハサミを購入するところから始めました。今回購入したのは長谷川刃物RMF-170KDSB-100です。

さて、準備ができたので作業を開始します。説明書に従って、手始めにデクスチャーシートを木製(MDF材を含む)に貼り付けます。セメダイン社の木工用速乾ボンドを使用しました。スポンジ刷毛を使って(少々の水分を含ませて)木材側にボンドを薄く塗ってテクスチャーシートを貼り、おもしを乗せて圧をかけて接着します。テクスチャーシートとのズレは0.2~0.3mm程度でしたが、組み立てる前にハサミで切った方が良さそうでした。

次に、細かな部品の中で、フェルト生地を使って部品を作る作業をやってみました。説明書には、型紙を使ってフェルトを切り取り、別に切り取ったテクスチャーを貼り付けるような手順が書かれていました。そこで、私が考えた手順は以下の通りです。

  1. 型紙に両面テープを貼り付けて、フェルト生地に仮付けする。(「はがせる両面テープ」を使用)
  2. 型紙に沿ってフェルト生地を切り取る。
  3. 型紙をはがしてフェルト生地にテクスチャーをボンドで貼り付ける。(工作マットで上下から挟んでおもしを乗せて圧着する)

はがせる両面テープでも長時間放置するとはがれにくくなるので、切り取った後は、貼り付けた型紙をできるだけ早くはがした方がよいと思います。

実は、はじめからテクスチャーを貼り付けて切る方法でもやってみたのですが、型紙よりもテクスチャーの方が余白が広く、その分フェルト生地を多く消費してしまうという問題がありました。試しに、いくつかの部品を型紙を使わずにやってみました。やってみて思いましたが、テクスチャーの紙は型紙の紙より硬いので、フェルトに貼り付けた状態だと切りにくいという問題があるのかもしれません。

この後も様々な部品を作っていきましたが、説明書のとおりに作っていくだけなので取り立てて難しいことはなく、ひたすら地味な作業をこつこつと行っていく感じです。正直なところ、完成図を見てちょっと変更したいところもあるので、どのあたりから改造を始めるか(一度全て完成させてからとか、飾りつけを省いて大枠を作ってしまってからとか…)考え中です。続きは後日ということにします。