Raspberry Pi Pico・PiroRubyでLチカする

ラズパイで電子工作やりたいなーと思ってたタイミングでPicoRuby Overflow会議が開催されており、イベントの様子#picoruby256 が楽しそうだったので自分も入門してみる

電子工作は数年前に meishi2を組み立てた をしたくらい。

このスレの目標
- MicroPythonでLチカする
- PicoRubyでLチカする
最終的にはPicoRubyでやりたいけど、情報がありそうなMicroPythonから始めた方がいいのかな〜

Raspberry Pi Picoを買うぞ
秋月電子が親切そうなのでここで探して買ってみる

今回選んだもの
-
ラズパイの種類
- 買った本で利用されており、安くて始めそうなPicoにする
- いずれはサーバー用途としてZeroも欲しい
-
無印か2か
- 違いがよく分からなかったが最新が最高精神で2にしてみる
-
W
- Wifiに繋げたいのでWの方で
-
H
- はんだ付けでつまづきたくないのでピンヘッダーが取り付けられたものにする

せっかくなのでブレッドボードなども買っておく
-
ブレッドボードとジャンパーワイヤー
- ブレッドボードが秋月電子だと本に載っている形のものが売り切れだったので、Amazonでジャンパーワイヤーとセットのものにしてみた
-
温湿度センサー モジュール AHT25
- これははんだ付けいらなそう?

- 抵抗内蔵5mmLED
- 光らせたい
- 20円とかの商品を数個だけ買うの嫌がらせにならないのか?

届いた

光った!
初めてのLチカ
MicroPythonのファ ー ムウェアを書き込んで動かしてる
Thonnyという開発ツールでコードを書いて実行した

Lチカのコードを実行中の場合、Devise is busyでファイルも保存できない
実行を停止してからだとファイルが保存できる
ラズパイのメモリが小さいから?と思ったけど、chatGPTに聞いたらUSBインターフェースの競合やロックの問題っぽい?

Lチカするpythonファイルをmain.pyで保存すると、Picoが電源を入れた時にプログラムが実行される
一度PCの接続を外してもう一度接続したら確かに実行された
今度はPC接続ではなく電源に繋いでも実行された おお
当たり前だけどただのファイルが書き込めるUSBメモリなのではなくプログラムを実行できるコンピューターなんだな
しちゃったの!?「組み込み」ってやつ

- BOOSTELボタンを押して接続するとブートモード
- USBマスストレージデバイス?として振る舞う
- USB経由で接続できる、保存メディアとして使える機器
- USBのプロトコルの一種 Mass Storage Class (MSC)
- finderなどでデバイスが表示される(外付けドライブとしてマウントされる)
- USBマスストレージデバイス?として振る舞う
- BOOSTELボタンを押さずに接続すると通常の動作モードになる
- シリアル通信(REPL)として認識される
- REPL (Read-Eval-Print Loop)
- 入力・評価・出力を対話的に実行できる環境
- Rubyでいうirb
- シリアル通信(REPL)ポート
- REPL (Read-Eval-Print Loop)
- シリアル通信(REPL)として認識される

ラズパイPico W かんたんIoT電子工作レシピ の3章を参考にLEDを光らせてみた。
いよいよ電子工作っぽい
配線図の見本をもとにそのまま配線したので、電子回路や抵抗の話など何もわかっていない。
何もわかっていないけど光ったのでラッキー
己の手で光らせるって楽しいね
これはピンセットが必要ですね。

PicoRubyで動かす

https://github.com/picoruby/R2P2 をpico Wに保存する
R2P2とは
- picoruby/picoruby
- PicoRuby本体
- picoruby/R2P2
-
R2P2 (Ruby Rapid Portable Platform) is a shell system runs on Raspberry Pi Pico written in picoruby/picoruby.
- picorubyで書かれたRaspberry Pi Picoのシェルシステム
-

uf2ファイルを入れても反応しないと思ったらインストールするファイルを間違えてた
Pico2 Wに対応下バージョンを入れたら想定通りアンマウントされた

Macでシリアル通信をする
Pi Picoのデバイス名を確認する
❯ ls /dev/cu.usbmodem*
/dev/cu.usbmodem1201
screen
コマンドでで接続
115200
はデフォルトボーレート(1秒間に何ビット送受信するか)
❯ screen /dev/cu.usbmodem1201 115200
$TERM too long - sorry.
$TERM
が理解できずにエラー
- TERMを一時的に変えてから起動
TERM=xterm screen /dev/cu.usbmodem1201 115200
で起動できた 👌

Starting shell...
$> irb
irb> puts 'Hello world'
Hello world
=> nil
記念すべきHello World
改行が本当に変なのはなんで(PiroRubyのAAも表示されず)

Tutorial short clips をみながらLチカを試みる
irb> led = GPIO.new(25,GPIO::OUT)
=> #<GPIO:0x20016a8c @open_drain=false, @alt_function=nil, @dir=2, @pin=25>
irb> led.write 1
光らない。
GPTに雑に聞いてみたら、オンボードLEDはRP2350(Pico2 W)ではGPIO25で光らないとのこと。
Raspberry Pi Documentation - Raspberry Pi Pico and Pico W
に書いてあるピンは配置を見比べてみると確かに違うRaspberry Pi Pico 2
Raspberry Pi Pico 2 W

Lチカ成功!
CYW43::GPIO.new(CYW43::GPIO::LED_PIN)
で光らすことができた
参考

次にやりたいこと
- PicoRubyでwifi接続もしてみたい
- 何か一つ作品をつくる
- MicroPythonで作る→PicoRubyで動くようにする