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月10日日曜日

自作スピーカーと2.1chアンプでスピーカーシステムを組んでみる

これまでいろいろなスピーカーを作ってきましたが、はじめの頃に作った試作品はあまり使うこともないし邪魔なので処分してしまおうかとか、バラして使えそうな部品だけ取ってしまおうかとかと思いながら、しばらく思案しておりました。周波数分割器や2.1chアンプ(ZK-MT21YouTube動画)があるので、これらと組み合わせたらどんなものができあがるだろうかということが気になってしまい、とりあえずやってみることにしました。

着想のスタート地点は、以前の記事で紹介した(3番目のスピーカー=5cm,8Ω,0.5W)「低音すかすか」なスピーカーが「ツイーターとしてなら使えるのではないか」と思ったところでした。これに在庫しているスピーカーユニットを適当な箱に入れたものを組み合わせて2 Wayスピーカーのように組んでみてはどうかと思いました。さらに、これも以前の記事で紹介したサブウーファーを組み合わせて2.1chのスピーカーシステムにするという計画です。使用するスピーカーユニットは以下のとおりです。

  • Amazonuxcell←Amazonのストアページ)で購入した、詳細不明のフルレンジ(8Ω0.5W)を謳った薄っぺらいスピーカーユニット(2個1,100円税込)をツイーターとする。
  • 秋月電子通商の店舗で購入した、「F02408H2(8Ω10W)」という北日本音響製の広帯域用(フルレンジ)77mmスピーカーユニット(1個300円税込を2個)を中低音域用とする。
    #YouTubeでもよく取り上げられているコスパのよいスピーカーです。
  • Amazonで4,300円くらいで購入した、Dayton Audioの「TCP115-4(4Ω40W)」をサブウーファーとする。

2.1chのアンプ=ZK-MT21には、サブウファー用の出力は独立してありますが、左右のスピーカー出力は、それぞれ1つずつしかありません。ここに、Amazonで見つけた2 Wayスピーカー用の周波数分割器(クロスオーバーフィルター)をつないで高音と中低音に分割することにしました。Amazonの商品ページに書かれていた情報は、以下のとおりです。

周波数応答:48Hz〜20KHz
インピーダンス:4-8オーム
定格電力:80W

以前の記事で取り外し可能なエンクロージャーを作ったときに使ったものと同じ周波数分割器です。素性や詳しい仕様がよくわからないので具体的な商品紹介は控えます。

結論としては、「低音すかすか」スピーカーでもツイーターとしては使えそうだけれど、そこまで劇的に変化するほどの効果はなくて、高音の音の広がりをちょっとだけ足したい場合に追加するのもありかな程度と感じました。例えば、音域が広く音数の多いオーケストラのような楽曲を聴く場合には、あった方が良いかなと思いました。
#ツイーター専用を謳ったスピーカーユニットを使った場合は、どうなるのかを聴き比べたいところです。

#2.1chのアンプ=ZK-MT21(右側)からの出力を周波数分割器に入力して、Bassと Trebleに分割して、それぞれのスピーカーへ出力しています。

副産物的な気づきとして、それぞれのスピーカーをバラバラに設置できるので、置き方や向きなどの要素を変化させて聴き比べることができることもわかりました。配線がごちゃごちゃして見た目が悪いところは難点ではありますが…。

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←これからも適宜更新していきます)

2024年10月20日日曜日

スピーカー実験用の取外し可能なエンクロージャーを用意する〜ジャンク品で2 Wayスピーカー用を作る

前回の続きです。スピーカーの実験用として、様々なスピーカーユニットを付け替えて使えるようなエンクロージャーを作ろうと思いたち、サブウーファー用のエンクロージャーを作ったところまでが前回の話でした。今回は、2 Wayスピーカー用のエンクロージャーを作ってみたいと思います。既に2 Wayスピーカー用のエンクロージャーは自作したことがありましたが、今回は、スピーカーユニットを取り外せるようにした使いまわし可能なエンクロージャー作りに挑戦してみます。

以前の記事で紹介したウーファー用スピーカーユニットを買ったときに、同じHARD OFFVictorUX-Q1-Sに付属していたはずのスピーカーのみ(SP-UXQ1-S)がジャンク扱いで550円(税込)で店頭にあるのを見つけたので、これも合わせて購入していました。これに、Amazonで見つけたツイーター(uxcell取扱商品でインピーダンスが4Ωで出力350W程度(同じようなものがあちこちに出品されている)で詳細不明=購入時は2個セットで990円税込だった)と以前にサブウーファーとして使ってみたこともある秋月電子通商で購入した「DXYD104W-60P-8A-F」という8Ωのスピーカーユニット(1個490円税込)を入れてみることにします。
#このVictorのスピーカーは、もともと最大入力20Wでインピーダンスが4Ωの2 Wayスピーカーだったようです。

まず、SP-UXQ1-Sの前面についているサランネットを取り外し、サランネットの固定とスピーカーの保護を兼ねて付けられていたプラスチックの枠を取り外して、ネジ止めされていたスピーカーユニットを外しました。片方のスピーカーユニットのコーン(素材はプラスチックに近い感じ)がバキバキに割れていて、使い物にならなそうだったので修理を諦めて処分しました。使えそうなスピーカーユニットの方はストックしておくことにして、筐体だけの状態にしました。

筐体の素材は15mm厚程度の合板で、シルバーで塗装(?)されています。プラスチックの枠を外したあとのバッフル面に空いていた穴をパテ埋めすると同時に、サランネットを取り付けるためにプラスチックの枠についていたゴム部品を外してこの穴に埋め込んで、サランネットの使い回しを可能にしました。(サランネット自体は、洗剤でつけ置き洗をしてきれいにしました)

筐体背面には、秋月電子通商で購入してたプッシュターミナル(仕様かどうかはわかりませんがバナナプラグも挿せる)を取り付けて、スピーカーユニットとの配線も平端子でつなげられるように加工しました。

バッフル面のスピーカーユニットが取り付けてあったネジ穴に、5.0mmのドリルで貫通穴を開けてステップドリルで6.0mmまで穴の手前側を広げます。そこにM4のボルトが入る鬼目ナットをねじ込んでいき、板(バッフル面)とフラットになるようにします。これで、スピーカーユニットの固定は、M4のボルトで簡単にできるようになりました。音漏れが心配なら、隙間を埋めるテープなどを使って密着性を高めてもよいと思います。

スピーカーを2 Wayにするためのネットワーク回路は、スピーカーユニットを交換できるようにすることを考えて、Amazonで見つけた周波数分割器をエンクロージャーの中に仕込んで、これも各スピーカーユニットに平端子で接続できるようにしました。Amazonの商品ページにあった情報は以下の通りでした。

〈WEAH D224〉

80W 2ウェイ Hi-Fiオーディオ スピーカークロスオーバーフィルター
最大電力:80W
周波数応答:48 hz-20k hz
インピーダンス:4-8Ω
対象:8インチ未満のスピーカー

#以前の自作2 Wayスピーカーを作ったときの周波数分割器には、100V6.8μFの電解コンデンサが1つだけ付いていましたが、今回使ったものには100V3.3μFのコンデンサが2つ取り付けられていて、1つはローパスフィルタのコイルと並列につながっていました。

スピーカー試聴のためにエンクロージャーを作ったはずなのに、この構成が思いの外よい感じに出来上がってしまって、今はアンプのテスト用に使ってしまっています。スピーカーユニットが簡単に取り外せるようになっているので、気になるスピーカーユニットを手に入れたら交換して試用してみたいと思います。

2024年10月14日月曜日

スピーカー実験用の取外し可能なエンクロージャーを用意する〜まずはサブウーファー用から

このところ、スピーカー沼にハマっているところですが、チープな趣味に走る傾向があるためにいわゆる「普通のハマり方」とはちょっと違う方向に向かっている感じがするところです。問題は、これ以上スピーカーを作って増やしすぎると狭い自室がより狭くなってしまい、作ったものを置く場所もなくなるということ。とは言え、実験してみたいことはそれなりにあるし、様々なスピーカーユニットを買ってしまうとやはり試してみたくもなります。
#同様の趣味の方が一定数いらっしゃるらしく、この分野を「プアオーディオ」と呼ぶ方もいらっしゃるようです。

そこで、簡単にスピーカーユニットを取り付けたり外したりできるようなエンクロージャーを作ろうと考えて試行錯誤してみることにしました。すぐに思いついたのは以下の2つ。

  1. ちょっと大きめのエンクロージャーを自作するか購入するかして用意する。
    1. 前面のバッフル部分だけを丸ごと取り外しできるように加工して、スピーカーユニットをバッフル板に固定しておいて簡単に交換できるようにする。
    2. 前面に大きめの穴を空けておいて、別の板(これがバッフル板になる)にスピーカーユニットを固定し、大きめの穴をふさぐように板ごと固定する方法でスピーカーユニットを簡単に取り外せるようにする。(a.よりバッフル板を小さくできる)
  2. ジャンクのスピーカーを購入して中のスピーカーユニットを取り外して筐体(箱)だけを使う。

この2つについて、どのように進めていくか考えて材料を集めてみることにしました。

1つ目のエンクロージャーは、自宅にあった板材を使おうか既製品を購入しようか考えていたときに、Amazonで安価になっているものを見つけて購入することにしました。1辺が200mm弱の立方体に近い形のエンクロージャー(2個セット)で、前面に160mmスピーカーが入る大きな穴があり、背面にバスレフポートとブッシュ式のスピーカーターミナルも付いていました。購入して確認すると、筐体は15mm厚のMDF板ですが、筐体全体が荒いフェルトのような生地でおおわれていました。作りとしては値段相応な感じで、側面の板にへこみがあったのも安くなっていた理由ではないかと思います。板のへこみを補正しつつ、接合が甘いところがあったので補修することにしました。

次に、前面に空いている大きなスピーカー穴(6.5 inch(約16.5cm)サイズ=いわゆる「ロクハン」と呼ばれるサイズ)は、その上からバッフル板でふさぐような構造にして、バッフル板に取り付けたスピーカーをバッフル板ごと付け替えることで、様々なサイズ・種類のスピーカーを装着して試用・試聴できるようにすることにしました。バッフル板は、自宅に在庫していた10mm厚の軽い板材を使用しました。このバッフル板を固定するために、前面に鬼目ナットを埋め込んでM4のボルトで止められるようにしました。内部の配線は、平端子を使ってつなげることができるようにスピーカー用のワイヤーを加工しました。

試しに、以前紹介したDayton AudioDS115-8を取り付けてどのような音になるのか確認してみました。

パワーアンプは、これまでの実験でもよく使っているBluetooth対応2.1chパワーアンプ「ZK-MT21(←YouTube動画)」を使いました。サブウーファー専用のスピーカーとしてTCP115-4作ったものと聴き比べてみましたが、低音の輪郭がはっきりしているような印象でした。しばらく視聴していると今回作ったエンクロージャーの方は、より低音が強調される楽曲では筐体の共鳴が耳障りに聴こえるようになりました。音の発生源を調べてみると、バッフル板を固定しているボルトをしっかり締めないと、バッフル板が振動してしまうことがわかりました。増し締めをしたらほとんど振動音がしなくなりました。密着性は大事ということです。

長くなってしまったので、2つ目の方は次回にします。

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年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←これからも適宜更新していきます)