Raspberry Pi Strava Monitor




Introduction: Raspberry Pi Strava Monitor

The Strava Monitor is a LED small display that shows off some of your exercise statistics from Strava. It's small enough to put on a bookshelf and only requires a single power cable. All the data is regularly pulled from Strava over a wifi connection and displayed on its screen.

The Strava Monitor cycles between two screens every few seconds:

  1. Total Distance of all activities so far this year
  2. Bar chart showing the relative distance of your last 5 activities

It can easily be customised to display more screens or a variety of other statistics from Strava.

The unit can be built for around £20 or $25 worth of components.

Step 1: Required Parts

Parts for the final product:

  • Raspberry Pi Zero link
  • Scroll pHAT - LED display (buy this separately or as a bundle with the Raspberry Pi Zero) link
  • Micro USB charger and cable (link) included in some Raspberry Pi kits
  • USB Wifi dongle link
  • Micro USB adaptor link
  • Micro SD card for storage link

Tools needed to build it and get it up and running:

  • Soldering iron and solder
  • HDMI monitor or TV with an HDMI cable
  • Mini HDMI adaptor to connect the Pi to a monitor or TV while setting it up. Included in some Pi kits.
  • SD card reader to load Raspbian onto the SD card
  • USB hub (powered) to connect mouse and keyboard to the Pi for configuring it the first time
  • Mouse
  • Keyboard
  • A free Strava account

Skills required:

  • Very basic soldering
  • Some python programming if you want to customise or change the code
  • Some experience with Linux and Raspberry Pi helps, but not required

Step 2: Assemble the Parts to Set Up the Raspberry Pi Zero

To connect the LED matrix to the Pi, you need to solder a female connector to the pHAT and a male connector to the Raspberry Pi, then connect the two parts. You can find the soldering instructions here. I used the included L-shaped male connector (as opposed to the straight one) on the Pi so that the display can be upright while the Pi is laying flat behind it.

The Raspberry Pi Zero is tiny, but this makes the setup tricky because it only has one USB port and you will have to connect the Wifi dongle and a mouse and keyboard to set it up the first time.

To do this, connect a powered USB hub to the Micro USB connector and plug it into the second USB plug on the Pi. You will remove these once it's set up. Note the first USB plug is for power only, not for connecting accessories.

Next, plug in the Wifi dongle, keyboard and mouse into the USB hub.

Connect the HDMI cable to a monitor or TV and the other end into the Pi via the Micro HDMI adaptor.

Plug the Micro SD card into a computer (via an adaptor if required)

Download Raspbian operating system for the Pi link

Carefully follow the instructions to install it onto the SD card (Mac and Windows link)

Insert the SD card into the Raspberry Pi Zero

Step 3: Powering Up and Setting Up the Wifi

Insert the Micro USB cable into the Raspberry Pi Zero's first USB slot and the other end into a USB wall plug or other USB power source. This will give the Pi power.

If everything is working correctly, the small green LED next to the power USB connector will start flashing while the device is booting up. Shortly you will see the Raspbian symbol appearing on the monitor or TV.

After it has booted to the desktop, click the Network symbol at the top right of the screen. It will then scan for wifi networks. If this doesn't work, it may mean that your Wifi dongle is not recognised by the Pi. Make sure you have the USB hub powered on. Most recent dongles work natively with the Raspbian operating system.

Select a wifi network and enter the wifi password.

Once you've done that, the Pi will connect to wifi and you should have internet access. Test this by opening the browser and going to a website.

Step 4: Configuring the Pi With Remote Access (SSH)

Next, you will set up the Pi's configuration so that you can access it remotely via SSH from another computer via Wifi, which will allow you do remove the monitor, mouse and keyboard from the Pi.

The first step is to discover your Pi's IP address so that you can connect to it over the network. To do this, click on the black terminal icon on the top bar of the Raspbian desktop to open the Terminal.

Type "ifconfig" and then find the wireless IP address ("inet addr") under "wlan0" that will look something like or and make a note of it. Note it is not, there should be a different address under "wlan0".

To set up SSH and other aspects of the Pi:

  1. Enter "sudo raspi-config" to enter the config tool
  2. Choose the "Expand file system" menu item so that the Pi can use all of the SD card space
  3. Choose Change Password and select a new password (the default is raspberry)
  4. Under the Advanced menu, enable both SSH and I2C
  5. Under Boot Options, choose to boot to the Command Line (not desktop). This will make the Pi slightly faster while running.
  6. Save and Reboot the Pi

Macs have SSH built into the Terminal app, so if you're using a Mac, open up Terminal.app from your Applications/Utilities folder and type "ssh pi@[ip address]" where [ip address] is the one you made a note of earlier.

If you're on Windows, download a free SSH app such as PuTTY (link) and connect to the IP address with the user name of "pi".

Enter the password you selected above. You will now connect to the Pi and you will see the same terminal screen you would see as if you were working directly on the Pi.

You can now remove power, the USB hub, monitor, keyboard and mouse. Plug the Wifi dongle directly into the Pi (see photo).

When you plug the power back in, the Pi will boot up and automatically connect to wifi.

Step 5: Setting Up FTP for File Transfers to the Pi

After about 20 seconds of boot time, log back into the Pi remotely via SSH from your PC.

The next step is to enable the FTP server which will let you copy files to the Pi from your PC:

  1. In the terminal, type "sudo apt-get install vsftpd". This will install the FTP server from the internet.
  2. Next, edit the FTP's config file
    1. Type "sudo nano /etc/vsftpd.conf"
    2. Change write_enable=YES (or remove the # comment symbol if needed)
    3. Change local_enable=YES (or remove the # comment symbol if needed)
    4. Change anonymous_enable=YES to NO (if it's not set already or remove the # comment symbol if needed)
    5. Press Control-X, then Y to save the file
    6. Type "sudo service vsftpd restart" to restart the FTP server with the new settings.

You can now access the Pi's file system remotely using an FTP application such as the free Filezilla by using the IP address, pi as the username and the password you selected earlier.

Step 6: Install the Various Code Libraries on the Pi

Various libraries are needed on the Pi for your code to control the pHAT LED matrix and access Strava over the internet.

In the Pi's terminal (over SSH), do the following:

  1. To install the pHAT library, type "curl -sS https://get.pimoroni.com/scrollphat | bash"
  2. To install the Strava library, type "sudo pip install stravalib"

Prepare the folders for your source code:

  1. Create a folder for your code by typing "mkdir ~/strava". This will create a folder called strava within your home folder.
  2. Type "mkdir ~/strava/log" where your log files will go so you can troubleshoot if needed

You can now test the LED display using some sample code from the pHAT library:

  1. On your PC, download the sample code here.
  2. Open up your FTP client and connect to the Pi
  3. Upload the test code to your Pi's strava folder
  4. Connect using SSH, go to your strava folder with "cd ~/strava" and type "python sine.py"
  5. The LED should now display a wavy pattern

Step 7: Prepare Your Strava Account and Get an Access Token

This step sets up your Strava account so that you can read data from it using the Pi. To do that, you need Strava to generate an Access Token which is unique to your account and you only need to do this once.

This token will be used in the next step within your Python source code to access the Strava data.

The generate the Token, follow these thorough instructions including a video:


Note that Read access will be sufficient and you won't need Write access.

The Access Token will look something like this: a6f1aa3c70aef9f4982cf8df31796389316baa34. Make a note of that for the next step.

Step 8: Load the Source Code Onto the Pi

Download the source code within this step and edit it on your PC.

Change the Access Token near the top to match your new Strava Access Token from the previous step.

Save the file and upload it to your "strava" folder on your Pi.

You can now test the code by running "python stravascroller.py" on the Pi from that folder. It should first show a loading bar, then cycle through the two screens every few seconds.

Step 9: (optional) Let the Code Run Automatically Every Time the Pi Boots

You can set up the Pi to run your script every time it boots up, saving you having to SSH in and kick the code off every time it has been plugged out. You can also set it up so that the Pi reboots automatically at midnight every night, helping it to run smoothly.

To do this, use the CRONTAB scheduler on the Pi as follows.

  1. Using SSH, access the Pi's Terminal and type "sudo crontab -e" to edit the scheduler config file
  2. Add the following to the bottom of the file:
    • @midnight sudo /sbin/shutdown -r now
    • @reboot /usr/bin/python /home/pi/strava/stravascroller.py > /home/pi/strava/log/stravalog 2>&
  3. Press Control X, then Y to save the file
  4. Reboot

The Pi should now automatically start up the routine every time you apply power.

Microcontroller Contest 2017

Participated in the
Microcontroller Contest 2017

Be the First to Share


    • Build a Tool Contest

      Build a Tool Contest
    • Leather Challenge

      Leather Challenge
    • Stone Concrete Cement Contest

      Stone Concrete Cement Contest



    4 years ago

    I've followed this tutorial but when I run the python file I get this:
    pi@raspberrypi:~/strava $ python stravascroller.py
    Traceback (most recent call last):
    File "stravascroller.py", line 1, in
    import stravalib #sudo pip install stravalib
    File "/usr/local/lib/python2.7/dist-packages/stravalib/__init__.py", line 1, in
    from stravalib.client import Client
    File "/usr/local/lib/python2.7/dist-packages/stravalib/client.py", line 14, in
    import arrow
    File "/usr/local/lib/python2.7/dist-packages/arrow/__init__.py", line 3, in
    from .arrow import Arrow
    File "/usr/local/lib/python2.7/dist-packages/arrow/arrow.py", line 19, in
    from arrow import util, locales, parser, formatter
    File "/usr/local/lib/python2.7/dist-packages/arrow/parser.py", line 12, in
    from backports.functools_lru_cache import lru_cache # pragma: no cover
    ImportError: No module named backports.functools_lru_cache


    Reply 4 years ago

    FIxed it by installing it manually
    pip install backports.functools_lru_cache


    Reply 2 years ago

    Has this resolved the issue for others - i'm getting this error as well but the manual install doesnt seem to solve it.


    Question 3 years ago

    Hey! Great build! wondering why use a usb dongle if raspberry pi zero has wifi included? I plan to use a different display but I expect this could help me set up interaction with strava api! thanks for the help!


    4 years ago

    What a great entry point to Raspberry Pi, soldering, pHAT...awesome project, solipsia! I've had my set up going for a couple months now, but every so often I run into a "packet_write_wait Broken pipe" error when interacting with my Raspberry Pi via SSH. Have you or anyone else experienced and solved this?

    Other people report that lengthening the "ServerAliveInterval" in your laptop's ~/.ssh/config file should fix the issue, but mine persists.

    My set up:

    - macoS High Sierra; Version 10.13.3

    - Raspberry Pi Zero

    - Strava.pysource code (modified to display total miles run this week; countdown to a user-defined [race] date)


    5 years ago

    Just finished it for my dad for Father's Day. This was a build I enjoyed, and a cool gift to give. What happens when the user goes over 999?


    Reply 4 years ago

    Well, just broke 1000. If the software is inchanged it just lists the first 3 digits. 1260 is now 126.


    Reply 4 years ago

    Oh well done, you beat me to it!


    Reply 4 years ago

    Can you tell me how to change the display form 3 digits to 4?


    Reply 4 years ago

    Did you have any luck changing the display from 3 to 4?


    5 years ago

    I have been work on this project on and off for a couple weeks, and today i finally finished it. But i have noticed that it is displaying in kilometers. Is there any way i can change it to display in miles?


    Reply 5 years ago

    Congratulations! There are a couple of references to "stravalib.unithelper.kilometers" in the code. Just change it to miles and you're all set!


    Reply 5 years ago

    Thank You!

    DIY Hacks and How Tos

    This is a great idea. You should enter this into the Microcontroller contest.


    Reply 5 years ago

    Thank you!

    Great, I'm new to Instructables but I'll check out the competitions.


    Reply 5 years ago