スキップしてメイン コンテンツに移動

タイマーで発光ダイオード(LED)を1秒ごとに点滅させる

 ここでは、前回作成した「スイッチで発光ダイオード(LED)を点灯・消灯させる回路」を活用し、LEDを1秒ごとに点灯と消灯を繰り返すプログラムを作成します。回路図などの詳細は「スイッチで発光ダイオード(LED)を点灯・消灯させる」をご参照ください。

タイマーの種類と説明

1.ONE_SHOT:タイマーが一度だけ動作し、指定時間後に処理を実行する。

2.PERIODIC   :指定した周期で繰り返しタイマー割り込みが発生する。

1. ONE_SHOTモード(1回だけ処理)

from machine import Pin, Timer

led = Pin(15, Pin.OUT)
led.value(1)  # LEDを点灯しておく

def one_shot_callback(timer):
    led.value(0)  # 一度だけLEDを消灯
    print("ONE_SHOT: LEDを消灯しました")

timer = Timer()
timer.init(period=3000, mode=Timer.ONE_SHOT, callback=one_shot_callback)
# 3秒後に一度だけコールバック関数を呼ぶ

while True:
    pass  # メインループは空




>>> %Run -c $EDITOR_CONTENT

MPY: soft reboot
ONE_SHOT: LEDを消灯しました


2. PERIODICモード(繰り返し処理)

from machine import Pin, Timer

led = Pin(15, Pin.OUT)

def periodic_callback(timer):
    led.toggle()  # LEDの点灯・消灯を繰り返す
    print("PERIODIC: LEDをトグルしました")

timer = Timer()
timer.init(period=1000, mode=Timer.PERIODIC, callback=periodic_callback)
# 1秒ごとに繰り返しコールバック関数を呼ぶ

while True:
    pass  # メインループは空

>>> %Run -c $EDITOR_CONTENT

MPY: soft reboot
PERIODIC: LEDをトグルしました
PERIODIC: LEDをトグルしました
PERIODIC: LEDをトグルしました
PERIODIC: LEDをトグルしました
PERIODIC: LEDをトグルしました

「トグル(toggle)」とは、**「状態を切り替える」**という意味です。
たとえば、LEDの場合、
・    点灯している状態なら消灯に変える、
・    消灯している状態なら点灯に変える、
という動きを指します。
つまり「トグルする」とは「ONとOFFを交互に切り替えること」です。

まとめ

ONE_SHOT
一度だけ処理したい場合(例えば遅延動作など)に使います。

PERIODIC
定期的に繰り返し処理を行いたい場合(LED点滅やセンサーの定期監視など)に使います。

⚙️ 周波数(freq)指定によるタイマー設定

📐 周波数(Hz)とは?

    Hz(ヘルツ) は「1秒間に何回繰り返すか」を表す単位です。

    例えば:

        🔹 1 Hz(ヘルツ) → 1秒間に1回

        🔹 2 Hz → 1秒間に2回

        🔹 0.5 Hz → 1秒間に0.5回(2秒に1回)

🛠 MicroPython タイマーの設定方法

MicroPython のタイマーでは、割り込みの間隔を指定する方法が2つあります。

    ⏳ period:ミリ秒単位で割り込み周期を指定

    🎯 freq:Hz(回/秒)単位で割り込み回数を指定

    ⚠️ period と freq はどちらか一方だけを指定し、同時に指定できません。

🎵 freq の使い方例

    freq=1 → 1秒に1回割り込みが発生

    freq=2 → 1秒に2回割り込みが発生

こうした設定により、秒間に何回処理を行いたいかを直感的に指定できるため便利です。
用途に応じて period と freq を使い分けてください。

freq 指定のサンプルコード(1HzでLEDを点滅)

from machine import Pin, Timer  # GPIO制御用Pinとタイマー用Timerをインポート

led = Pin(15, Pin.OUT)  # GPIO15を出力モードで初期化し、LEDに接続

# タイマー割り込み時に呼ばれるコールバック関数
def freq_callback(timer):
    led.toggle()  # LEDの状態を反転(点灯→消灯、消灯→点灯)
    print("FREQ: LEDの状態が切り替わりました")  # 動作確認用にメッセージを表示

timer = Timer()  # タイマーオブジェクトを生成

# タイマーを初期化
# freq=11Hz1秒間に1回)割り込みを発生させる設定
# mode=Timer.PERIODIC は繰り返し割り込みモード
# callback=freq_callback は割り込み時に呼ぶ関数を指定
timer.init(freq=1, mode=Timer.PERIODIC, callback=freq_callback)

# メインループは特に処理なしで空のままにしておく
# 割り込みが自動でLEDの点滅を制御するため
while True:
    pass


>>> %Run -c $EDITOR_CONTENT

MPY: soft reboot
FREQ: LEDの状態が切り替わりました
FREQ: LEDの状態が切り替わりました
FREQ: LEDの状態が切り替わりました



コメント

このブログの人気の投稿

Raspberry Pi Pico Wを使ってみよう

   Raspberry Pi Pico W(ラズベリーパイ ピコ ダブリュー) は、英国 Raspberry Pi 財団が 2022 年に発売した Wi-Fi 搭載マイコンボードです。従来の「Raspberry Pi」と聞くと Linux が動くシングルボードコンピュータ(SBC)を思い浮かべがちですが、Pico W は マイクロコントローラ (MCU)に分類され、いわゆる “組み込み開発” を手軽に始められるデバイスです。搭載 MCU はデュアルコア Arm Cortex-M0+(133 MHz 動作)の RP2040 。ここに Infineon 製 CYW43439 チップが追加され、 2.4 GHz IEEE 802.11 b/g/n Wi-Fi(BLE 対応 FW も提供中) が使えるのが最大の特徴です。  開発言語は MicroPython や CircuitPython が真っ先に紹介されることが多いのですが、 公式 Pico SDK を使えば C/C++ でも本格的に開発 できます。SDK は CMake ベースで Windows/macOS/Linux いずれでも利用可能。さらに、Arduino Core RP2040 が整備されたことで Arduino IDE 2.x からも “スケッチ感覚” で書き込みが可能 になりました。したがって、 「まずは Python でサッと試す」 「より高速化や省メモリ化が必要になったら C/C++ へ移行」 といった二段構えの学習ルートが取れるのが魅力です。 メニュー(基礎編) 01. Raspberry Pi Pico Wの開発環境を整える。 02. スイッチで 発光ダイオード(LED) を点灯・消灯させる 03. タイマーで発光ダイオード(LED)を1秒ごとに点滅させる 04. シリアル通信(オウム返し ) 05. シリアル通信(発光ダイオードの点灯・消灯) 06. サーボモーターを動かしてみよう(SG90制御入門) 07. DCモータを動かす(PWM) 08. IRリモートでRGBLED点灯 09. アナログ電圧を測定する(ADCの基本) 10. GPIO割り込み処理 11. リレーを駆動してLEDを制御する 12. DFPlayer で MP3 再生 13. 7 セグ 4 ...

スイッチで発光ダイオード(LED)を点灯・消灯させる

 スイッチを使って発光ダイオード(LED)を制御してみましょう。今回は、スイッチをオンにすると LED が点灯し、オフにすると消灯するように動作させます。もちろん、スイッチと LED を直接接続するのではなく、適切な回路を介して制御します。 1.回路 GPIO16 はデジタル入力として使用し、内部プルアップを有効にします。GPIO15 は出力として設定します。なお、接続には 1kΩ(1キロオーム)の抵抗を使用します。 【ソースコード】 # スイッチで LED を ON / OFF する簡単な例 #   GPIO15 : LED(出力)— LOW で消灯、HIGH で点灯 #   GPIO16 : スイッチ(入力)— 内部プルアップ抵抗を使用 # # ※ 配線例 #   LED のアノード → 1 kΩ 抵抗 → GPIO15 #   LED のカソード → GND #   スイッチ片側   → GPIO16 #   スイッチ反対側 → GND # # ★ 動作 #   スイッチを押す(GPIO16 が LOW)   → LED 点灯 #   スイッチを離す(GPIO16 が HIGH) → LED 消灯 from machine import Pin    # GPIO 制御ライブラリ import utime               # 時間関連(今回は使用しないが拡張用に読み込み) led = Pin ( 15 , Pin.OUT)                 # GPIO15 を出力モードに設定(LED 用) sw   = Pin ( 16 , Pin.IN, Pin.PULL_UP)     # GPIO16 を入力モード+内部プルアップ有効 while True:     if sw. value () == 1 :      # プルアップなので押していないときは 1   ...

シリアル通信(オウム返し)

 Raspberry Pi Pico Wは単体で使うのも便利ですが、パソコンや他のマイコンなど、さまざまな機器と通信できるとさらに活用の幅が広がります。 そこで今回は「シリアル通信」について紹介します。 まずは、パソコンから送られてきたデータをPico Wが受け取り、同じデータをそのままパソコンに送り返す、いわゆる「オウム返し(エコー)」を実装してみましょう。 シリアル通信とは? シリアル通信は、マイコンとパソコンや他の機器がデータを1ビットずつ順番に送受信する通信方式です。Raspberry Pi Pico WではUART(Universal Asynchronous Receiver/Transmitter)というハードウェアを使って実現します。 接続回路  id      TX       RX        baudrate     parity    stopbit  0  GPIO0 GPIO1   9600  なし  1  1  GPIO4 GPIO5   9600  なし  1 今回はUART1(GPIO4:TX、GPIO5:RX)を使用します。 ソースコード例 from machine import UART, Pin # UART1ポートを9600bpsで初期化(ボーレートを指定) sirial = UART ( 1 , 9600 ) # UARTの詳細設定: 9600bps 、データビット8、パリティ無し、ストップビット1で初期化 sirial. init ( 9600 , bits = 8 , parity = None, stop = 1 ) # UARTで文字列を送信する(※MicroPythonではバイト列で送るのが正しいため b '' にしたほうが安全) sirial. write (b 'Hello World \n\r ' )  # 起動時に「Hello World」を送信 # メインループ while True:     # 受信バッファにデータが存在するかチェック     if sirial. any () > 0 : ...