前回でESP32につないだ温度センサーを使い温度測定が実施できました。
ここからLEDを点灯(Lチカ)させていきます。
抵抗について
LEDに大きな電圧がかかるとLEDが壊れるので抵抗を接続する必要があります。
抵抗は何Ω必要か計算してみました。
- Vsource:電源電圧。3.3V
- Vf:LEDの順方向電圧。1.8Vとする
- If:LEDの推奨電流。80mA
- R:抵抗
- R = (Vsource – Vf) / If = 18.75Ω
LEDの順方向電圧がわからなかったのでLEDの耐電圧で一番低い値を、電流もわからなかったのでLEDの推奨電流を採用しました。
電流計などがあればもっと正確な値を指定できると思います。
抵抗は余裕をもって47Ωのものを使いました。
接続
以下の写真のように、ESP32にセンサーや抵抗を接続します。
- ESP32のGND:抵抗に接続
- 抵抗:LEDの短足(カソード、陰極)に接続
- LEDの長足(アノード、陽極):ESP32のGPIO 27に接続
LED点灯プログラム
以下の10秒間LEDを点灯させるプログラムを記述し、light.pyとしてローカルに保存します。
・light.py
from machine import Pin
import time
# LEDを接続
led = Pin(27, Pin.OUT)
led.value(1) # LEDをONにする
time.sleep(10) # 10秒待つ
led.value(0) # LEDをOFFにする
ampyを使い、このプログラムを実行します。
ampy --port /dev/tty.usbserial-0001 run light.py
点灯
以下の写真のようにLEDを点灯させることができました。
浮遊状態による意図せぬ点灯
別のピン(GPIO 14)にジャンパーワイヤーを差すと、プログラムで起動させた訳でもないのにLEDが薄く光ってしまいます。
これはマイコンの入力ピンが接続されていない浮遊状態で電位が不定になることが原因らしく、プログラムで明示的にLEDをOFFにするか、同じくプログラムで内部プルダウン/プルアップを有効にしてこれを防ぎます。
from machine import Pin
import time
LED_PIN = 14 # LEDを接続するGPIOピン番号
led = Pin(LED_PIN, Pin.OUT, Pin.PULL_DOWN) # GPIOピンを出力モードに設定し、内部プルダウン抵抗を有効化
上記を実行すると点灯が消えました。