{"id":5225,"date":"2026-09-14T09:42:00","date_gmt":"2026-09-14T14:42:00","guid":{"rendered":"https:\/\/lab.rapternet.us\/?p=5225"},"modified":"2026-08-17T21:13:56","modified_gmt":"2026-08-18T02:13:56","slug":"roomba-brain-surgery","status":"publish","type":"post","link":"https:\/\/lab.rapternet.us\/?p=5225","title":{"rendered":"Roomba Brain Surgery"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">After learning that the original Roomba models have an open serial port with a fully documented API, I just had to try out using it. I pulled the lid off my old Roomba 670, trying not to break any plastic clips and right there it was, the serial port ripe for the hardware hacker. What can it be used for? Just about anything related to driving around the roomba, running the vacuum, and reading sensor data from the robot.<\/p>\n\n\n\n<!--more-->\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"769\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260728_0032068175020160279260628410-1024x769.jpg\" alt=\"\" class=\"wp-image-5227\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260728_0032068175020160279260628410-1024x769.jpg 1024w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260728_0032068175020160279260628410-300x225.jpg 300w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260728_0032068175020160279260628410-768x577.jpg 768w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260728_0032068175020160279260628410-1536x1154.jpg 1536w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260728_0032068175020160279260628410.jpg 2000w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption class=\"wp-element-caption\">Open Roomba Serial Port<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Now what did I want to do with it? The model that I have is pretty dumb, it bonks around a room until it runs out of battery and then it keeps bonking around until it finds the base station or runs out of battery entirely. What if I could slap a raspberry pi on top with a camera to detect cords (another major thing it loves doing is eating cords) and lidar (as a cool stretch goal to use) to actually map the room and return to the base when done (and maybe a few other sensors as needed too). For the first step in this direction, we need something to adapt to the serial port on the roomba and at least some basic software that can drive the roomba in order to validate that everything is working as expected.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Parts<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To start out the project, I wanted to use mostly components that I already owned and minimize purchases for the project. Due to this, I used a level shifter and capacitor combo that I use for WLED, an old raspberry pi 3, a buck converter that I picked up for another project and miscellaneous resistors. The only thing I purchased was the 8 pin mini din cable to hook into the Roomba.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/amzn.to\/3TOMXGe\" target=\"_blank\" rel=\"noreferrer noopener\">Level shifter<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/amzn.to\/4wMCgT4\" target=\"_blank\" rel=\"noreferrer noopener\">Buck converter<\/a><\/li>\n\n\n\n<li>Raspberry pi 3<\/li>\n\n\n\n<li>2 x 1k ohm resistor<\/li>\n\n\n\n<li>3 x 330 ohm resistors <\/li>\n\n\n\n<li><a href=\"https:\/\/amzn.to\/4fUj0Mk\" target=\"_blank\" rel=\"noreferrer noopener\">Capacitor (100 nf)<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/amzn.to\/4hXvAwV\" target=\"_blank\" rel=\"noreferrer noopener\">8 pin mini din cable<\/a><\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Converter Board Design and Assembly<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Starting with the voltage divider. This will be used to drop the Roomba outgoing data line from 5v to work with the raspberry pi 3.3v GPIO RX line for the serial port. Figuring out the resistor values can be done with the following equation.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"384\" height=\"140\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/image-2.png\" alt=\"\" class=\"wp-image-5264\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/image-2.png 384w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/image-2-300x109.png 300w\" sizes=\"auto, (max-width: 384px) 100vw, 384px\" \/><figcaption class=\"wp-element-caption\">Voltage Divider Equation<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I found that using a 1000 ohm for R1 and 1900 ohm resistor for R2 got me pretty close to the desired results. Since I was also building the circuit out of whatever I had lying around, I ended up using a 1k ohm resistor on both sides, with 3 x 330 ohm resistors on R2 to bump that up to around 1900 ohms (a little bit more but it would be within reason for the PI to be able to handle that smaller voltage difference, measuring it I ended up at like 1940 ohms).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Below is the diagram for the voltage divider. Vin is the Roomba incoming data line (+), Gnd from the serial port, Vout is the Pi incoming data line.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"286\" height=\"336\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/image-1.png\" alt=\"\" class=\"wp-image-5263\" style=\"width:268px;height:auto\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/image-1.png 286w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/image-1-255x300.png 255w\" sizes=\"auto, (max-width: 286px) 100vw, 286px\" \/><figcaption class=\"wp-element-caption\">Voltage Divider<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Next up, we have the level shifter. We&#8217;ll be using the WLED designs since that&#8217;s where I have experience with them. The GPIO in will be from the raspberry pi TX pin for the detail connection with the data out going to the Roomba serial connection. I didn&#8217;t include the 62 ohm resistor in my build and everything seemed to work fine (if things didn&#8217;t work, I&#8217;d have added it into my build).<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"835\" height=\"674\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/image.png\" alt=\"\" class=\"wp-image-5262\" style=\"aspect-ratio:1.2388567505243324;width:391px;height:auto\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/image.png 835w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/image-300x242.png 300w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/image-768x620.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption class=\"wp-element-caption\">Level Shifter<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Putting it all together into a single diagram with the raspberry pi GPIO connector, we get this.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1000\" height=\"1000\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/roomba-circuit.png\" alt=\"\" class=\"wp-image-5261\" style=\"width:617px;height:auto\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/roomba-circuit.png 1000w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/roomba-circuit-300x300.png 300w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/roomba-circuit-150x150.png 150w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/roomba-circuit-768x768.png 768w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/roomba-circuit-100x100.png 100w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption class=\"wp-element-caption\">Full Circuit<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">For assembly, <strong>do not <\/strong>connect the buck converter positive output to anything to start out with. During the first hardware test, we&#8217;ll adjust the buck converter output to 5v so that it doesn&#8217;t damage the raspberry pi or level shifter, after which we&#8217;ll connect to it.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"769\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260802_2141536237279863994966445410-1024x769.jpg\" alt=\"\" class=\"wp-image-5224\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260802_2141536237279863994966445410-1024x769.jpg 1024w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260802_2141536237279863994966445410-300x225.jpg 300w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260802_2141536237279863994966445410-768x577.jpg 768w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260802_2141536237279863994966445410-1536x1154.jpg 1536w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/pxl_20260802_2141536237279863994966445410.jpg 2000w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption class=\"wp-element-caption\">Completed baseline serial board<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Hardware Test 1: Does my Circuit Short Out <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">My first test with the hardware was simply hooking up my converter board to the Roomba serial port. During this I made sure nothing was fried and I tuned my buck converter to output 5v. With the Roomba and board still working, I was happy with my initial design and build so far. I just had a few more steps before hooking it up to the raspberry pi. After ensuring the buck was outputting 5v, then I soldered the positive end of it onto the level shifter.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Raspberry Pi Serial Config<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before going to the next hardware test, I needed to configure the software for the raspberry pi. The goal of the next test is to get data out of the roomba serial connection.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I couldn&#8217;t get ubuntu to work on my first go around (probably due to a bad micro SD card) as it got corrupted multiple times. I then swapped micro sd&#8217;s so hopefully that makes it a bit more stable, and swapped to raspbian since the guides I had were more complete for that operating system. I also plan to boot from a SSD over USB for my operating system, but need the adapter first (so we have yet another stretch goal).<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>sudo apt update &amp;&amp; sudo apt upgrade -y<\/strong><\/li>\n\n\n\n<li><strong>sudo raspi-config<\/strong> -&gt; serial port\n<ul class=\"wp-block-list\">\n<li>enable serial port hardware<\/li>\n\n\n\n<li> disable login shell<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>reboot<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">My plan was to use this <a href=\"https:\/\/github.com\/almargolis\/roomba\">python package to run the roomba <\/a>for testing, making sure all the hardware was working together. To do this, I needed to do the following:<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">sudo apt install python3 python3-pip pipx<br>pipx install create-serial<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">I also gave my user the <em>tty<\/em> and <em>dialout<\/em> groups in linux.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hardware Test 2: Communication with the Pi<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Now that the software should be ready, we have one command to run while everything is hooked up to see if we get a good connection to the roomba.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">roomba-cli \/dev\/serial0<\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">The first attempt failed to connect to the Roomba, so I swapped the Roomba side Tx\/Rx pins and then the connection was successful. I found that the original pinout I found for the roomba was mirrored, my diagrams reflect the pinout I found to be correct for the serial port.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1922\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260804_223502465_smol-scaled.jpg\" alt=\"\" class=\"wp-image-5243\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260804_223502465_smol-scaled.jpg 2560w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260804_223502465_smol-300x225.jpg 300w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260804_223502465_smol-1024x769.jpg 1024w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260804_223502465_smol-768x577.jpg 768w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260804_223502465_smol-1536x1153.jpg 1536w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260804_223502465_smol-2048x1538.jpg 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">With the wiring updated, I hooked it all back up and tried one more time. This time around, it worked, got a live feed of the signals coming out. The application provided a small blurb with all the controls to the roomba, and then data started feeding through it from the roomba&#8217;s various sensors<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">--- Roomba CLI Controller ---<br>&nbsp; w\/s&nbsp; \u2014 forward \/ backward (toggle, press again to stop)<br>&nbsp; a\/d&nbsp; \u2014 rotate left \/ right (toggle, press again to stop)<br>&nbsp; x&nbsp;&nbsp;&nbsp; \u2014 stop all movement<br>&nbsp; +\/-&nbsp; \u2014 increase \/ decrease speed<br>&nbsp; m&nbsp;&nbsp;&nbsp; \u2014 toggle main brush<br>&nbsp; v&nbsp;&nbsp;&nbsp; \u2014 toggle vacuum<br>&nbsp; o&nbsp;&nbsp;&nbsp; \u2014 toggle side brush<br>&nbsp; space \u2014 reset pose<br>&nbsp; q&nbsp;&nbsp;&nbsp; \u2014 quit<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"996\" height=\"481\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/screenshot_20260803_2128071786224238869175602.png\" alt=\"\" class=\"wp-image-5223\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/screenshot_20260803_2128071786224238869175602.png 996w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/screenshot_20260803_2128071786224238869175602-300x145.png 300w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/screenshot_20260803_2128071786224238869175602-768x371.png 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption class=\"wp-element-caption\">Roomba Sensor Feed<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I couldn&#8217;t get it to turn on the wheels or vacuum while sitting in my lap, but research had said that you can&#8217;t command the vacuum to do something it wouldn&#8217;t do in that situation, so you can&#8217;t override the sensors to make it drive down your stairs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I was able to see my interactions with the Roomba sensors live in the terminal though. Bumping the front, covering different cliff sensors, all gave feedback. So from that I knew we had a good connection.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Hardware Test 3: Powering the Pi <\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">I had one more test to perform, with one more tweak to my wiring, I needed to hook up the raspberry pi 5v and ground to the buck converter. I wanted to run the entire setup off the roomba battery, but I wasn&#8217;t sure if the connections would overheat from the power draw. I could then run the entire setup and use my thermal camera to check on temperatures to make sure nothing overheated.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"240\" height=\"320\" data-id=\"5240\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/IR20260805185301-rotated.jpeg\" alt=\"\" class=\"wp-image-5240\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/IR20260805185301-rotated.jpeg 240w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/IR20260805185301-225x300.jpeg 225w\" sizes=\"auto, (max-width: 240px) 100vw, 240px\" \/><figcaption class=\"wp-element-caption\">Raspberry pi and buck converter<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"240\" height=\"320\" data-id=\"5241\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/IR20260805185307-rotated.jpeg\" alt=\"\" class=\"wp-image-5241\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/IR20260805185307-rotated.jpeg 240w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/IR20260805185307-225x300.jpeg 225w\" sizes=\"auto, (max-width: 240px) 100vw, 240px\" \/><figcaption class=\"wp-element-caption\">Buck converter<\/figcaption><\/figure>\n<\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">From the thermal images, everything looked good, the hottest part was the raspberry pi CPU surprising nobody. The buck converter was also under 100f, which will be fine for its long term use. None of the wires were overheating either.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"2560\" height=\"1922\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235841444_smol-scaled.jpg\" alt=\"\" class=\"wp-image-5244\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235841444_smol-scaled.jpg 2560w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235841444_smol-300x225.jpg 300w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235841444_smol-1024x769.jpg 1024w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235841444_smol-768x577.jpg 768w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235841444_smol-1536x1153.jpg 1536w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235841444_smol-2048x1538.jpg 2048w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><figcaption class=\"wp-element-caption\">Everything wired into the Roomba<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">I was also able to drive around the roomba using the python library over SSH. This worked out well, and I could chase my cats around my office.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img loading=\"lazy\" decoding=\"async\" width=\"1114\" height=\"1054\" src=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235224999_smol-scaled-e1785977737908.jpg\" alt=\"\" class=\"wp-image-5248\" srcset=\"https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235224999_smol-scaled-e1785977737908.jpg 1114w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235224999_smol-scaled-e1785977737908-300x284.jpg 300w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235224999_smol-scaled-e1785977737908-1024x969.jpg 1024w, https:\/\/lab.rapternet.us\/wp-content\/uploads\/2026\/08\/PXL_20260805_235224999_smol-scaled-e1785977737908-768x727.jpg 768w\" sizes=\"auto, (max-width: 767px) 89vw, (max-width: 1000px) 54vw, (max-width: 1071px) 543px, 580px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Next Steps<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This has turned out very well, everything is working out and there haven&#8217;t been any major road blocks other than the pi SD corruption. With a little bit of planning to ensure we can rebuild the pi configuration easily, we can get around that in the future and possibly make this easier to deploy for others.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Now where do we go from here? I think we take aim well past just remote control of a Roomba, let&#8217;s build a ROS2 codebase to drive it, add in a webcam for object detection, add on lidar for mapping, integrate with path planners to optimally vacuum a room and see where all that takes us.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>After learning that the original Roomba models have an open serial port with a fully documented API, I just had to try out using it. I pulled the lid off my old Roomba 670 to try and avoid breaking any plastic clips and right there it was, the serial port ripe for the hardware hacker. &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/lab.rapternet.us\/?p=5225\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Roomba Brain Surgery&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":5248,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4,56],"tags":[118,49],"class_list":["post-5225","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-how-to","category-making","tag-robotics","tag-smart-home"],"_links":{"self":[{"href":"https:\/\/lab.rapternet.us\/index.php?rest_route=\/wp\/v2\/posts\/5225","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lab.rapternet.us\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lab.rapternet.us\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lab.rapternet.us\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lab.rapternet.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5225"}],"version-history":[{"count":25,"href":"https:\/\/lab.rapternet.us\/index.php?rest_route=\/wp\/v2\/posts\/5225\/revisions"}],"predecessor-version":[{"id":5290,"href":"https:\/\/lab.rapternet.us\/index.php?rest_route=\/wp\/v2\/posts\/5225\/revisions\/5290"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/lab.rapternet.us\/index.php?rest_route=\/wp\/v2\/media\/5248"}],"wp:attachment":[{"href":"https:\/\/lab.rapternet.us\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5225"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lab.rapternet.us\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5225"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lab.rapternet.us\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5225"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}