初めてのラズパイ(Raspberry Pi Picoで遊ぶ)
随分前に購入していた Raspberry Pi Pico。
開封もせずに放置状態だったんですが、ちょっと触れてみよう、と環境を整えてみました。
※基本の「キ」の話しか書いてませんので、既に使用されている方には何のプラス情報もないと思います。。
Raspberry Pi Pico に触れる

購入していたのは、Raspberry Pi Pico 本体と、ヘッダーピン、USBケーブルがセットになった「Raspberry Pi Pico Basic Kit」というもの。

本体は、およそ5cm×2cmというコンパクトなものです。
実は、ヘッダーピンをはんだ付けするのが面倒そうで長らく放置していたんですが、単純に本体のLEDを制御する、いわゆるLチカだけなら、はんだ付けしなくてもいけるんじゃないの?と、パッケージを開けてみたわけです。
開発環境を整える
現在、業務で使用している開発環境は Visual Studio Codeですので、使い勝手はいいのですが、まずは公式で推奨されている「Thonny」でやってみたいと思います。
このあたりの情報は、既にネット上に山ほどありますので、今さらというところではありますが、ひょっとしたら誰かの役に立つかも、ということでメモしておきたいと思います。
アプリのダウンロード
まずは、ダウンロードから。

この、囲みの中(ウクライナ支援の方ではないです)にある、「Download version 4.1.1 for」の後の「Windows」の上にマウスカーソルを置きます。

一番上の「Installer with 64-bit Python 3.10」のタイトル行にある「thonny-4.1.1.exe」をクリックしてダウンロードします。
インストール
ダウンロードしたインストーラーを実行。

インストールするPCは、基本的に自分しか使用してませんのでどちらでもいいんですが、お薦めされている「Install for me only」を選びます。

セットアップが開始されるので「Next」。

ライセンス契約を受け入れるなら「I accept the agreement」を選択して「Next」。

設定データなどが格納されるエリアの選択ですね。特に支障はないと思いますので、そのまま「Next」。

スタートメニューに追加される名称の設定です。変更の必要はないので「Next」。

デスクトップにもアイコンを置くよう、チェックを付けました。

これらの設定の確認です。問題なければ「Install」をクリックします。

インストールが始まります。PC環境にも依るでしょうが、それほど長くはかかりません。

これで完了です。
選択項目もほぼ無いので、「手順に従ってインストールします。」で良かったかも。。
いよいよ実行…その前に
とりあえず、インストールした「Thonny」を起動します。

Languageは、日本語に変えておきましょう。

起動画面です。
最初にインストールの参考にさせて頂いたサイトには、ここで「MicroPythonのファームウェア(UF2ファイル)を公式サイトからダウンロードする」とあったんですが、ダウンロードページが見つからず、他のサイトを見てみると、特にこの手順は不要なようですね。
でも、公式サイトからのダウンロードが不要、というだけで、MicroPythonのファームウェア(UF2ファイル)をRaspberry Pi Picoに書き込む手順は必要です。
この段階では、まだ、USBケーブルは接続しませんよ。

[ツール]>[オプション…]をクリックします。
[インタプリタ]のタブを開きます。

「あなたのコードを実行するために、Thonnyはどの種類のインタープリターを使用する必要がありますか?」という項目を開きます。

「MicroPython(Raspberry Pi Pico)」を選択し、「OK」をクリックします。

ここで、いよいよRaspberry Pi PicoとUSBケーブルを接続します。
で、「BOOTSEL」の白いボタンを押しながら、PCにUSBケーブルを接続します。

それから、下線の付いた「Install or update MicroPython」の文字部分をクリックします。
「OK」じゃないです。最初、間違えました。。
すると、こんな画面に。

この記載を見たら、手順を間違ってるようにも思えますね。
クリックしてこの画面を出してから、接続するのが正しいような感じがします。

「variant」を「Raspberry Pi・Pico / Pico H」に設定すると、「version」は自動的に入ります。
設定を終えたら「インストール」ボタンをクリック。

下の方にある、短いプログレスバーが動き出します。

「Done!」となったら完了です。「閉じる」をクリックします。
これで、動かすまでの準備が完了です。

動かしてみる
初めてのLチカ
上の画像にある、大きなスペースに、Pythonのコードを書いていきます。
まずはシンプルに、1秒周期の点滅、です。
手っ取り早く、ChatGPTにお願いしてみました(笑)
出てきたソースに手直ししたのが、これです。

import machine
import time
led_pin = machine.Pin(25, machine.Pin.OUT) # 25番ピンを出力ピンとして設定
while True:
led_pin.on() # LEDをONにする
time.sleep(0.5) # 0.5秒待つ
led_pin.off() # LEDをOFFにする
time.sleep(0.5) # 0.5秒待つ
何の手直しかというと、「1秒周期で、ON、OFFを繰り返す」と指示したのに、
while True:
led_pin.on() # LEDをONにする
time.sleep(1) # 1秒待つ
led_pin.off() # LEDをOFFにする
time.sleep(1) # 1秒待つ
でした。
これ、2秒周期です。。
インタープリターでの実行ですので、ソースコードを保存してもいいですし、使い捨てで保存しなくてもいいのですが、せっかくなので、名前を付けて保存。
保存先は、PC にも Raspberry Pi Pico 本体にも出来ます。
それから、緑色の実行ボタンをクリックします。
初めての、Raspberry Pi Pico での Lチカです。
組み込みソフト開発技術者が喜ぶものではないですが…。
PWM周期変動
続いては、10秒かけてPWM周期を0%から100%へと変動させるパターン。
これもChatGPTがサラッと書いてくれました。

import machine
import time
led_pin = machine.Pin(25, machine.Pin.OUT) # 25番ピンを出力ピンとして設定
pwm = machine.PWM(led_pin) # PWMオブジェクトを作成
pwm.freq(1000) # PWM周波数を設定
pwm.duty_u16(0) # 初期状態では0%の出力
target_duty = 65535 # 目標の出力(100%)
duration = 10 # 時間(秒)
steps = 1000 # ステップ数
increment = int(target_duty / steps) # ステップごとの増分
interval = duration / steps # ステップごとの待機時間
for i in range(0, target_duty, increment):
pwm.duty_u16(i)
time.sleep(interval)
pwm.duty_u16(target_duty) # 目標の出力に設定
time.sleep(1) # 目標の出力を維持するための追加の待機時間
pwm.deinit() # PWMを停止
実行コードには、forのループごとに、iの値を出力するよう追記しています。
なぜかというと、最初、ChatGPTが出したソースは、1秒程度で100%に到達して、あれれ?と思ったから。iの値をリアルタイムに出力して、間違いを指摘した後のソースコードが、上のものです。
これも、保存してから緑色の実行ボタンをクリック。
後半は、見た目に輝度は上がっていきませんが、Printで出力した値からは、10秒かけて値がMAXになる様子が判りました。
というわけで、いとも簡単にソースコードを作ってくれたChatGPTと、初めてのRaspberry Pi Picoでの動作確認に感動したお話でした。
本体のLEDだけじゃ、あまりにもつまらないので、今度はヘッダーピンをはんだ付けして、何かを動かしてみたいですね。