Congratulations DJ Sures, for answering the question and has received an EZ-Credit award! Share what you have learned and create a tutorial to help others by clicking here.

Roomba 500 Locks Up Using Ezb4 With D0

Assistance Requested

Help Robot Doc with their question and receive $10 of EZ-Credit to get more robots and parts from our store. The following information was provided about their previous efforts searching tutorials for a resolution.

Robot Doc claims to have checked these sources:

Testing the Roomba 595 using the EZB4 connected to D0 does not work very well. Sometimes the selection boxes for turning on the side brush, brush motor or vacuum will not turn on the selected motor. Or the motor will run but cannot be toggled off. Other times the port seems to hang and then the Roomba will reset.

When using the UARTWrite commands with the Roomba connected to UART 0, all motor commands work correctly.

I suspect a signal level issue, possibly lower than 3.3vdc vs 5vdc Roomba ttl. when using the digital D0 port.

Would it be possible to change the EZ-B GUI Roomba control from using D0 to UART0 ?

I have found a few conversations, tutorials and activities that may help with your question. Take a look at these links. I've sorted them by what I believe to be most relevant but that is not always the case as I'm still learning.

Also, consider reviewing the Learn section for informative lessons and activities. Check it out!


Hey Doc have you tried using UART 1 (D5) or 2 (D18)? The V4 daIa sheet states the UART TTL signal level is 3.3v as well... i am going to test the v4 on my Create this morning and see how it goes.


So basic controls on the Create work from D0 as expected ... That would be basic driving etc....Since the Create isn't a vacuum I can't test the other controls like side brush, main brush etc...


Ok, so I was also able to send driving commands to my Create using UART 1... I was able to call "Cover and Dock" routine no problem... So I went a step further and used a modified version of DJ's UART example code to query the Create's battery temp... I chose it as it only requires a simple single byte return (in Deg C)... It was a no go, however... I couldn't get anything sent back from the Create... Below is my code...


# Using UART port 1 TX on D5 RX on D6
uartinit(0, 1, 57600)
uartWrite(0, 1,128,132) #Init iRobot create and place in full mode
uartWrite(0, 1,142,24) #Roomba Battery temp in DegC... single byte from -128 - 128

$x = UartAvailable(0, 1)

print("Bytes in buffer: " + $x)

$y = UARTRead(0, 1, $x)

print("Received: " + $y)


For some reason the R2 model Roombas (includes Dirt Dog, and Create) seem to work without issue using the EZB4 in conjunction with the pre-defined controls that use the Digital port D0. However I tested using several of the R3 Roomba models, 510, 535, 560, and now a brand new 595 and they all exhibit the same results of not responding correctly to button selections using the "Roomba movement" choice.


R3s use 115600 baud, whereas the R2 use 57600, correct?


The R2 model Roombas use 57,600 baud and the R3 Roomba use 115,200 baud as the default start-up baud rate.


I may have found a solution to the possible difference in the serial signal voltage levels between the Digital port on the EZB4 and the TTL levels within the R3 Roomba. I've ordered a couple of these Logic Level Converters from and will do further testing when the hardware arrives.

User-inserted image


That's awesome Doc, let us know how you get on...I am going to keep trying to figure out how to read packet data using the UART...


Got the Sparkfun logic level units in and wired one up to the EZB4 and a 500 R3 Roomba. Set up two power control boards to supply (High voltage +5) and (Low voltage +3.3) and wired them into the serial logic level board. Connected all grounds together including the ground connection of the EZB4 D0 port. The logic board had the +5vdc connected to the Roomba Rx lead and 3.3vdc connected to the EZV4 D0 signal lead (white). Powered up everything, established a WiFi connection, loaded Roomba control panel GUI, powered up the Roomba, sent the Init command to the Roomba, the Clean LED went dark (good sign) and then begin selecting the individual motor activation choices. It appears that the issue has improved but the Roomba still has some response timing issues. If the side motor is turned on and then immediately de-selected, the motor keeps running. Then if the vacuum motor is selected it will start up and if then de-selected both motors will stop. If the brush motor is selected it turns on and off correctly and then all motors can be turned on and off without issue as long as there is about a 5 second delay between commands.

The drive commands never worked in earlier tests without the logic level board and now seem to almost work correctly. Forward button will run the Roomba forward but sometimes the Stop button will not work. If additional time of waiting about 5 seconds is done between commands then the drive controls seem to control the Roomba.

Final testing will resume tomorrow after double-checking the wiring just to make sure and then a final field test (Roomba actually running on the floor) will be attempted.