【令和5年最新版】PicoRubyとラズパイピコでLチカする方法(Lチカだけじゃないよ)

hasumikin is a programmer.


みなさんこんにちは。 マイコンのLチカと言えば、パソコン(パソコンとは)のHello Worldのようなものです。 気軽にLチカをお試しいただけるPicoRubyじゃないと、いつまで経ってもマイクロパイソン先輩に追いつけません。 そこで今回は、気軽にLチカするチュートリアルをお届けします。

環境構築

下記のリンクからR2P2の最新版uf2ファイルをダウンロードして、ラズパイピコ(Raspberry Pi Pico)にインストールしてください。 インストール方法がわからない場合は、ググってください。

https://github.com/picoruby/r2P2/releases/

それから、お使いのパソコンにターミナルエミュレータをインストールしてください。 WindowsならTera Termがよいでしょう。 LinuxならGTKTermがおすすめです(cuやminicomは改行コード設定に難があるのでNGです)。 筆者はmacOSについてはわかりませんので、各自お調べください。

起動

ラズパイピコとパソコンをUSBケーブルで接続してください。 そして、ターミナルエミュレータを起動して、つながりそうなシリアルポートを適当に選んでください。 で、下のような画面が表示されたら勝利です(文字の色やフォントファミリは、環境設定に依存します)。

ふたつほど質問されますが、両方とも n と回答しておいてください(これについては後述します)。

必要に応じてターミナルの改行コードを変更してください。Tera TermならAUTOでよいでしょう。

Lチカ!

R2P2の起動直後は、なんちゃってUnix風シェルが起動しています(これについては、もうちょっと開発が進んだら解説記事を書きます)。 きょうのところは irb コマンドを入力してIRBを起動してください。

(プロンプトが $> ではなく irb> になったことをしっかり確認してください!)

起動したら、以下のプログラムを1行ずつ入力してください:

pin = GPIO.new(25, GPIO::OUT)
pin.write 1

いかがでしょうか? ラズパイピコに載っているLEDが点灯したら成功です。

(ちなみにラズパイピコW(Raspberry Pi Pico W)のオンボードLEDはちょっと違う仕組みになっており、PicoRubyがまだ対応していません)

下のプログラムでLEDが消灯するはずです:

pin.write 0

では、連続してチカチカさせましょう:

while true
  pin.write 1
  sleep 1
  pin.write 0
  sleep 1
end

1秒ごとに点灯と消灯を繰り返せば大成功です。 やったね!

Ctrl-C を押せば無限ループが止まります。 止まらないようでしたら、R2P2のバージョンが古いかもしれません。

Lチカだけじゃない

せっかくなので、ADCも試してみましょう。 RP2040はチップ内に温度センサを内蔵していて、ADCからその値を読むことができます。 以下にプログラムの全体を示します:

require 'adc'

def cal_temp(val)
  27 - (val * 3.3 / (1<<12) - 0.706) / 0.001721
end

adc = ADC.new(:temperature)

while true
  puts cal_temp(adc.read)
  sleep 1
end

1行目の require 'adc' は必須です。 Lチカのときはgpio gemをrequireしませんでしたが、R2P2起動時にすでにrequire済みだったからです。

長い行はコピペするとよいです。 いちどに複数行をペーストするのは、失敗すると思います。 1行ずつペーストしてください。

なにやら温度っぽい値が出力されたら成功です。 RP2040チップを指であたためると、値が変わるはずです。 ちなみにこの温度センサ、ラズパイピコの出荷時点では校正されていないので、実感とだいぶ異なる値が出力されると思います。

I2CやSPIやUARTもあります

R2P2の起動時に聞かれた質問に y と答えられるようなセットアップになっている人は、I2Cなどを使用する準備ができている(かもしれない)人です。 たとえばI2Cであれば、I2C クラスの型定義PRK FirmwareのI2Cトラックボール設定例を見れば、APIがわかると思います。

現在、ペリフェラルAPIのドキュメント整備を手伝ってくれる人を募集中です。 mrubyとmruby/c(もちろんPicoRubyも含む)が、共通のペリフェラルAPI仕様を策定中です。 ので、このドキュメントに貢献するということは、mrubyワールド全体に貢献するのと同じです。

お手伝いいただくにあたって、マイコンには詳しくなくてもよいです(わたくしが適宜お教えします)が、Rubyに慣れている方だと頼もしいです。TwitterGitHubでお声がけください:bow:。 よろしくお願いします~