Complete step-by-step guide for installing iRackPilot firmware on Raspberry Pi Pico W and Pico 2 W.
- Prerequisites
- Step 1: Install MicroPython
- Step 2: Upload Firmware Files
- Step 3: Configure WiFi
- Step 4: Verify Installation
- Step 5: Connect from iOS App
- Troubleshooting
- Advanced Configuration
Before you begin, ensure you have:
- ✅ Raspberry Pi Pico W or Pico 2 W device
- ✅ USB cable (data-capable, not charge-only)
- ✅ Computer with USB port (Windows, Mac, or Linux)
- ✅ WiFi network credentials (SSID and password)
- ✅ Internet connection (for downloading MicroPython)
- ✅ IPMI-enabled server (for testing after installation)
- MicroPython (will be downloaded in Step 1)
- Thonny IDE (recommended) or alternative:
- Thonny - Easiest option
rshell- Command-line toolampy- Adafruit MicroPython tool
MicroPython is the Python runtime that runs on the Pico. We need to flash it first.
For Raspberry Pi Pico W:
- Visit: https://micropython.org/download/rp2-pico-w/
- Download the latest
.uf2file (e.g.,rp2-pico-w-20231005-v1.21.0.uf2)
For Raspberry Pi Pico 2 W:
- Visit: https://micropython.org/download/rp2-pico-w/
- Look for Pico 2 W specific version or use the latest Pico W version
- Download the
.uf2file
Note: The file will be named something like
rp2-pico-w-YYYYMMDD-vX.XX.X.uf2
- Locate the BOOTSEL button on your Pico (usually on the side)
- Hold down the BOOTSEL button (don't release yet)
- While holding BOOTSEL, connect the USB cable to your computer
- Release the BOOTSEL button after connecting
- A drive named RPI-RP2 should appear on your computer
Troubleshooting: If RPI-RP2 doesn't appear:
- Try a different USB cable (must support data transfer)
- Try a different USB port
- Hold BOOTSEL longer before connecting
- On Windows, check Device Manager for unrecognized devices
- Open the RPI-RP2 drive (it should be empty or contain
INDEX.HTMandINFO_UF2.TXT) - Drag and drop the downloaded
.uf2file into the RPI-RP2 drive - The Pico will automatically reboot and the RPI-RP2 drive will disappear
- MicroPython is now installed! ✅
Note: The RPI-RP2 drive disappearing is normal - it means MicroPython is running.
Now we'll upload the iRackPilot firmware files to your Pico.
-
Download Thonny:
- Visit: https://thonny.org/
- Download for your operating system (Windows/Mac/Linux)
- Install Thonny
-
Open Thonny
-
Connect your Pico to the computer via USB (no need to hold BOOTSEL this time)
-
In Thonny, go to Tools > Options > Interpreter
-
Select "MicroPython (Raspberry Pi Pico)" from the dropdown
-
Select the correct Port (usually auto-detected):
- Windows:
COM3,COM4, etc. - Mac/Linux:
/dev/tty.usbmodem*or/dev/ttyACM0
- Windows:
-
Click OK
-
Test connection:
- In the Shell/REPL at the bottom, type:
print("Hello Pico!") - Press Enter
- You should see
Hello Pico!printed
- In the Shell/REPL at the bottom, type:
-
Navigate to firmware directory:
- For Pico W:
firmware/pico-w/ - For Pico 2 W:
firmware/pico-2-w/
- For Pico W:
-
Upload each file:
- Open
boot.pyin Thonny - Go to File > Save As...
- Select "Raspberry Pi Pico" from the location dropdown
- Save as
boot.py - Repeat for these files:
- ✅
boot.py - ✅
main.py - ✅
http_server.py - ✅
ipmi_client.py - ✅
ipmi_protocol.py - ✅
script_engine.py
- ✅
- Open
-
Verify files uploaded:
- In Thonny, go to View > Files
- You should see all 6 files listed
# Install rshell
pip install rshell# Linux/Mac
rshell -p /dev/ttyACM0
# Windows
rshell -p COM3
# Auto-detect port
rshell# Navigate to firmware directory
cd firmware/pico-w # or pico-2-w
# Copy files to Pico
cp boot.py /pyboard/
cp main.py /pyboard/
cp http_server.py /pyboard/
cp ipmi_client.py /pyboard/
cp ipmi_protocol.py /pyboard/
cp script_engine.py /pyboard/
# Verify files
ls /pyboard/pip install adafruit-ampy# Upload each file
ampy --port /dev/ttyACM0 put boot.py
ampy --port /dev/ttyACM0 put main.py
ampy --port /dev/ttyACM0 put http_server.py
ampy --port /dev/ttyACM0 put ipmi_client.py
ampy --port /dev/ttyACM0 put ipmi_protocol.py
ampy --port /dev/ttyACM0 put script_engine.py
# Windows users: replace /dev/ttyACM0 with COM3 (or your port)Your Pico needs WiFi credentials to connect to your network.
- Open
main.pyon your Pico (using Thonny or your editor) - Find these lines:
WIFI_SSID = "YOUR_WIFI_SSID" WIFI_PASSWORD = "YOUR_WIFI_PASSWORD"
- Replace with your WiFi credentials:
WIFI_SSID = "MyWiFiNetwork" WIFI_PASSWORD = "MyPassword123"
- Save the file to your Pico
- Restart the Pico (unplug and replug USB, or press reset button)
If you don't want to edit files, the Pico will create its own WiFi network:
- Don't set WiFi credentials in
main.py(leave asYOUR_WIFI_SSID) - Power on the Pico
- Look for WiFi network:
iRackPilot-XXXX(where XXXX is last 4 digits of MAC address) - Connect with password:
iRackPilot123 - Pico IP address:
192.168.4.1 - Note: In AP mode, your iOS device must connect to the Pico's network to communicate
Tip: AP mode is useful for initial setup, but STA mode (Method 1) is better for regular use.
Let's make sure everything is working!
- Open Thonny (or your serial monitor)
- Connect to Pico (if not already connected)
- Look at the Shell/REPL output
You should see:
iRackPilot Firmware Booting...
Connecting to MyWiFiNetwork...
Connected to WiFi. IP: 192.168.1.100
iRackPilot firmware v1.0.0 started
HTTP server listening on 192.168.1.100:8080
Important: Note the IP address shown (e.g.,
192.168.1.100) - you'll need this!
Option A: Using Browser
- Open a web browser
- Navigate to:
http://[PICO_IP]:8080/status- Replace
[PICO_IP]with the IP from Step 4.1 - Example:
http://192.168.1.100:8080/status
- Replace
- You should see JSON response:
{ "status": "ready", "firmware_version": "1.0.0", "wifi_connected": true, "ip_address": "192.168.1.100", "model": "Pico W" }
Option B: Using curl (Command Line)
curl http://192.168.1.100:8080/statusOption C: Using Thonny
import urequests
response = urequests.get("http://192.168.1.100:8080/status")
print(response.text)In Thonny, check that all files are present:
- Go to View > Files
- You should see:
- ✅
boot.py - ✅
main.py - ✅
http_server.py - ✅
ipmi_client.py - ✅
ipmi_protocol.py - ✅
script_engine.py
- ✅
Now connect your iOS app to the Pico!
From Step 4.1, you should have the IP address. If you missed it:
- Check serial output in Thonny
- Or test the status endpoint (Step 4.2) - it shows the IP
- Open iRackPilot app on your iPhone/iPad
- Go to Devices tab
- Tap the + button
- Enter device information:
- Name:
My Pico Device(or any name) - IP Address:
192.168.1.100(your Pico's IP) - Port:
8080(default) - Model: Select
Pico WorPico 2 W
- Name:
- Tap Connect or Save
- Tap on your device in the Devices list
- Connection status should change to "Connected"
- Device details should be displayed
- Go to Servers tab in the app
- Add an IPMI server:
- Name:
My Server - Host: IPMI server IP (e.g.,
192.168.1.50) - Port:
623(default IPMI port) - Username: Your IPMI username
- Password: Your IPMI password
- Vendor: Select
HP,Dell, orGeneric
- Name:
- Tap Connect
- Server should connect through your Pico device
Symptoms: RPI-RP2 drive doesn't appear when holding BOOTSEL
Solutions:
- ✅ Try a different USB cable (must support data, not charge-only)
- ✅ Try a different USB port (prefer USB 2.0 ports)
- ✅ Hold BOOTSEL longer (2-3 seconds) before connecting
- ✅ On Windows: Check Device Manager for unrecognized devices
- ✅ Try a different computer
- ✅ Ensure Pico is getting power (LED should light up)
Symptoms: UF2 file doesn't flash, or Pico doesn't reboot
Solutions:
- ✅ Ensure you're using the correct UF2 file for your Pico model
- ✅ Try downloading MicroPython again (file might be corrupted)
- ✅ Check file size (should be several MB)
- ✅ Try a different USB cable
- ✅ Format RPI-RP2 drive if it appears but flashing fails
Symptoms: Pico doesn't connect to WiFi, or shows "Failed to connect"
Solutions:
- ✅ Verify SSID and password are correct (case-sensitive!)
- ✅ Check WiFi frequency: Pico W only supports 2.4GHz (not 5GHz)
- ✅ Check router settings:
- MAC address filtering (disable or add Pico's MAC)
- Hidden SSID (Pico can't connect to hidden networks)
- WPA3 (use WPA2 instead)
- ✅ Move closer to router (weak signal)
- ✅ Try AP mode to verify Pico WiFi is working
- ✅ Check serial output for specific error messages
Symptoms: Can't access http://[IP]:8080/status
Solutions:
- ✅ Verify IP address is correct (check serial output)
- ✅ Check firewall settings on your computer/router
- ✅ Ensure Pico and computer are on same network
- ✅ Try different port (edit
HTTP_PORTinmain.py) - ✅ Check serial output for errors
- ✅ Restart Pico (unplug/replug USB)
- ✅ Test with curl instead of browser
Symptoms: Errors like "ModuleNotFoundError" or "ImportError"
Solutions:
- ✅ Verify all files uploaded (check file list in Thonny)
- ✅ Check file names match exactly (case-sensitive)
- ✅ Ensure files are in root directory (not in subfolders)
- ✅ Restart Pico after uploading files
- ✅ Re-upload missing files
Symptoms: Can't connect to IPMI server through Pico
Solutions:
- ✅ Verify Pico is connected first (check Devices tab)
- ✅ Check IPMI server credentials (username/password)
- ✅ Verify IPMI server IP and port are correct
- ✅ Ensure IPMI is enabled on the server
- ✅ Check network connectivity between Pico and IPMI server
- ✅ Verify firewall allows port 623 (IPMI port)
- ✅ Test IPMI server with another tool (e.g.,
ipmitool) - ✅ Check serial output for specific error messages
Symptoms: Scripts fail to execute
Solutions:
- ✅ Verify script syntax is correct
- ✅ Check language support (Python works, JS needs engine)
- ✅ Ensure Pico is connected before executing
- ✅ Check script size (Pico has limited memory)
- ✅ Review execution output for specific errors
Symptoms: Can't find or connect to Pico from app
Solutions:
- ✅ Verify Pico and iOS device are on same WiFi network
- ✅ Check IP address is correct
- ✅ Ensure HTTP server is running (check serial output)
- ✅ Test status endpoint from browser first
- ✅ Check iOS device firewall/VPN settings
- ✅ Try AP mode if networks are different
Edit main.py:
HTTP_PORT = 8080 # Change to any port (e.g., 9000)Add to main.py:
DEBUG = TrueThen add debug prints throughout code for troubleshooting.
Edit main.py:
AP_MODE_SSID = "MyCustomName"
AP_MODE_PASSWORD = "MyCustomPassword"Edit ipmi_client.py:
self.connection_timeout = 10 # Seconds
self.retry_count = 3 # Number of retry attemptsFor advanced users, you can configure static IP in main.py:
import network
wlan = network.WLAN(network.STA_IF)
wlan.ifconfig(('192.168.1.100', '255.255.255.0', '192.168.1.1', '8.8.8.8'))After successful installation:
-
✅ Test IPMI Connection
- Add IPMI server in iOS app
- Connect through Pico
- Verify server information displays
-
✅ Test Console/KVM
- Start console session
- View remote screen
- Test keyboard input
-
✅ Execute Scripts
- Create test script
- Execute via iOS app
- Review output
-
✅ Monitor Status
- Check connection statistics
- View uptime/downtime
- Monitor notifications
- 📖 Firmware Reference - Complete API documentation
- 🔧 Build UF2 Guide - Creating custom UF2 files
- 💬 Support Page - Help and troubleshooting
- 📱 Firmware Page - Firmware information
- 🐙 GitHub Repository - Source code
# Test HTTP server
curl http://[PICO_IP]:8080/status
# Check Pico files (rshell)
rshell -p /dev/ttyACM0
ls /pyboard/
# Upload file (ampy)
ampy --port /dev/ttyACM0 put main.py-
boot.pyuploaded -
main.pyuploaded and configured -
http_server.pyuploaded -
ipmi_client.pyuploaded -
ipmi_protocol.pyuploaded -
script_engine.pyuploaded - WiFi credentials configured
- HTTP server responding
- iOS app can connect
- HTTP Port: 8080
- AP Mode SSID:
iRackPilot-XXXX - AP Mode Password:
iRackPilot123 - AP Mode IP: 192.168.4.1
- IPMI Port: 623
If you encounter issues not covered in this guide:
- Check the Troubleshooting section
- Review Support Page
- Check serial output for error messages
- Open an issue on GitHub
Congratulations! 🎉 You've successfully installed iRackPilot firmware on your Pico device!