ESP32でLちか
はじめに
この記事ではLEDをESP32開発ボードに接続し、Micropythonプログラムにより点灯、消灯する方法について記述しています。
In English
This article describes how to turn on/off the LEDs connected to ESP32 development board in Japanese.
GPIOポートについて
GPIOはGeneral Purpose Input/Outputの略で、日本語では汎用入出力と訳されています。
一般的なパソコンにはGPIOのポートはありませんが、制御用のワンボードコンピュータ(ESP32やRaspberry Piなど)では標準で備わっています。
それぞれのI/Oポートをプログラミングにより、入力用に使用したり、出力用に使用したりできます。
これらのポートにセンサやLED、リレー、スイッチ、サーボモータなどを接続し、プログラムにより制御することができます。
ESP32開発ボードのpinout
ここではESP32-WROVER-DEVとESP32-WROOM-DEVのpinoutを示します。
対応するアコーディオンを展開して確認して下さい。
ESP32-WROVER-DEVのpinout
ESP32-WROVER-DEVのpinout
この記事で使用しているESP32-WROVER-DEVのピンは次のようになっています。
引用元:https://i.imgur.com/EVthNWr.png
ESP32-WROOM-DEVのpinout
ESP32-WROOM-DEVのpinout
ESP32-WROOM-DEVは30ピンと36ピンのバージョンがあります。
ESP32-WROOM-DEV 30ピンバージョンのpinout
引用元:https://www.electronicshub.org/wp-content/uploads/2021/02/ESP32-Pinout-1.jpg
ESP32-WROOM-DEV 36ピンバージョンのpinout
引用元:https://www.electronicshub.org/wp-content/uploads/2021/02/ESP32-36-Pin-Pinout.jpg
LEDについて
LEDについては以下のサイトを閲覧して下さい。
ブレッドボードについて
ブレッドボードは電子回路のプロットタイプ(試作品)を作成する時によく使われます。
ボード上に多数の穴(ホール)が開いていて、部品やリード線を差し込むことによって電子回路を簡単に構成することができます。穴の間隔はICのピッチに合うように、2.54ミリとなっています。
下の図に示すように、ピンク色の穴は内部で電気的に接続されています。
引用元: https://fabkura.gitbooks.io/arduino-docs/content/bb2.jpeg
結線
手持ちの開発キットに同梱されていた都合上、赤、緑、青のLEDを使用していますが、何色のLEDでも大丈夫です。
GPIOポートから直接、LEDのアノードに接続します。LEDのカソードは220Ωの電流制限抵抗を経由してGNDに接続します。
ここでは、赤色LEDをGPIO4、緑色LEDをGPIO0、青色LEDをGPIO15に接続しています。
下の結線図ではLEDが下向きになっていますが、実際はブレッドボード上に垂直に立てて下さい。
下の図はクリックすると拡大されます。
ブレッドボードの結線
回路図は次のようになります。
Lちか回路図
MicroPythonのドキュメントについて
Micropythonのドキュメントは以下のリンクを参照して下さい。
日本語
本家(英語)
サンプルプログラム1(オンボードLEDの点滅)
ESP32-WROVER-DEV本体に搭載されているオンボードLEDを点灯/消灯するサンプルコードです。
この記事の動作確認で使用したESP32-WROVER-DEVはオンボードLEDがGPIO2に接続されています。
led1.py
コピペ用 led1.py
# Turn ON/OFF on-board LED
from machine import Pin
import time
# On-board LED GPIO port
LED = 2
onboard_led = Pin(LED, Pin.OUT)
while True:
onboard_led.on()
print("ON")
time.sleep(1)
print("OFF")
onboard_led.off()
time.sleep(1)
サンプルプログラム2(赤色LEDの点滅)
GPIO4に接続された赤色LEDを点滅させるサンプルプログラム
led2.py
コピペ用 led2.py
# Turn ON/OFF a LED
from machine import Pin
import time
# Red 4, green 0, blue 15
RED_LED = 4
red_led = Pin(RED_LED, Pin.OUT)
while True:
# Turn ON LED
red_led.on()
print("ON")
time.sleep(1)
# Turn OFF LED
red_led.off()
print("OFF")
time.sleep(1)
サンプルプログラム3(3色のLEDを同時点滅)
GPIO4に接続された赤色LED、GPIO0に接続された緑色LED、GPIO15に接続された青色LEDを3つ同時に点滅させるサンプルプログラムです。
(コードのエレガントさを考慮しない、一番単純なやり方です。京ことばでは もっさいプログラムと言います。)
led3.py
コピペ用 led3.py
# Turn ON/OFF all the LEDs at onece (very simple way)
from machine import Pin
import time
# We don't use GPIO2 as it is connected to on-board LED
# Red 4, green 0, blue 15
RED_LED = 4
GREEN_LED = 0
BLUE_LED = 15
# Make led objects
red_led = Pin(RED_LED, Pin.OUT)
green_led = Pin(GREEN_LED, Pin.OUT)
blue_led = Pin(BLUE_LED, Pin.OUT)
while True:
# Turn ON leds
red_led.on()
green_led.on()
blue_led.on()
print("ON")
time.sleep(1)
# Turn OFF leds
red_led.off()
green_led.off()
blue_led.off()
print("OFF")
time.sleep(1)
サンプルプログラム4(3色のLEDをタプルを使って同時点滅)
タプルを使用して上のサンプルコードを書き換えたものです。
led4.py
コピペ用 led4.py
# Turn ON/OFF LEDs using tuple
from machine import Pin
import time
# We don't use GPIO2 cause, it is connected to on-board LED
# Red 4, green 0, blue 15
RED_LED = 4
GREEN_LED = 0
BLUE_LED = 15
# Make led objects
red_led = Pin(RED_LED, Pin.OUT)
green_led = Pin(GREEN_LED, Pin.OUT)
blue_led = Pin(BLUE_LED, Pin.OUT)
# Make led tuple
leds = (red_led, green_led, blue_led)
while True:
# Read from tuple and turn ON leds
for x in leds:
x.on()
print("ON")
time.sleep(1)
# Read from tuple and turn OFF leds
for x in leds:
x.off()
print("OFF")
time.sleep(1)
サンプルプログラム5(CTRL-CでLED消灯)
CTRL-Cでプログラムを止めた場合、タイミングによってはLEDが点灯したままになります。
次のサンプルプログラムはCTRL-Cが押されたら、全てのLEDを消灯してからプログラムを終了します。
led5.py
コピペ用 led5.py
# Turn ON/OFF LEDs
# Turn OFF all LEDs if CTRL-C is pressed
from machine import Pin
import time
# We don't use GPIO2 cause, it is connected to on-board LED
# Red 4, green 0, blue 15
RED_LED = 4
GREEN_LED = 0
BLUE_LED = 15
red_led = Pin(RED_LED, Pin.OUT)
green_led = Pin(GREEN_LED, Pin.OUT)
blue_led = Pin(BLUE_LED, Pin.OUT)
leds = (red_led, green_led, blue_led)
# Do this until CTRL-C is pressed
try:
while True:
# Turn ON leds
for x in leds:
x.on()
print("ON")
time.sleep(1)
# Turn OFF leds
for x in leds:
x.off()
print("OFF")
time.sleep(1)
# Turn off all LEDs if CTRL-C is pressed
except KeyboardInterrupt:
print("Trun off all LEDs")
for x in leds:
x.off()
演習問題
- 3色のLEDが順次点滅して、流れるように表示するプログラムを作成して下さい。(ファイル名:led-ex1.py)
- led_onoff(color, status)のように、色を第1引数で与え、ON/OFFの情報を第2引数で与え、引数にしたがって該当する色のLEDがON/OFFする関数を作成し、その関数を利用して3色のLEDをON/OFFさせて下さい。(ファイル名:led-ex2.py)
- 3つのLEDを2進数の1桁に見立てて、0から7までの2進数を表示するプログラムを作成して下さい。ただし、赤色LEDをLSB(最下位ビット)とし、青色LEDをMSB(最上位ビット)とします。(ファイル名;led-ex3.py)
Discussion
Can you share where you got the Fritzing design from?
I asked Freenove support directly.
They sent me a Fritzing data via email.
Please refer the following URL.