In this tutorial, you will learn how to interface push button with Pi Pico and we will discuss how we can interface the switch with Raspberry pi pico. Also, you will learn how to use the button to toggle LED in Pi Pico. Like the previous Pi Pico tutorial, we will program our board using Arduino IDE, MicroPython and CircuitPython. The buttons can be interfaced in multiple ways and I will try to cover each of them.
Button with Pi Pico
Components Required
Component | Amazon (US) | Aliexpress |
---|---|---|
Pi Pico | ||
Push Button | ||
LED | ||
Resistor | ||
Breadboard | ||
Jumper wires | ||
Micro USB cable |
Disclosure: Some of these links are affiliate links. We mayy earn commission on you purchase at no extra cost to you. Support us by buying from here .
Button Pinout and Working
From the figure, we can see that a push button has 4 terminals. a,b,c and d. Internally, a is connected to b, and c is connected to d. and there is no connection of a,b with c,d as can be seen in the right bottom figure which shows the condition of button when it is not pressed hence making an open circuit. But when the button is pressed, a,b makes connection with c,d, hence making a close circuit as can be seen in left figure at the bottom. To summarize,
- No matter the state of button pushed or not, a is connected to b and c is connected to d.
- When button is pressed, a,b are connected to c,d.
- When button is not pushed, there is no connection between a,b and c,d.
Button interfacing technqiues
Button can be interfaced with Pi Pico in two ways, pull-up configuration and pull down configuration. However since pi pico provides internal pull up configuration we are going to use that. In the pull up configuration, we will be receiving HIGH value at digital pin when button is not pushed and when the button is pushed we get the LOW value.
Button with Pi Pico Wiring Diagram
As can be seen, in the figure that Pi Ground pin is connected to one pin of button and the other pin of button is connected to GP5. We will use the internal pull-up configuration of pi pico.
Adding LED
As we have discussed in our previous tutorial “LED blink in pi pico“, that LED needs a resistor so we cna protect it from burning. The anode of LED is connected to GP6 and cathode of LED is connected to GND.
Button with Pi Pico Code
As we have discussed in the introduction, we can program raspberry pi pico in multiple ides and programming languages. In this tutorial, we will be learning how to use Button with pi pico in arduino IDE, microPython and circuitPython.
Button with Pi Pico Arduino IDE
// Define the pin connected to the pushbutton const int buttonPin = 5; void setup() { // Initialize serial communication Serial1.begin(9600); // Set the button pin as an input with an internal pull-up resistor pinMode(buttonPin, INPUT_PULLUP); } void loop() { // Read the value of the pushbutton int buttonValue = digitalRead(buttonPin); // Print the value of the pushbutton to the serial monitor Serial1.println(buttonValue); // Wait a short time before reading the button value again delay(50); }
The code first defines the pin connected to the pushbutton, and then sets it as an input with an internal pull-up resistor in the setup()
function. In the loop()
function, the code reads the value of the pushbutton using the digitalRead()
function, and then prints it to the serial monitor using the Serial1.println()
function. It then waits for a short time before reading the button value again.
When the button is pressed, you will see 0, in the serial monitor and in normal conditions it will print 1.
Pi Pico LED Toggle using Button Arduino IDE
// constants won't change const int buttonPin = 5; // pi pico connected to button's pin const int LEDPin = 6; // pi pico pin connected to LED's pin // variables will change: int ledState = LOW; // the current state of LED int lastButtonState; // the previous state of button int currentButtonState; // the current state of button void setup() { Serial1.begin(9600); // initialize serial pinMode(buttonPin, INPUT_PULLUP); // set pi pico pin to input pull-up mode pinMode(LEDPin, OUTPUT); // set pi pico pin to output mode currentButtonState = digitalRead(buttonPin); } void loop() { lastButtonState = currentButtonState; // save the last state currentButtonState = digitalRead(buttonPin); // read new state if(lastButtonState == HIGH && currentButtonState == LOW) { Serial1.println("The button is pressed"); // toggle state of LED ledState = !ledState; // control LED arccoding to the toggled state digitalWrite(LEDPin, ledState); } delay(100); }
In the code, first we define the buttonPin to GP5 and LEDPin to GP6, then we set the state of LED to LOW, since LED will be turned off when we first boot. Then we created a variable to save the current and last state of the button.
In the setup() function, we define the serial monitor by setting up the baud rate and then we set the button as input in pull up configuration and LED pin as output.
In the loop() function, we first save the last state of the button and then read the current state using the digital Read function. Then using the if else conditions we set a condition that if last state of button was HIGH, i.e. button was not pushed and current state is LOW, i.e. button has just pushed, change the state of LED. ! sign means not gate and that state will be written to LED and our LED will be toggle on button pushed or pressed.
Button with Pi Pico MicroPython
from machine import Pin buttonPin = 5 push_button = Pin(buttonPin, Pin.IN, Pin.PULL_UP) while True: button_state = push_button.value() print(button_state)
First, we imported the Pin function from machine library since we will be using IOs of Pi Pico like we did in last tutorial. Then we define the pin number of button. Then we set push button as input in pull up configuration. Then implemented the reading of push button value and print it in the while loop, which is a continuous or forever loop. You will see the results in the console.
Pi Pico LED Toggle using Button MicroPython
from machine import Pin from time import sleep buttonPin = 5 LEDPin = 6 button_state = 0 led_state = 0 led = Pin(LEDPin, Pin.OUT) push_button = Pin(buttonPin, Pin.IN, Pin.PULL_UP) while True: last_State = button_state button_state = push_button.value() if button_state == 0 and last_State == 1: led_state = not(led_state) led.value(led_state) sleep(0.1)
For the toggle of LED using push button, we updated the last code and added LED as output. In the forever loop, we save the last state of button and current state of button in a variable. Then using the if else condition we see if current state is 0 and last state was 1, change the state of LED. If it was on, turn it off. There is a delay of 0.1 seconds in the end for debouncing of button.
Button with Pi Pico CircuitPython
import time import board from digitalio btn = digitalio.DigitalInOut(board.GP5) btn.direction = digitalio.Direction.INPUT btn.pull = digitalio.Pull.UP while True: button_state = btn.value print(button_state) time.sleep(0.1) # sleep for debounce
We first import three libraries, Time for using the sleep function i.e. to create delay, board library to use the GPIO pins in pi pico and digitalio library for controlling the states of LED.
Then we will set the pin number of button to GP5, and then set the direction as INPUT and set it as pull up configuration.
Then using the btn.value , we read the state of push button and print it in the forever while loop.
Pi Pico LED Toggle using Button CircuitPython
import time import board import digitalio btn = digitalio.DigitalInOut(board.GP5) btn.direction = digitalio.Direction.INPUT btn.pull = digitalio.Pull.UP led = digitalio.DigitalInOut(board.GP6) led.direction = digitalio.Direction.OUTPUT button_state = 0 led_state = 0 while True: last_state = button_state button_state = btn.value if not button_state and last_state: led_state = not(led_state) led.value = led_state time.sleep(0.1) # sleep for debounce
The additional things from the previous code is that we set up LED as output on pin GP6. We created some variables, to keep the status of LED and button. In the forever loop, we save the last state of push button and then read the current state of button and if the state has changed i.e. HIGH to LOW, then we change the state of LED.
Conclusion
In this tutorial, you learn how you can use a button with Pi pico using Arduino IDE, Micropython and Circuit Python. Also, we covered how to toggle LED.