2025年2月17日月曜日

Raspberry Pi 5と歴代Raspberry Piの使い道を考える

前回の続きです。約1年前に重い腰を上げて歴代RPiのメンテナンスを行いましたが、Raspberry Pi 5を購入してセットアップしたことをきっかけに、過去のRaspberry Pi(RPi)たちでも快適に使える状態を維持するにはどうしたらよいか考えてみました。Scratch 3などのビジュアルプログラミング環境を活用したい場合には、過去のRPiではかなり重くなりますので新しいRPi 5の出番だと思います。しかし、世代に合わせたOSを入れて、軽い作業のみをするか単一の機能に絞り込むかといった工夫をすれば、まだまだ使い道があるように思います。

以前のメンテナンスの際に歴代RPiで使っているOSを確認しましたが、RPi初代とRPi+はあえて古いOSを残す(ソフトの動作確認や作った環境をキープするため)として、RPi 2以降は新しいOSにしてしまって良いと思っています。中でも、3台もあるRPi 3にはしっかり仕事をしてもらおうかなと。ということで、歴代RPiのメンテナンスをサクッと終わらせて、3台のRPi 3のうち1台を実験台にすることにして、OSのインストールからやってみることにしました。

いつものように、Raspberry Pi Imagerを使って、microSDカードに最新のOSを入れます。Recommendに従って、64 bitのOSを入れることにしました。起動microSDカードをRPi 3に挿して起動すると、思ったよりスムーズに起動してくれて過去のRPiでも快適に動作するような調整がされているのかもしれないと思いました。「$ lsb_release -a」コマンドでOSのバージョンを表示させると「Debian GNU/Linux 12 (bookworm)」となっていました。RPi 5のときと同じように、表示を英語表記から日本語表記に設定して、指示に従って再起動しました。次に、この実験台RPi 3に以下のソフトをインストールしました。

〈「Recommended Software」より〉

〈「Add / Remove Software」より〉

実のところ、RPi 3で最新の64 bitOSがまともに動くとは思っていなかったのですが、しっかり動いてくれたのでちょっと感動してしまいました。職場でデジタルサイネージによる情報発信を考えているのですが、RPiならうってつけだと思っています。(以前の職場でも同じような取り組みをしていたので)私がいる間は、私物のRPi持ち込み(ネット接続は不可)でやってみるという手もあるかなと思っています。その他にも、どんな使い方ができるか考えてみたいと思います。
#5V 3AのUSB電源を使っても、「Low voltage warning」が出てしまうのは、どうしたものかと思っています。

(本当は、Raspberry Pi Zeroの方が、安いし用途を絞って使うには良いと思うのだけど、学校予算で買ってしまったら引き続き使ってもらうのは難しいかもしれないし、後任の負担になるようなことはしたくないし…。一方で、この程度のものを使いこなせないというのも情けないとは思うし、でもそれを強要するのは違うとも思うし…)

2025年2月8日土曜日

Raspberry Pi 5を使ってみる

世界的なインフレ傾向や円安の影響もあってか、価格が上がって気軽に購入できない感じになっているRaspberry Pi 5でしたが、ほぼ全世代のRaspberry Pi(RPi)を購入している私としては逡巡する気持ちもありつつ、発売開始から供給が安定するまでしばらく待っていました。先日、我慢の限界に足して半分衝動的に購入してしまいました。購入したのは、コスパ重視で4 GBモデルにしましたが、Smrazaのアルミのヒートシンク兼ケースと5.1V-5.0A対応のACアダプターも一緒に購入して1.4万円程度でした。(ケースは割引がありました)
#詳しくは、過去のRaspberry Pi関連記事もご覧ください。

OSを入れるmicroSDカードは、自宅に在庫していたKIOXIAの32 GBのものを使うことにして、MacBook Proにインストールしてある「Raspberry Pi Imager」を使ってOSイメージをこのmicroSDカードに焼きました。今回使用するOSは、64 bitのRaspberry Pi OSにしました。焼き上がったmicroSDカードをRPi 5に挿して、モニタ、マウス、キーボード、LANケーブルをつないで起動しました。体感ではありますが、起動までの動作は速くなっているように感じました。ケース付属のFANも静音性が高く、起動後は最小限の動作になるようでしばらく止まっていました。ケース自体がヒートシンクになっているものなので、ぬるめのカイロくらいには温かくなっていました。

さて、起動まではスムーズだったのですが、デフォルトの設定が英語なため日本語に設定を変更したいと思います。デスクトップの左上のRaspberry Piメニューから、「Settings」→「Raspberry Pi Configuration」を起動して、「Localisation」内の「Locale」を「ja(Japanese)」←つまり日本語に、「Country」を「JP(Japan)」←これも日本に設定しました。すると、それに合わせてTimeゾーンも「Asia」「Tokyo」と自動的に変更されました。「Keyboard」の設定は、日本語キーボードになっているかと思いましたが、実際に接続しているUSキーボードになっていました。これは、USキーボードが認識されているのかと思いましたが、よく考えたらRaspberry Pi Imagerで設定されていました(^^;;;。これらの設定を終えて「OK」ボタンをクリックすると、再起動を求められるので指示に従って再起動します。すると、メニューを含めてほとんどが日本語表示に設定変更されました。

確認のため、「$ lsb_release -a」コマンドでOSのバージョンを表示させると「Debian GNU/Linux 12 (bookworm)」となっていました。再起動をしたタイミングでWindow上部のメニューバーにアップデートがあることを示すアイコンが表示されていることに気づいたので、このアイコンをクリックしてアップデート作業を行います。これはかなり時間がかかりましたが、しばらく放置して終わるのを待ちました。途中から、流石にヒートシンク(ケース)が熱くなってきたので、FANも回り始めました。アップデートが終わったところで、「Recommended Software」から以下のソフトをインストールしました。

これらを選択したら、「Apply」ボタンをクリックします。すると、ダウンロードが始まってインストール作業が進んでいきます。これもやはり時間がかかるので、別のことをしながら気長に待ちました。新しい環境なのでちょっと欲ばってインストールしてしまいましたが、何とかインストール作業を終えることができました。続けて、さらに追加したいソフトについて「add / Remove Software」からインストールします。今回追加でインストールしたのは以下のものです。

こちらもソフトを検索してチェックボックスにチェックを入れて、「Apply」ボタンをクリックするとまとめてインストールが始まります。ちょっと違うのは、このインストール作業にはパスワードが求められることです。パスワードの設定は、「Raspberry Piの設定」から「パスワードを変更」を選択して設定することができます。パスワードを設定してインストール作業を終えました。それぞれ動作確認してみましたが、起動については問題なくできました。ここでもやはり動作が速いと感じました。

今回は、RPi 5を使える状態にまでセットアップしましたが、これまでに購入してきている初代からのRPiたちをどのように活用していくかを考えなければならないと思っています。古いものにはより軽いOSを入れて、使い方を限定したら快適に使えるのではないかとか、そうするためのOSの選び方や特化させる機能や使い方をどうするかとか、あえてGUIの環境を捨ててCUIだけ、あるいは、ネットワークからアクセスして動かすだけにしてしまうとか、アイデアはいろいろと出てくるのですが…。

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平均律を簡単に作ることができるはずです。

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