RVR not doing anything when given a command by Raspberry Pi


My RVR does nothing after being given a command by Raspberry Pi. After it says

Checking RVR firmware versions…

it does nothing. Plus it doesn’t even wake up the RVR!

Command Line:

pi@rvrpi:~/sphero-sdk-raspberrypi-python/getting_started/observer/leds$ python3 set_multiple_leds.py
Checking RVR firmware versions…
pi@rvrpi:~/sphero-sdk-raspberrypi-python/getting_started/observer/leds $

Raspberry Pi Version: Raspberry Pi 3B V1.2
Raspberry Pi OS Version: Raspberry Pi OS (32-bit) Debian Bullseye Not the OS with built in sdk
UART and GND: Connected properly, I checked a lot of times.
Python Version: Python 3.9.2, there is no python 2.x.x installed.


Hi @ilikervr,

I’m sorry to hear you’re running into issues with your RVR. First off, thank you for providing detailed information about your Pi setup from the beginning.

  1. Did you follow the advanced setup instructions beginning on this page?
  2. Did you clone the SDK repo (or download as zip) after December 21, 2021? We made various improvements to the initial setup process at that time, and the instructions on the SDK site require the latest version of the SDK.
  3. Can you perform a UART loopback test on your Pi to verify your UART is working?
  4. If the loopback test passes, it would be good to try following the quick start instructions with the preconfigured SD card image to determine whether this is a hardware or software issue. The preconfigured image has been tested on Pi 3B, 4, and Zero W.

Hopefully we can figure this out quickly and get you up and running.


1 Like

Ok, I will try a loopback test and yes I did the advanced setup and cloned the repo. Thanks @Sphero_JimK.

Hi again, I did a loopback test and it worked as you can see,

now I will try step number 4 as you said @Sphero_JimK. Thanks a lot again!

Nope, same problem as before. Not doing anything

Oh, I forgot the most important thing. Please connect your RVR to the Sphero EDU app to ensure your RVR’s firmware is up to date.


I got rvr like 2 years ago and when I took it out again I FIRST connected it to the Sphero EDU app and checked the firmware numbers with the latest news post for rvr firmware so rvr is up to date. There are no updates in edu app @Sphero_JimK .

Yeah it’s been a while since the last update, but I didn’t know if it was a newly purchased RVR.

Since we know your UART can talk to itself, there are basically two paths left:

Path 1: Investigate the Pi UART for possible baud rate issues
This blog has some details about variable baud rates with the default “mini UART” on the Pi, and different options for correcting it.

If you happen to have an oscilloscope or logic analyzer you could also measure the baud rate on the TX pin of the Pi. It should be 115200 to work with RVR.

Path 2: Test RVR with a 3.3V USB-serial adapter
If you have a 3.3V USB-serial adapter on hand (could be FTDI, CP210x, CH340, etc as long as it supports 115200 baud), you can use that to verify the RVR UART. This could be done from the Pi or any other computer. Here are a couple of example packets that you can send with your terminal of choice:

// Echo the payload {0x11 0x22 0x33 0x44} from the Nordic BLE processor
0x8D 0x3A 0x11 0x01 0x10 0x00 0xAA 0x11 0x22 0x33 0x44 0x55 0xFA 0xD8
// Echo the payload {0x11 0x22 0x33 0x44} from the ST processor
0x8D 0x3A 0x12 0x01 0x10 0x00 0xAA 0x11 0x22 0x33 0x44 0x55 0xF9 0xD8

Alternatively, you can select a different TTY device in any SDK script, by including the optional port_id parameter in the constructor for the SerialAsyncDal object.

class SerialAsyncDal(SpheroDalBase, SerialSpheroPort):

    def __init__(self, loop=None, port_id='/dev/ttyS0', baud=115200):

Alternate port selection would look something like this (this is based on `getting_started/asyncio/leds/set_all_leds.py. I have not tested it as I don’t have enough time to set up a Pi right now)

import os
import sys
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../../../')))

import asyncio
from sphero_sdk import SpheroRvrAsync
from sphero_sdk import Colors
from sphero_sdk import RvrLedGroups
from sphero_sdk import SerialAsyncDal

loop = asyncio.get_event_loop()

rvr = SpheroRvrAsync(

async def main():
    """ This program demonstrates how to set the all the LEDs.

    await rvr.wake()

    # Give RVR time to wake up
    await asyncio.sleep(2)

    await rvr.set_all_leds(
        led_brightness_values=[color for _ in range(10) for color in Colors.off.value]

    # Delay to show LEDs change
    await asyncio.sleep(1)

    await rvr.set_all_leds(
        led_brightness_values=[color for x in range(10) for color in [0, 255, 0]]

    # Delay to show LEDs change
    await asyncio.sleep(1)

    await rvr.close()

if __name__ == '__main__':

    except KeyboardInterrupt:
        print('\nProgram terminated with keyboard interrupt.')


        if loop.is_running():

Let me know how it goes

Ok, so I saw the baud rate for /dev/ttyS0 and it was 9600. See the image. How to change the baud rate?

That’s the default baud rate, which doesn’t matter for our purposes. I’ll put together some more detailed instructions.

Thanks for your patience,

so I got it working at 115200 (I don’t know how!) but when I rebooted it changed back to 9600

hold on never mind actually I think you wait and it changes

ok so I got to work on path 1 so now I know its a raspberry pi problem ill just reinstall the img with a fresh one.

Uhh sphero support? You there? I still need help.

ok case closed i got my raspberry pi zero and it works