Raspberry pi PicoでLチカしてみた。
Raspberry Pi PicoのオンボードLEDを machineモジュールのPinクラスとtimeモジュールのsleep関数を使い、1秒間隔で点滅させます。無限ループでLEDを点滅させ、Ctrl+Cで中断するとLEDを消灯して終了します。
# main.py
# このプログラムは、Raspberry Pi PicoのオンボードLEDをMicroPythonで制御する
# 簡単なデモです。
# Pinクラスを使ってLED用のピンオブジェクトを作成し、sleep関数でLEDの点灯・
# 消灯の間に遅延を作ります。
# このプログラムは、ユーザーがCtrl+Cで割り込むまで無限に実行されます。
# 1秒ごとにLEDを点滅させ、LEDの状態をコンソールに表示します。
# 必要なモジュールをインポート
from machine import Pin # machineモジュールからPinクラスをインポート
from time import sleep # timeモジュールからsleep関数をインポート
led = Pin("LED", Pin.OUT) # オンボードLEDを出力モードで初期化
interval = 1 # 点滅間隔(秒)
# LEDを点滅させる関数
def blink_led(led, interval):
led.on() # LEDを点灯
print("LED ON") # 点灯状態を表示
sleep(interval) # 点灯状態を維持
led.off() # LEDを消灯
print("LED OFF") # 消灯状態を表示
sleep(interval) # 消灯状態を維持
try:
while True:
blink_led(led, interval) # LEDを繰り返し点滅させる
except KeyboardInterrupt:
# Ctrl+Cが押されたらプログラムを終了
pass
finally:
led.off() # プログラム終了時にLEDを消灯
print("LED OFF") # 消灯状態を表示
print("プログラムを終了します") # プログラム終了を表示
Timer を使ってLED点滅させてみた。
このプログラムは、Raspberry Pi PicoのオンボードLEDをTimer
を使って1秒ごとに点滅させるものです。Timer
はバックグラウンドで動作するため、メインループは空でもLEDは自動的に点滅します。
これにより、他の処理に影響を与えずにLEDの点滅が可能になります。
# blink_LED.py
# LED を点滅させるプログラム
from machine import Pin, Timer # PinクラスとTimerクラスをインポート
class Blinker(object):
def __init__(self, pin_name="LED", interval=1000):
"""
Blinkerクラスの初期化処理
:param pin_name: 使用するGPIOピンの名前(デフォルトはオンボードLED)
:param interval: 点滅間隔(ミリ秒単位)
"""
self.led = Pin(pin_name, Pin.OUT) # LEDピンを出力モードで初期化
self.timer = Timer() # タイマーのインスタンスを作成
self.interval = interval # 点滅間隔を保存
self.timer.init(period=self.interval, mode=Timer.PERIODIC, callback=self.toggle)
# タイマーを初期化し、指定間隔でLEDの状態を切り替える
def toggle(self, timer):
"""
LEDの状態を切り替えるコールバック関数
"""
self.led.toggle() # LEDのON/OFFを反転
# LED点滅を開始するためのクラスインスタンスを作成
blinker = Blinker(interval=1000)
# メインループ(プログラムが終了しないように空ループを維持)
while True:
pass
BOOTSELボタンでLEDを点灯させてみた。
# この例は、Raspberry Pi Pico の BOOTSEL ボタンを使って LED を制御。
# ボタンが押されている間は LED が点灯し、離すと消灯する。
import time
import machine # → machine モジュールを使う必要があります
import rp2 # → rp2 モジュールも BOOTSEL 読み取りに必要
led = machine.Pin('LED', machine.Pin.OUT)
while True:
# BOOTSELボタンが押されているか確認(1 = 押されている)
if rp2.bootsel_button() == 1:
led.on()
else:
# ボタンが押されていないときはLEDを消灯
led.off()
# 100ミリ秒待機(無限ループが速くなりすぎるのを防ぐ)
time.sleep(0.1)
短いコードに挑戦してみた。
#基本のプログラム
import machine
import time
led = machine.Pin("LED", Pin.OUT) # 内蔵LEDを出力として設定
while True:
led.on() # LEDをON
time.sleep(1) # 1秒待つ
led.off() # LEDをOFF
time.sleep(1) # 1秒待つ
import machine, time # モジュールをインポート
l = machine.Pin("LED", 1) # 内蔵LEDを出力として設定(1はPin.OUTと同じ)
while 1: # 無限ループ(while Trueと同じ)
l.toggle() # LEDの状態を反転(ONならOFF、OFFならON)
time.sleep(1) # 1秒待機
from machine import Pin, Timer
led = Pin("LED", 1)
Timer().init(freq=2, mode=Timer.PERIODIC, callback=lambda _: led.toggle())
フェードイン・フェードアウトさせてみた。
from machine import Pin, PWM, Timer # GPIOピン制御、PWM、タイマー用のモジュールをインポート
pwm = PWM(Pin(25)) # GPIO25ピンにPWM出力を設定
pwm.freq(1000) # PWMの周波数を1kHzに設定(ちらつき防止)
# タイマーオブジェクトを作成(一定時間ごとに割り込み処理を実行するために使用)
tim = Timer()
# PWMのコールバック関数を生成する関数(クロージャ)
def get_pwm_callback(duty, direction):
"""
duty: デューティ比(0〜255)でPWMの強さを決定
direction: dutyの増減方向(+1または-1)
"""
def pwm_callback(_):
nonlocal duty, direction # 外側スコープの変数を更新可能にする
# デューティ比を増減
duty += direction
# dutyが上限/下限を超えたら方向を反転
if duty >= 255:
direction = -1 # 減少方向へ
elif duty <= 0:
direction = 1 # 増加方向へ
# PWMのデューティ比を更新(非線形にするためにdutyの2乗を使用)
pwm.duty_u16(duty * duty) # 0〜65535の範囲で設定
return pwm_callback # コールバック関数を返す
# 初期値 duty=0, direction=1 でコールバック関数を生成
pwm_callback = get_pwm_callback(0, 1)
# タイマーを初期化(200Hzで周期的にpwm_callbackを呼び出す)
tim.init(
freq=200, # 200回/秒の周期
mode=Timer.PERIODIC, # 周期モード(1回限りではない)
callback=pwm_callback # 実行する関数を指定
)
参考にさせていただいたサイトです。

【Raspberry Pi Pico入門⓪】無料シミュレータ【WOKWi】
近年、組み込み系プログラミングの入門として安価なRaspberry Pi Picoがよく扱われます。 学習キットや文献も多く販売されており,学習のハードルはかなり低いです。 近年インターネットブラウザ

【Raspberry Pi Pico入門⓪】Raspberry Pi Pico Wのセットアップ【Thonny】
この講座では、Raspberry Pi Pico W を使ってマイコン制御を学んでいきます。 初回のテーマは、電子工作の定番「Lチカ(LEDの点滅)」。 マイコンの基本的な使い方を学びながら、自分でプ

【Raspberry Pi Pico入門①】出力制御の基礎【LED】
前回は学習のための環境を構築しました。

【Raspberry Pi Pico】ロボット制御入門⓪~RaspiPicoの概要と環境構築~【Python】
本コースではマイコンのRaspberry Pi Picoを使って、ロボット制御の基礎を学習します。 LEDを光らせる通称Lチカに始まり、Raspberry Pi Picoで動くロボットを使い、ライント
コメント