ここでは、ブレッドボードやジャンパー線を使ってLEDを点滅させる、通称「Lチカ」プログラムを作成します。電子工作界隈では、LEDをチカチカさせる入門プログラムを「Lチカ」というそうです。
目次
Lチカ プログラム
プログラムは次のように動作します。
使用する電子部品
使用している、Picoをのぞく電子部品を紹介します。
ブレッドボード
たとえばデジタル温度計など、Picoを本格的に稼働させるときには、Picoやディスプレイを接続するジャンパー線をはんだ付けして固定し、全体を筐体に収めることになりますが、ブレッドボードを使うと、Picoや電子部品との接続を、はんだ付けせず“仮止め”しておくことができます。
ブレッドボードは下図の構造をしています。ブレッドボードの表面はただ穴が並んでいるだけのように見えますが、内部でつながっています。ブレッドボードの両端(一方のみも場合もある)には、縦向きにつながった電源レールとグランドレールがあります。電源レールは赤い線や+で表され、グランドレールは青や黒の線、-で表されます。
内側の穴は横向きにつながっていますが、真ん中の溝で分断されています。Picoを下図のように、Micro USBポートを上にし、上端のピン(GP0)をブレッドボードの端の穴にそろえると、Picoのピン番号がブレッドボードの穴の番号で参照しやすくなります。
ジャンパー線
ジャンパー線には、接続部によって、オス-オス、オス-メス、メス-メスの3種類があります。ここではオス-オスを使います。極性はありません。これは、どちらをプラス側に、どちらをマイナス側につなぐという決まりはないということです。
抵抗器(抵抗)
抵抗器は330Ω(Ω)程度のものを、LEDの接続に使います。極性はありません。
LED
光らせたい色のものを使います。LEDには極性があるので注意します。2本の足の長い方をプラス側に、短い方をマイナス側につなぎます。抵抗器を使用しないと、Pico本体やLEDがダメージを受ける恐れがあるので、LEDを使うときには、必ず抵抗器を使用するようにします。
配線
配線は図があればそれを見て、ない場合は簡単なものを書いて、それを見ながら行うのが間違いが少なくてよいでしょう。PicoのUSBポートを上にして見た場合、Picoの上端とブレッドボードの上端が揃うように、Picoをブレッドボードに挿します。
Raspberry Pi Pico | 抵抗器 | LED |
---|---|---|
GP15 | <---> | VCC(+、長い足) |
GND | GND(-、短い足) |
GP15が具体的にどの位置にあるのかは、前の「ピンアウト」で述べたピンの配置図で調べます。GP15は下図で見ると、Picoの左下隅のピンだと分かります。GNDは全部で8か所あり、実際の接続先はPicoの右上隅のGNDでなくても構いません。
非常に細かく、配線の手順を示すと次のように記述できます。
- Picoの左下隅のGP15ピンを使うので、その左にあるブレッドボードの穴(20行め)に、抵抗器の足(どちらでもよい)を挿し、もう一方を25行めの穴に挿します。
- LEDの長い方の足を25行めの穴に挿し、真ん中の溝をまたいで、短い方の足を25行めの穴に挿します。
- 黒かなければ濃い色のジャンパー線を25行めの穴に挿し、もう一方をグランドレールのどこかの穴に挿します。
- 黒かなければ濃い色のジャンパー線をもう1本使って、グランドレールに挿し、片方をPicoのGNDピンのある3行めの穴に挿します。
この配線によって、GP16 -> (抵抗) ->(+)LED(-) -> (グランドレール) -> GND が接続できたことになります。抵抗器とLEDの長い足とはブレッドボードの同じ列を通って、LEDの短い足とジャンパー線とはブレッドボードの同じ列を通って、ジャンパー線とジャンパー線はグランドレールを通って、ブレッドボード内部でつながっています。
プログラムコード 点灯
Thonnyの[+]ボタン([新規ファイル]ボタン)をクリックして、次のコードを記述します。
import machine
led_external = machine.Pin(15, machine.Pin.OUT)
led_external.value(1)
Thonnyの[実行]ボタンをクリックして、プログラムを実行します。配線とコードの記述に間違いがなければ、LEDが点灯します。プログラムを停めるには[停止]ボタンをクリックします。ただしLEDは消えません。
このプログラムではGP15ピンを使っているので、Pin()関数にはその番号の15を指定しています。変数led_externalの”external”は「外部の」と言う意味です。
led_external.value(1)は、もっと分かりやすくled_external.on()と記述できます。同様にled_external.value(0)はled_external.off()と記述できます。この方がオン(点灯)とオフ(消灯)が直感的に分かりやすくなります。
電気は高いところから低いところに流れます。言い換えると、電流は電圧の高いところ(+)から低いところ(-)に流れます。今の場合は、LEDとPicoを保護するために、抵抗器を入れて、電流を流れにくくしています。
プログラムコード 点滅
LEDの点滅は、プログラムの実行を一時停止させ、その時間分同じ状態でいさせることで実現できます。
コードを次のように変更します。
import machine
import utime
led_external = machine.Pin(15, machine.Pin.OUT)
# 無限ループ
while True:
led_external.on() # 点灯
utime.sleep(1) # 1秒間、同じ状態
led_external.off() # 消灯
utime.sleep(1) # 1秒間、同じ状態
このプログラムを実行すると、1秒間点灯し1秒間消灯する動作を繰り返します。
ここでは時間を扱うので、utimeライブラリをインポートしています。これはMicroPython版のtimeライブラリで、sleep()メソッドに秒数を指定すると、その間、プログラムの実行が停止できます。
LEDを点灯して1秒間その状態をつづけ、LEDを消灯して1秒間その状態をつづけ、これをwhileループで繰り返しつづけると点滅になります。ここではPythonと同様、MicroPythonでもインデントが必要です。
utime.sleep()の停止時間を変えると、点滅のリズムを変えることができます。たとえば点灯の時間を0.1に変えると、テレビドラマでよく見る、手術室の心臓の脈動のようなリズムに変わります。
LEDの点灯は、LEDに電気が流れオンの状態にあるということです。これは数値の1(3.3V)であり、論理値のTrueに当たります。同様に、LEDの消灯はLEDがオフの状態にあり、0(0V)、Falseであることを表しています。電気が流れるか流れないかのオン/オフは、電子機器にとって理解できる唯一の状態で、Picoやコンピュータはこれを2進数で理解します。
オンボードLEDと交互に点滅
前の例と合わせると、オンボードLEDと外部LED両方が制御できます。オンボードLEDが点いている間は外部LEDを消し、外部LEDが点いている間はオンボードLEDを消すといったことができます。
import machine
import utime
led_onboard = machine.Pin(25, machine.Pin.OUT) # Pico
# led_onboard = machine.Pin(“LED”, machine.Pin.OUT) # Pico W
led_external = machine.Pin(15, machine.Pin.OUT)
# 無限ループ
while True:
# 0.5秒間、オンボードLEDを点灯
# 0.5秒間、外部LEDを消灯
led_onboard.on()
led_external.off()
utime.sleep(0.5)
# 1秒間、オンボードLEDを点灯
# 1秒間、外部LEDを点灯
led_onboard.off()
led_external.on()
utime.sleep(1)
Thonnyの[停止]ボタンをクリックすると、どちらかのLEDが点いたままでプログラムは終了します。LEDを消したい場合は、単にUSBケーブルをPCから抜きます。