#104初級

ESP32でボタンによるLED制御(押している間だけ点灯)

ボタンを押している間はLEDが点灯し、離すと消灯します。ESP32のデジタル入力ピンと内蔵プルアップ抵抗の使い方を学びます。INPUT_PULLUPモードを使うため、外付け抵抗は不要です。

4.6(36)
55 完了
ESP32でボタンによるLED制御(押している間だけ点灯)
ドアベルのように、ボタンを押している間は点灯し、離すと消灯します。ESP32はボタンの状態を常に読み取り、押している間はLEDを点灯させ、離した瞬間に消灯させます。ボードが外部からの操作をどう検知するかを、シンプルな仕組みで学べます。

動画

回路図

ESP32でボタンによるLED制御(押している間だけ点灯) - Circuit

ソースコード

Arduino (C++)
1// ─────────────────────────────────────────
2//   BlueGrays · bluegrays.com
3//   ESP32 LED Control with Push Button (Push)
4// ─────────────────────────────────────────
5// The LED stays on while the button is held down and turns off when it is
6// released. The button pin uses the internal pull-up (INPUT_PULLUP), so no
7// external resistor is needed.
8//
9// Pins:
10//   GPIO 5 -> Red LED (with a 220 ohm resistor)
11//   GPIO 4 -> Button (other leg to GND)
12
13const int LED_PIN = 5;      // LED output
14const int BUTTON_PIN = 4;   // Button input
15
16void setup() {
17  pinMode(LED_PIN, OUTPUT);
18  pinMode(BUTTON_PIN, INPUT_PULLUP);  // Reads HIGH when not pressed
19}
20
21void loop() {
22  // A pressed button pulls the pin to GND: LOW = pressed
23  if (digitalRead(BUTTON_PIN) == LOW) {
24    digitalWrite(LED_PIN, HIGH);
25  } else {
26    digitalWrite(LED_PIN, LOW);
27  }
28}
29

よくある質問

INPUT_PULLUPを使う場合、ボタンはどう接続しますか?▾

ボタンの片方の端子をGPIOピンに、もう片方をGNDに接続します。内蔵プルアップ抵抗がピンをHIGHに保ちます。ボタンを押すとピンがGNDに接続され、LOWとして読み取られます。外付け抵抗は不要です。

論理が逆になるのはなぜですか?▾

プルアップ抵抗を使うと、ボタンを押していないときはHIGH、押しているときはLOWと読み取られます。そのため、コード内の「if (digitalRead(button) == LOW)」という条件は、ボタンが押されたことを示します。

プルアップ抵抗を内蔵していないピンはどれですか?▾

GPIO 34、35、36、39は入力専用で、プルアップ抵抗もプルダウン抵抗も内蔵していません。これらのピンでボタンを使う場合は、外付けの10 kΩ抵抗を追加してください。

ボタンをタッチセンサーに置き換えられますか?▾

はい。ESP32にはタッチ検出に対応したピン(GPIO 4、13、14、15、27など)があります。`touchRead()`を使うと、ワイヤーや金属板へのタッチをボタンのように検知できます。