< All Topics
Print

Pins setup

Basic Digital Input/Output

This is the most common and straightforward method:

import board
import digitalio

# Setup a pin as an output
led_pin = digitalio.DigitalInOut(board.D13)  # Built-in LED on many boards
led_pin.direction = digitalio.Direction.OUTPUT

# Turn the LED on/off
led_pin.value = True  # On
led_pin.value = False  # Off

# Setup a pin as an input
button_pin = digitalio.DigitalInOut(board.D2)
button_pin.direction = digitalio.Direction.INPUT
button_pin.pull = digitalio.Pull.UP  # Enable internal pull-up resistor

# Read the input
if not button_pin.value:  # Button is pressed (pulled LOW)
    print("Button pressed!"

A little more compact by just importing the modules you really need:

import board
from digitalio import DigitalInOut, Direction, Pull

led_pin = DigitalInOut(board.D13)
led_pin.direction = Direction.OUTPUT

button_pin = DigitalInOut(board.D2)
button_pin.direction = Direction.INPUT
button_pin.pull = Pull.UP

If more pins need to be setup, create a helper function:

import board
import digitalio

def setup_output(pin):
    pin_out = digitalio.DigitalInOut(pin)
    pin_out.direction = digitalio.Direction.OUTPUT
    return pin_out

# Now use it like this:
led_pin = setup_output(board.D13)
led_pin.value = True
Input with External Pull-up/Pull-down
import board
import digitalio

# Input with pull-down resistor
button_pin = digitalio.DigitalInOut(board.D3)
button_pin.direction = digitalio.Direction.INPUT
button_pin.pull = digitalio.Pull.DOWN  # Enable internal pull-down resistor

# With pull-down, button press reads HIGH
if button_pin.value:
    print("Button pressed!")
Analog input
import board
import analogio
import time

# Setup an analog input
analog_in = analogio.AnalogIn(board.A0)  # A0 is typically analog-capable

# Function to convert the analog reading to voltage
def get_voltage(pin, reference_voltage=3.3):
    return (pin.value * reference_voltage) / 65536

# Read the analog pin
while True:
    voltage = get_voltage(analog_in)
    print(f"Analog voltage: {voltage:.2f}V")
    time.sleep(0.1)
PWM Output (Dimming LEDs, Servo Control)
import board
import pwmio
import time

# Setup PWM output for LED dimming
pwm_led = pwmio.PWMOut(board.D5, frequency=5000, duty_cycle=0)

# Fade the LED
for i in range(100):
    # PWM duty cycle goes from 0 to 65535, so scale 0-100 to 0-65535
    pwm_led.duty_cycle = int(i * 655.35)
    time.sleep(0.01)

# For servo control (typically 50Hz frequency with pulse width 1-2ms)
servo = pwmio.PWMOut(board.D6, frequency=50)
# 0 degrees position (duty cycle ~2.5% or 1638/65535)
servo.duty_cycle = 1638
time.sleep(1)
# 180 degrees position (duty cycle ~12.5% or 8192/65535)
servo.duty_cycle = 8192
Table of Contents