๐Ÿฅง Pi Day 2026 Experiments

Build real electronics projects with Raspberry Pi Pico โ€” LED Morse Code & LCD Pi Digits. Everything you need is in the Make: Radio Component Kit.

โฌ‡ Download pi_morse.py โฌ‡ Download pi_lcd.py โฌ‡ i2c_scan.py (helper) ๐Ÿ“‹ Breadboard Diagrams View on GitHub

๐Ÿ“บ Watch Us Build This LIVE on TikTok!

Monday, March 17 at 2:30 PM EST โ€” Follow to get notified!

Follow @ProTechTrader on TikTok โ†’

We'll demo both experiments live and answer your questions!

Experiment 1: LED Morse Code "3.14159"

โญ BEGINNER 2 min setup

What It Does

A green LED blinks the digits of Pi (3.14159...) in Morse code. Short flash = dot, long flash = dash. Green LED ties into St. Patrick's Day too! ๐Ÿ€

Components Needed

ComponentValueIn Kit?Notes
Raspberry Pi PicoRP2040โœ…Kit includes 2
LEDGreen, 3mm or 5mmโœ…Green for St. Paddy's!
Resistor220ฮฉ (Red-Red-Brown)โœ…Current limiter โ€” required!
Jumper Wire1 pieceโœ…LED cathode to GND
BreadboardSolderlessโœ…Kit includes 2

Wiring

GP15 (Pin 20) โ”€โ”€โ”€โ”€ [///220ฮฉ///] โ”€โ”€โ”€โ”€ ๐ŸŸข LED (+) โ”€โ”€โ”€โ”€ LED (-) โ”€โ”€โ”€โ”€ GND (Pin 18) resistor long leg short leg wire back (anode) (cathode) to Pico
1. Place Pico straddling the breadboard center gap, USB port facing away
2. Resistor: One leg โ†’ same row as GP15 (Pin 20). Other leg โ†’ empty row below.
3. LED: LONG leg (+) โ†’ same row as resistor end. SHORT leg (-) โ†’ next row.
4. GND wire: From LED cathode row โ†’ any GND pin on Pico (Pin 3, 8, 13, 18, etc.)
โš ๏ธ LED has polarity! Long leg = positive. If it doesn't light, flip it around.
โš ๏ธ ALWAYS use the 220ฮฉ resistor โ€” without it you'll burn out the LED instantly.

Code: pi_morse.py

# pi_morse.py รขโ‚ฌโ€ Blink Pi digits in Morse Code
# Pi Day TikTok Livestream รขโ‚ฌโ€ ProTechTrader Make: Radio Kit Demo
# Upload to Pico #1, run with Thonny

from machine import Pin
from time import sleep

led = Pin(15, Pin.OUT)  # GP15

# Morse code timing (seconds)
DOT = 0.15        # Short flash
DASH = 0.45       # Long flash (3x dot)
SYMBOL_GAP = 0.15 # Gap between dots/dashes
CHAR_GAP = 0.45   # Gap between digits
WORD_GAP = 1.0    # Gap between repetitions

# Morse code for digits 0-9 + decimal point
MORSE = {
    '0': '-----',   # 5 dashes
    '1': '.----',   # 1 dot, 4 dashes
    '2': '..---',   # 2 dots, 3 dashes
    '3': '...--',   # 3 dots, 2 dashes
    '4': '....-',   # 4 dots, 1 dash
    '5': '.....',   # 5 dots
    '6': '-....',   # 1 dash, 4 dots
    '7': '--...',   # 2 dashes, 3 dots
    '8': '---..',   # 3 dashes, 2 dots
    '9': '----.',   # 4 dashes, 1 dot
    '.': '.-.-.-',  # Decimal point
}

PI_DIGITS = "3.14159265358979323846"

def blink_morse(char):
    """Blink one character in Morse code"""
    pattern = MORSE.get(char, '')
    for i, symbol in enumerate(pattern):
        led.on()
        if symbol == '.':
            sleep(DOT)
        else:
            sleep(DASH)
        led.off()
        if i < len(pattern) - 1:
            sleep(SYMBOL_GAP)

def main():
    print("=== Pi Day Morse Code ===")
    print(f"Blinking: {PI_DIGITS}")
    print("Dot = short flash, Dash = long flash")
    print("Watch the LED on GP15!")
    print()
    
    while True:
        for char in PI_DIGITS:
            morse = MORSE.get(char, '?')
            print(f"  {char}  {morse}")
            blink_morse(char)
            sleep(CHAR_GAP)
        
        print("\n--- Looping ---\n")
        sleep(WORD_GAP)

main()

How to Run

1. Download and install Thonny IDE
2. Plug Pico into USB โ€” select "MicroPython (Raspberry Pi Pico)" in bottom-right
3. Open pi_morse.py โ†’ Click โ–ถ Run
4. Watch the LED blink Pi! ๐Ÿฅง

Experiment 2: LCD Scrolling Pi Digits

โญโญ INTERMEDIATE 10 min setup

What It Does

The 1602 LCD screen scrolls the first 100 digits of Pi infinitely. Shows a "Pi Day 2026! / ProTechTrader" splash screen on startup. Very visual for camera!

Top-down view of Raspberry Pi Pico connected to 1602 LCD on breadboard

Components Needed

ComponentValueIn Kit?Notes
Raspberry Pi PicoRP2040โœ…Use 2nd Pico from kit
1602 LCD + I2C Backpack16ร—2 charactersโœ…Must have I2C adapter on back
Jumper Wires4 piecesโœ…VCC, GND, SDA, SCL
BreadboardSolderlessโœ…Use 2nd from kit

Wiring โ€” Only 4 Wires!

LCD Pin โ†’ Pico Pin โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ VCC โ†’ VBUS (Pin 40) RED wire โ€” 5V power GND โ†’ GND (Pin 38) BLACK wire โ€” Ground SDA โ†’ GP4 (Pin 6) BLUE wire โ€” I2C Data SCL โ†’ GP5 (Pin 7) YELLOW wire โ€” I2C Clock
1. RED: LCD VCC โ†’ Pico VBUS (Pin 40) โ€” must be 5V!
2. BLACK: LCD GND โ†’ Pico GND (Pin 38)
3. BLUE: LCD SDA โ†’ Pico GP4 (Pin 6) โ€” data line
4. YELLOW: LCD SCL โ†’ Pico GP5 (Pin 7) โ€” clock line
โš ๏ธ LCD needs 5V (VBUS), not 3.3V! Display will be dim or dead on 3V3.
โš ๏ธ If you see boxes but no text, turn the blue potentiometer on the I2C backpack.

Connection Reference Photos

Click any image to view full size. Use these as a visual guide while wiring.

๐Ÿ“Œ Pico Pinout โ€” LCD Wiring Reference

Physical pin numbers (1-40). The 4 highlighted rows are the only pins you need for this experiment.

โฌ† USB PORT โฌ†
GP01โ—โ–ˆโ—40VBUS โ† RED wire (5V)
GP12โ—โ–ˆโ—39VSYS
GND3โ—โ–ˆโ—38GND โ† BLACK wire
GP24โ—โ–ˆโ—373V3_EN
GP35โ—โ–ˆโ—363V3 (OUT)
GP4 (SDA)6โ—โ–ˆโ—35ADC_VREF
GP5 (SCL)7โ—โ–ˆโ—34GP28
GND8โ—โ–ˆโ—33GND
GP69โ—โ–ˆโ—32GP27
GP710โ—โ–ˆโ—31GP26
GP811โ—โ–ˆโ—30RUN
GP912โ—โ–ˆโ—29GP22
GND13โ—โ–ˆโ—28GND
GP1014โ—โ–ˆโ—27GP21
GP1115โ—โ–ˆโ—26GP20
GP1216โ—โ–ˆโ—25GP19
GP1317โ—โ–ˆโ—24GP18
GND18โ—โ–ˆโ—23GND
GP1419โ—โ–ˆโ—22GP17
GP1520โ—โ–ˆโ—21GP16
โ— GPIO โ— Ground โ— Power 3.3V โ— Power 5V โ— ADC

Connect: Pin 6 SDA Pin 7 SCL Pin 38 GND Pin 40 VBUS

Complete Beginner Guide: Step by Step

Never programmed before? No problem. Follow every step below and you'll have scrolling Pi digits in about 15 minutes.

๐Ÿ“ฅ Part A: Set Up Your Raspberry Pi Pico

A1. On your computer, download Thonny IDE โ€” click the big download button for your OS (Windows/Mac/Linux). Install it like any normal program.
A2. Download the MicroPython firmware: Go to micropython.org/download/rp2-pico and download the latest .uf2 file (it will be near the top of the page).
A3. Find the BOOTSEL button on your Pico โ€” it's the small white button on the board.
A4. Hold down BOOTSEL, and while holding it, plug the Pico into your computer with a USB cable. Then let go of the button.
A5. A new drive called "RPI-RP2" will appear on your computer (like a USB flash drive). Drag the .uf2 file you downloaded onto this drive. The Pico will reboot automatically โ€” the drive will disappear. That's normal!
A6. Open Thonny. Look at the bottom-right corner of the window. Click where it says the interpreter name and select "MicroPython (Raspberry Pi Pico)". If you see a >>> prompt at the bottom, you're connected! ๐ŸŽ‰
๐Ÿ’ก If Thonny doesn't see the Pico, try a different USB cable. Some cables are charge-only and don't carry data. You need a data cable.

๐Ÿ”Œ Part B: Wire the Breadboard (4 Wires)

You only need 4 jumper wires. The LCD module should already have the I2C backpack (small blue circuit board) soldered to the back.

B1. Place your Raspberry Pi Pico onto the breadboard. Push it in so the pins go into the holes. The USB port should face the edge of the board.
B2. Look at your Pico's pins. The USB port is at the top. Pin numbers go down both sides:
USB Port โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ” GP0 1 โ”‚โ— โ—โ”‚ 40 VBUS โ† 5V power! GP1 2 โ”‚โ— โ—โ”‚ 39 VSYS GND 3 โ”‚โ— โ—โ”‚ 38 GND โ† Ground! GP2 4 โ”‚โ— โ—โ”‚ 37 3V3_EN GP3 5 โ”‚โ— โ—โ”‚ 36 3V3 GP4 6 โ”‚โ— โ—โ”‚ 35 ADC_VREF GP5 7 โ”‚โ— โ—โ”‚ 34 GP28 GND 8 โ”‚โ— โ—โ”‚ 33 GND ...etc โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
B3. Now connect the 4 wires between the LCD and the Pico:

๐Ÿ”ด RED wire: LCD VCC pin โ†’ Pico Pin 40 (VBUS) โ€” this is the top-right pin, right next to the USB port. This gives the LCD 5 volts of power.

โšซ BLACK wire: LCD GND pin โ†’ Pico Pin 38 (GND) โ€” two pins down from VBUS on the right side. This is the ground connection.

๐Ÿ”ต BLUE wire: LCD SDA pin โ†’ Pico Pin 6 (GP4) โ€” this is on the LEFT side, 6th pin down from the USB port. This is the data line.

๐ŸŸก YELLOW wire: LCD SCL pin โ†’ Pico Pin 7 (GP5) โ€” right below the blue wire, 7th pin down on the left. This is the clock line.
B4. Double-check every connection. The most common mistake is plugging into the wrong pin. Count carefully from the USB port!
โš ๏ธ Important: VCC MUST go to VBUS (Pin 40) for 5V power. If you connect to 3V3 (Pin 36) instead, the LCD will be too dim to read or won't work at all.

๐Ÿ“š Part C: Upload the LCD Libraries

The LCD needs two small helper files saved directly on the Pico before the main script will work.

C1. In your web browser, go to: lcd_api.py on GitHub. Select all the text (Ctrl+A), copy it (Ctrl+C).
C2. In Thonny, click File โ†’ New. Paste the code (Ctrl+V). Then click File โ†’ Save As. A dialog will ask "Where to save?" โ€” click "Raspberry Pi Pico". Name the file exactly: lcd_api.py and click OK.
C3. Repeat for the second library: Go to pico_i2c_lcd.py on GitHub. Copy all text, paste into a new Thonny file, Save As on the Pico as pico_i2c_lcd.py.
๐Ÿ’ก These files must be saved on the Pico, not on your computer. When Thonny asks "Where to save?", always pick "Raspberry Pi Pico".

๐Ÿ” Part D: Test Your Wiring

D1. Download i2c_scan.py (or copy the code below).
D2. Open it in Thonny and click the green โ–ถ Run button.
D3. Look at the output in the bottom panel:
โœ… Found 1 device(s): Address: 0x27 โ€” Perfect! Wiring is correct.
โœ… Address: 0x3F โ€” Also fine, but you'll need to change one line in the main script (instructions below).
โŒ No I2C devices found! โ€” Check your wiring. Make sure VCC is on Pin 40 (VBUS), not Pin 36 (3V3).

๐Ÿš€ Part E: Run the Pi Scroller!

E1. Download pi_lcd.py and open it in Thonny.
E2. (Only if your LCD address was 0x3F): Find the line that says I2C_ADDR = 0x27 and change it to I2C_ADDR = 0x3F.
E3. Click the green โ–ถ Run button. You should see:
๐Ÿ“บ First: "Pi Day 2026! / ProTechTrader" splash screen for 3 seconds
๐Ÿ“บ Then: Pi digits scrolling across the top row: 3.14159265...
๐Ÿ“บ Bottom row: "Happy Pi Day!"
E4. To make it run automatically when you plug in the Pico (no computer needed): Save the file as main.py on the Pico. MicroPython automatically runs main.py on boot!
๐Ÿ’ก Screen shows boxes or nothing? Look at the back of the LCD โ€” there's a small blue dial (potentiometer). Turn it slowly with a screwdriver until text appears. This adjusts the contrast.
๐Ÿ’ก To stop the program: Click the red โ–  Stop button in Thonny, or unplug the Pico.

Pre-Setup: Upload Libraries First!

Download these two files and save them TO the Pico via Thonny (File โ†’ Save As โ†’ Raspberry Pi Pico):

lcd_api.py โ€” save as lcd_api.py on Pico
pico_i2c_lcd.py โ€” save as pico_i2c_lcd.py on Pico

Verify Wiring: i2c_scan.py

# i2c_scan.py รขโ‚ฌโ€ Find your LCD's I2C address
# Run this FIRST before pi_lcd.py to verify wiring!
# Most LCDs are 0x27, some are 0x3F

from machine import Pin, SoftI2C

i2c = SoftI2C(sda=Pin(4), scl=Pin(5), freq=400000)
devices = i2c.scan()

print("=== I2C Scanner ===")
if devices:
    print(f"Found {len(devices)} device(s):")
    for d in devices:
        print(f"  Address: {hex(d)} ({d})")
    print()
    if 0x27 in devices:
        print("LCD at 0x27 รขโ‚ฌโ€ default, no code changes needed!")
    elif 0x3F in devices:
        print("LCD at 0x3F รขโ‚ฌโ€ change I2C_ADDR in pi_lcd.py to 0x3F")
    else:
        print("Unexpected address รขโ‚ฌโ€ update I2C_ADDR in pi_lcd.py")
else:
    print("No I2C devices found!")
    print("Check wiring:")
    print("  SDA -> GP4 (Pin 6)")
    print("  SCL -> GP5 (Pin 7)")
    print("  VCC -> VBUS (Pin 40) รขโ‚ฌโ€ must be 5V!")
    print("  GND -> GND (Pin 38)")

Code: pi_lcd.py

# pi_lcd.py รขโ‚ฌโ€ Scroll Pi digits on 1602 LCD
# Pi Day TikTok Livestream รขโ‚ฌโ€ ProTechTrader Make: Radio Kit Demo
# PREREQ: Upload lcd_api.py and pico_i2c_lcd.py to Pico first!
# Upload this to Pico #2, run with Thonny

from machine import Pin, SoftI2C
from pico_i2c_lcd import I2cLcd
from time import sleep

# --- CONFIG ---
I2C_ADDR = 0x27    # Most common. Change to 0x3F if yours is different
I2C_ROWS = 2
I2C_COLS = 16
SDA_PIN = 4        # GP4 (Pin 6)
SCL_PIN = 5        # GP5 (Pin 7)
SCROLL_SPEED = 0.3 # Seconds between scroll steps

# --- SETUP ---
i2c = SoftI2C(sda=Pin(SDA_PIN), scl=Pin(SCL_PIN), freq=400000)
lcd = I2cLcd(i2c, I2C_ADDR, I2C_ROWS, I2C_COLS)

# First 100 digits of Pi
PI = ("3.14159265358979323846264338327950288419716939937510"
      "58209749445923078164062862089986280348253421170679")

def scroll_pi():
    """Scroll Pi digits across top row, static message on bottom"""
    lcd.move_to(0, 1)
    lcd.putstr(msg_display)
    
    pos = 0
    while True:
        display = ""
        for i in range(I2C_COLS):
            display += PI[(pos + i) % len(PI)]
        
        lcd.move_to(0, 0)
        lcd.putstr(display)
        
        pos = (pos + 1) % len(PI)
        sleep(SCROLL_SPEED)

def main():
    print("=== Pi Day LCD Display ===")
    print(f"Scrolling {len(PI)} digits of Pi")
    print(f"I2C Address: {hex(I2C_ADDR)}")
    print(f"SDA: GP{SDA_PIN}, SCL: GP{SCL_PIN}")
    print()
    
    lcd.clear()
    
    # Splash screen
    lcd.move_to(0, 0)
    lcd.putstr("  Pi Day 2026!  ")
    lcd.move_to(0, 1)
    lcd.putstr(" @ProTechTrader ")
    sleep(3)
    
    lcd.clear()
    scroll_pi()

main()

Software Setup

Step 1: Install Thonny IDE

Download from thonny.org โ€” Windows, Mac, and Linux

Step 2: Flash MicroPython on Pico

1. Hold the BOOTSEL button on the Pico
2. While holding, plug in the USB cable
3. Pico appears as a USB drive called "RPI-RP2"
4. Download the latest .uf2 firmware
5. Drag the .uf2 file onto the RPI-RP2 drive โ€” Pico reboots automatically

Step 3: Connect Thonny

Open Thonny โ†’ bottom-right corner โ†’ select "MicroPython (Raspberry Pi Pico)"

๐Ÿงฐ Everything Above Comes From One Kit

Two Raspberry Pi Picos โ€ข 1602 LCD โ€ข LEDs โ€ข Resistors โ€ข Breadboards โ€ข FM Radio Module โ€ข and more

Make: Radio Component Kit โ†’

๐Ÿ“บ Watch the LIVE Demo โ€” Mar 17 @ 2:30 PM EST

๐Ÿ›’ Get Everything You Need