Read Digital Input from Push Button using ESP32
What is a Push Button?
A push button is a simple mechanical switch that can either be pressed or released. It is used to send a signal to the microcontroller based on its state (pressed or not pressed). In this tutorial, we will use a push button as a digital input for the ESP32.
Working Principle of Push Button
When the push button is pressed, it either connects a pin to ground (active low) or to a supply voltage (active high), depending on how it is wired. The ESP32 reads this voltage state to determine if the button is pressed or not.
- Wire the push button to a GPIO pin.
- Configure the GPIO pin as an input with an internal pull-up or pull-down resistor.
- Use `digitalRead()` to check the button's state.
- Use an `if` statement to perform actions based on the button press.
Formula: N/A
Components Required
- ESP32 Development Board
- Push Button
- 10kΩ Resistor (for pull-down or pull-up configuration)
- Breadboard
- Jumper Wires
Pin Configuration of Push Button
- Button Pin: GPIO Pin used to read the button input.
- GND: Ground pin connected to one side of the push button.
It is good practice to use internal pull-up or pull-down resistors to prevent floating pin behavior, which can cause undefined states.
Wiring Push Button to ESP32
- Button Pin -> GPIO 13 (or any other available GPIO)
- GND -> GND
Arduino Code to Read Push Button
1#define BUTTON_PIN 13
2
3void setup() {
4 Serial.begin(115200);
5 pinMode(BUTTON_PIN, INPUT_PULLUP); // Use internal pull-up resistor
6}
7
8void loop() {
9 int buttonState = digitalRead(BUTTON_PIN);
10
11 if (buttonState == LOW) {
12 Serial.println("Button Pressed");
13 } else {
14 Serial.println("Button Released");
15 }
16
17 delay(200); // Debounce delay
18}
Code Explanation (Line-by-Line)
- #define BUTTON_PIN 13: Defines GPIO 13 as the button input pin.
- pinMode(BUTTON_PIN, INPUT_PULLUP);: Sets the button pin as an input with an internal pull-up resistor.
- int buttonState = digitalRead(BUTTON_PIN);: Reads the digital state of the button (HIGH or LOW).
- if (buttonState == LOW) { ... }: If the button is pressed, the state will be LOW (assuming active-low configuration).
- Serial.println("Button Pressed");: Displays a message in the Serial Monitor when the button is pressed.
- delay(200);: Debounce delay to prevent multiple reads from button bounce.
Applications
- Simple User Input (on/off actions)
- Toggling LED or Relay
- Controlling Devices via Buttons
- Creating a Button-Activated Alarm or Alert System
- Building User Interfaces for Embedded Systems
Conclusion
Reading a digital input from a push button with the ESP32 is straightforward and enables various interactive applications. Whether used for simple on/off control or more complex user input, push buttons are an essential component in embedded systems, and with the ESP32's internal pull-up/pull-down resistors, they are easy to interface.