Let's get you rolling again. If you don't find your issue here, file an issue on Github.
This error is usually the result of running pipenv in Python 2.7 without the backport of functools_lru_cache installed. There are two options to resolve this error:
1. Add the missing dependency to your system python 2.7 installation
sudo apt install python-backports.functools-lru-cache
OR
2. Uninstall pipenv from your system python 2.7 installation, then reinstall pipenv in Python 3
pip2 uninstall pipenv
pip3 uninstall pipenv
pip3 install pipenv
After either option 1 or 2, re-running the first time setup script from your SDK root directory (default ~/sphero-sdk-raspberrypi-python) is recommended:
./first-time-setup.sh
The error message concurrent.futures._base.TimeoutError, typically means that the UART communication between RVR+/RVR and the Raspberry Pi is not working.
pi@raspberrypi:~/sphero-sdk-raspberrypi-python $ python3 getting_started/asyncio/leds/set_multiple_leds.py
Network available
Checking RVR firmware versions...
Traceback (most recent call last):
File "getting_started/asyncio/leds/set_multiple_leds.py", line 16, in <module>
loop
File "/home/pi/sphero-sdk-raspberrypi-python/sphero_sdk/asyncio/client/toys/sphero_rvr_async.py", line 36, in __init__
self._check_rvr_fw()
File "/usr/lib/python3.7/asyncio/base_events.py", line 584, in run_until_complete
return future.result()
File "/home/pi/sphero-sdk-raspberrypi-python/sphero_sdk/asyncio/client/firmware/rvr_fw_check_async.py", line 30, in _check_rvr_fw
rvr_nordic_version = await self.__rvr.get_main_application_version(target=SpheroRvrTargets.primary.value, timeout=3)
File "/home/pi/sphero-sdk-raspberrypi-python/sphero_sdk/asyncio/client/toys/sphero_rvr_async.py", line 106, in get_main_application_version
return await self._dal.send_command(**command_dict)
File "/home/pi/sphero-sdk-raspberrypi-python/sphero_sdk/asyncio/client/dal/serial_async_dal.py", line 84, in send_command
timeout=timeout
File "/home/pi/sphero-sdk-raspberrypi-python/sphero_sdk/asyncio/server/handler/api_sphero_handler.py", line 191, in send_command
await asyncio.shield(asyncio.wait_for(future, timeout=timeout))
File "/usr/lib/python3.7/asyncio/tasks.py", line 423, in wait_for
raise futures.TimeoutError()
concurrent.futures._base.TimeoutError
Make sure your RVR+/RVR is turned on.
Check your wiring. Review the hardware setup instructions for details. If you're sure you wired your Raspberry Pi to your RVR+/RVR correctly, try different jumper wires. A lot of jumper wires in the market are built to be inexpensive, and could be defective or get damaged during use.
When you see a syntax error in a known good script, this could be a hint that you're using the wrong Python version. Python 2.x is commonly the default python on a Raspberry Pi, and is not compatible with our SDK (we require Python 3.5+).
# Using Python 2 by accident:
pi@raspberrypi:~/sphero-sdk-raspberrypi-python $ python3 getting_started/asyncio/leds/set_multiple_leds.py
File "getting_started/asyncio/leds/set_multiple_leds.py", line 21
async def main():
^
SyntaxError: invalid syntax
To make sure that you're using Python 3.x, call your scripts in the form
python3 <scriptname.py>
# Using Python 3 (script succeeded)
pi@raspberrypi:~/sphero-sdk-raspberrypi-python $ python3 getting_started/asyncio/leds/set_multiple_leds.py
Network available
Checking RVR firmware versions...
Checking CMS firmware versions...
Firmware check complete.