Wi-Fi Control with the Raspberry Pi Pico W

Control your robot using a smartphone or browser over Wi-Fi with the Raspberry Pi Pico W.

By Kevin McAleer,    2 Minutes

Page last updated May 10, 2025


Cover


Bluetooth is great, but with the Pico W, you can control your robot over Wi-Fi — even from a browser on your phone or computer. In this lesson, we’ll host a simple web interface that sends commands to your robot in real time.


📡 What You’ll Need

  • Raspberry Pi Pico W (instead of the standard Pico)
  • A 2.4GHz Wi-Fi network
  • Smartphone or computer with a modern browser

⚠️ This lesson requires the rp2-pico-w MicroPython firmware (with networking support).


🔌 Basic Setup

Update your Pico W with the latest MicroPython firmware, then connect it to Wi-Fi:

import network
import time

ssid = 'YOUR_SSID'
password = 'YOUR_PASSWORD'

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect(ssid, password)

while not wlan.isconnected():
    time.sleep(1)

print('Connected, IP:', wlan.ifconfig()[0])

🌐 Serve a Web Page for Control

This example creates a web server that lets you send movement commands by clicking buttons:

import socket

html = """<!DOCTYPE html>
<html>
<head><title>Robot Control</title></head>
<body>
<h2>Robot Control Panel</h2>
<form>
<button name="cmd" value="f">Forward</button>
<button name="cmd" value="b">Backward</button><br><br>
<button name="cmd" value="l">Left</button>
<button name="cmd" value="r">Right</button><br><br>
<button name="cmd" value="s">Stop</button>
</form>
</body>
</html>
"""

addr = socket.getaddrinfo('0.0.0.0', 80)[0][-1]

s = socket.socket()
s.bind(addr)
s.listen(1)

print("Listening on", addr)

while True:
    cl, addr = s.accept()
    print("Client connected:", addr)
    request = cl.recv(1024).decode()
    print("Request:", request)

    if '/?cmd=f' in request:
        forward()
    elif '/?cmd=b' in request:
        backward()
    elif '/?cmd=l' in request:
        left()
    elif '/?cmd=r' in request:
        right()
    elif '/?cmd=s' in request:
        stop()

    cl.send('HTTP/1.0 200 OK\r\nContent-type: text/html\r\n\r\n')
    cl.send(html)
    cl.close()

Make sure to define forward(), backward(), etc., from earlier lessons.


🧪 Test It Out

  • Connect the Pico W to Wi-Fi
  • Open the IP address shown in the REPL on your phone’s browser
  • Use the buttons to control your robot!

🧩 Try It Yourself

  • Add more buttons (e.g., for speed control)
  • Style the interface with CSS
  • Use AJAX for real-time control without reloading

Now your robot has a wireless dashboard, ready to drive from across the room!

Next up: Creating Simple Autonomous Behavior


< Previous Next >