Heat Seeking Beverage Bot

What if your robot vacuum could do more than just clean your floor?
What if it could bring you a cold one — and find you using thermal vision?
In this project, you’ll transform an ordinary Roomba into a fully functional beverage delivery robot powered by a Raspberry Pi Pico W, equipped with a thermal camera, distance sensor, and Wi-Fi remote control using Adafruit IO.
Whether you’re into hardware hacking, looking for a creative final project, or just want to surprise your roommates with a beverage butler — this guide will walk you through everything you need to build it, step by step.
This project uses publicly available controls that IRobot has published in order to control the robot via UART. This enables one to program the Roomba to move, chime, vacuum, and much more. Which UART controls do what is available here (This spec sheet says it is for the create 2, but it works for any Roomba that was produced after 2015 that has an sci port)
Supplies
Roomba 600/800 Series
- Roomba vacuum with accessible serial port (Create 2 preferred)
- [Find on eBay/Facebook Marketplace, buying a new one is a waste of money]
Raspberry Pi Pico W
- Microcontroller with Wi-Fi
- Adafruit Pico W
Adafruit AMG8833 Thermal Camera
- 8×8 IR grid to detect humans
- Adafruit AMG8833
Adafruit VL53L1X Time-of-Flight Sensor
- Distance sensor to avoid obstacles
- Adafruit VL53L1X
STEMMA QT Cables
- Easy plug-and-play wires, you are going to need two of these, and one should have male headers if you are using a breadboard
- STEMMA QT Cable
5V USB Powered Battery
- To safely power the Pico
- USB 5V Battery Pack (Amazon)
Laser-Cut Box
- To build a protective box for electronics
- (or your local makerspace!)
Install CircuitPython to Your Pico W
- Download CircuitPython UF2 for Pico W here.
- Hold BOOTSEL and plug Pico into USB.
- Drag and drop the .uf2 onto "RPI-RP2" drive.
Pico W will reboot into CIRCUITPY mode.
Install Necessary Libraries
- Download the CircuitPython Library Bundle here.
- Copy these folders into /lib:
- adafruit_amg88xx
- adafruit_vl53l1x
- adafruit_minimqtt
- adafruit_io
- adafruit_connection_manager
- adafruit_requests
- wifi
Sensors and Wi-Fi will now be able to work.
Create an Adafruit IO Account
- Go to https://io.adafruit.com/
- Click Sign Up and create a free account.
- Once logged in:
- Click on your Profile (top-right).
- Go to My Key.
- Copy down your:
- Username
- AIO Key
Save these somewhere safe — you’ll need them soon.
Set Up Your Settings.toml File on the Pico
On the CIRCUITPY drive, create a settings.toml file (plain text) with:
✅ Replace the placeholders with your real info.
Upload the Code to Your Rasberry Pi Pico
Use any text editor (like Mu or VS Code) and open the file called code.py that contains the final version of the project code (located here).
Save it directly to the Pico as code.py.
Set Up Adafruit IO Feeds


You must create feeds for the Roomba to listen to:
- Go to https://io.adafruit.com/
- Click Feeds ➔ New Feed.
- Create one feed called exactly: "roomba-steering"
Now create a control dashboard to send commands easily!
- In Adafruit IO:
- Go to Dashboards ➔ New Dashboard.
- Name it something like: Roomba Controller.
- Inside the Dashboard:
- Click + ➔ Button widget.
- Add the Following Buttons:
Button Label: Forward
Feed: roomba-steering
Button Text Value: forward
Button Label: Backward
Feed: roomba-steering
Button Text Value: backward
Button Label: Left
Feed: roomba-steering
Button Text Value: left
Button Label: Right
Feed: roomba-steering
Button Text Value: right
Button Label: Stop
Feed: roomba-steering
Button Text Value: stop
Button Label: Search Left
Feed: roomba-steering
Button Text Value: search_left
Button Label: Search Right
Feed: roomba-steering
Button Text Value: search_right
Button Label: Seek Forward
Feed: roomba-steering
Button Text Value: seek_forward
I formatted my dashboard to look like the image above for easy control. But yours can look however you like. Additionally, make sure to not have a release value as this increases the risk adafruit io throttling.
Important Note:
If you use a free Adafruit IO account you will be limited in the number of commands you can send every minute. This can lead to "throttling", which is where the robot will stop receiving data and only carry out the last command. I had this happen to me during my initial testing, which is what is occurring in the embedded video above.
Wiring the Setup




Background:
Your Roomba has an Open Interface (OI) port — a small 7-pin mini-DIN connector (round, like an old keyboard/mouse plug). It allows serial communication at 115200 baud.
You’ll use 3 wires:
- TX from Pico ➜ goes to RX on Roomba
- RX from Pico ➜ goes to TX on Roomba
- GND to GND
- Power for the Pico will come separately (from your 5V USB buck converter — not the serial port).
Overview of Connections
We’ll be wiring:
- UART (serial): Roomba ⇄ Pico W
- I2C: Sensors ⇄ Pico W
- Power: 5V Power Bank ➝ Pico W USB
What You’ll Need:
- Raspberry Pi Pico W
- Roomba 600/800 series or Create 2
- Roomba SCI serial cable (or DIY Mini-DIN 7 cable)
- STEMMA QT cables (for sensors)
- 5V USB power bank + USB cable (to power Pico)
- Jumper wires or header pins
Roomba to Pico W Wiring
Use the Roomba’s 7-pin serial port (on the top of the vacuum).
*I have attached a wiring diagram labelling the roomba's SCI port below
You can find premade cables online, or DIY one using a Mini-DIN 7 connector.
Power the Pico using a standard USB power bank:
- Plug the power bank into the Pico’s USB port (same port you use to program it)
- Mount or tape the power bank inside or under your box
The Roomba does not power the Pico. Keep the power bank fully charged before testing.
Sensor Wiring (I2C - Shared Bus)
You’ll connect both sensors to the Pico W using STEMMA QT cables or jumper wires.
Thermal Sensor (AMG8833) and Distance Sensor (VL53L1X):
These sensors use the same I2C bus, so they can be daisy-chained together.
Face the sensors forward (toward the human target).
When you plug everything in and start the Roomba, the Pico will:
- Send the startup serial commands
- Play a chime
- Begin listening for dashboard controls
You’re now wired up and ready to test!
Laser Cutting the Box
Now it’s time to build and mount the enclosure that holds all your electronics.
1. Laser Cut the Box
Use the provided SVG files to laser cut the enclosure panels out of 1/4” (3mm) wood. (The files are available here it is all the files that end in .ai)
- These files are pre-sized to fit securely on top of the Roomba
- The design includes:
- Cutouts for the sensors
- Clearance for the Roomba’s CLEAN button
- Space for the Pico W and USB power bank
- An interior box to protect the Pico W from the Beverages
2. Assemble the Box
- Use hot glue or another strong adhesive to attach all the panels together
- Let the glue fully cure before mounting the box to the robot
3. Mount the Box to the Roomba
- Attach the finished box to the top of the Roomba using heavy-duty Velcro
- Make sure the box sits flat and does not block any critical Roomba sensors or buttons
4. Mount the Sensors
- The thermal sensor (AMG8833) and distance sensor (VL53L1X) should be placed in the front-facing cutoutson the box
- Secure the sensors behind the cutouts using hot glue or small screws
- Make sure the sensors are aligned and not obstructed by the enclosure
After this step, everything should be wired, mounted, and ready to go. You’re ready to test your dashboard and start delivering beverages!
Additional Info and Comments

Here is some of my testing footage. This test shows a much more stripped down and affordable version of the beverage bot. With a couple wires and a pico w you can pretty easily remote control the roomba. This avoids the expense of the thermal sensor, it just increases the risk of the roomba throttling.
Another upgrade that I would have done if I was more had more time, money, and was more knowledgeable when it comes to batteries is that I would have used a 5v Buck converter to power the pico w directly off the roomba.
Also special thanks to the YouTuber Sam Meech-Ward who talked about using a pico w to control his roomba through the SCI port in his video here (Beginning at 20:45). Without this I would have had to either create my own robot from scratch for this project or I was planning on completely remaking the roomba as he had done earlier in the video. This saved me a ton of time, money, and energy.