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年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月2日火曜日

中古で買ったアンプ内蔵の大きなウーファースピーカーシステムを試す

先日ふらっと立ち寄ったHARD OFFで大きなウーファースピーカーを見つけてその場で詳しく調べてみたところ、ビズライフという会社が取り扱っているX-BEAT(←ブランド名?)のDSP-2810BK(ブラック)というアンプ内蔵のウーファースピーカーシステムだということがわかりました。付属の左右スピーカーが別のものとセットになっているような感じで置いてあったので、とりあえず一緒に並べてしばらく眺めてみました。

中央の大きなウーファースピーカーは、インパクト大で使ってみたいと思えました。ただ、スピーカーユニット自体は、口径が10cmしかなく、周りの白色のプラスチックの縁(内側に青いLEDが仕込まれていた)を含めて16cmくらいになるので、一見すると口径16cmのスピーカーユニットのように見えて、迫力のある低音が期待できるような印象を与えようとしているようにも見えます。それから、左右スピーカーの1つに分解しようとして失敗したような傷があり、音が出るという点では問題ないものの、難アリの中古品(ジャンク手前)だったのです。買おうかやめようかと迷ったのですが、ウーファーの音も確かめてみたいし、エンクロージャーなら自分で作ってしまえばよいと考えて購入することにしました。

自宅に戻って、いつものようにLinux Mintで動かしている自作PCにつないで音を確認したところ、うるさいくらいに低音が響くスピーカーシステムだということがわかりました。曲によってはこのくらい低音が響いた方が良いこともあると思いますが、好みは分かれるところではないかと思いました。このスピーカーシステムは、アンプ内蔵で低音と高音のバランス調節ができるので、曲によって調節しながら使うのもありではないかと思いました。否、音楽を聴くというより映画を観るような用途で使う方が良いかなと思いました。

それ以上に問題だと思ったのは、とにかく明るいこと。青色のLEDが内蔵されていて常時点灯しているのですが、これが気になるくらいに明るいのです。中央のウーファースピーカーについているLEDには、白色半透明のカバーがかかっているのでそれなりに光が抑えられているのですが、左右のスピーカーは、透明なプラスチック筐体に黒いプラスチックでカバーがしてあって、透明部分から青い光が漏れてくるような作りになっています。PCのモニタ裏にウーファースピーカーを置いて、モニタの両脇に左右スピーカーを置くような使い方をすると考えると、画面を見ながら音楽を聴いたり映像を観たりする際に、光が気になって音楽や映画の世界に没頭できない気がしたのです。
#前のオーナーさんは、うるさすぎる低音かまぶしいLEDのどちらか(あるいはその両方)を改善しようと試みるも、うまく分解できずに断念したのではないかと推察しました。

まず、壊れかけた筐体からスピーカーを取り外して回路をたどって音声信号だけをスピーカーにつなげるようにしてから、エンクロージャー作りに取りかかりました。DAISO300円スピーカーによく似ていて、それよりも少し小ぶりなスピーカーが左右に2つずつついています。エンクロージャーは、いつものようにDAISOで扱われている木製の箱(容積にして大体1.3Lくらいのもの)を活用することにしました。また、このスピーカーにはもともとパッシブラジエータのようなものがついていて、低音重視なのがわかっています。それに習って、バスレフポート付きのエンクロージャーを作ってみました。

左右は同じように作ってありますが、2つのスピーカーの位置関係を90度に配置して、音の広がりを意図するような作りにしました。(2つのスピーカーユニットの内、片方のスピーカーユニットの+/-を逆に接続すると位相が逆になって音が小さくなるかもしれないとか、いろいろな実験の素材として面白いかも)実験的な意味合いもあって、底面をふさがずにオーディオボードの上に置くだけで閉じているので、持ち上げると音が響きにくくなります。現状では、十分に満足できる音を得ることができていますが、新しいアイデアを思いついたらまたいじり始めるかもしれません。