A couple years ago at PyCon I received a kit from Adafruit containing the Circuit Playground Express. After going through the Hello World examples I boxed it up I didn't have a project ready to go. Fast forward to the winter of 2018 when I decided I would like to be able to start our Roomba away from home because of the noise it makes, and suddenly I had the project I was looking for. Digging around I found out about the Roomba Open Interface and set out to start talking to my Roomba with CircuitPython.
Will this work?
After reading through the Open Interface spec I decided it should be possible for me to control the Roomba by using the Circuit Playground Express that I had waiting on the shelf. Getting the kit out and using the clips available I connected the Playground Express TX to the Roomba RX, opened a REPL and tried to wake the Roomba, but received no response.
After some more searching I found out that certain series firmware will not respond to wake commands after 5 minutes without a signal. Knowing this, and pressing the power button once to wake the Roomba, I was able to START, STOP and DOCK the Roomba with controller code running on the Playground Express.
After spending some more time confirming command structures, documentation and behavior between CircuitPython and the Roomba Open Interface I decided to make things easier by building a package to abstract the interactions. With basic wiring and command functionality confirmed I decided it was time to start looking at making remote signalling covered in part 2.