The Internet Speed-o-meter

Photo of alistair

Made by alistair / Displays

About the project

A physical display to show how much of your Internet connection is being used.

Connectivity  Contest WinnerConnectivity contest winner

Project info

Difficulty: Moderate

Platforms: Espruino

Estimated time: 2 hours

License: GNU Lesser General Public License version 3 or later (LGPL3+)

Items used in this project

Hardware components

ESP8266 Serial WIFI Module ESP8266 Serial WIFI Module Mini ESP8266 based module x 1
ESP-01 Adaptor module ESP-01 Adaptor module Adaptor for the module with voltage regulation x 1
Micro Servo Micro Servo x 1
3mm hardboard or acrylic sheet 3mm hardboard or acrylic sheet I used a 20mm x 15mm sheet but you can be creative x 1
Regulated 5v power supply Regulated 5v power supply x 1
Clamp or plate stand Clamp or plate stand Something to hold up your creation x 1
1mm Acrylic sheet 1mm Acrylic sheet I used a 10mm x 40mm sheet x 1
Network firewall/router Network firewall/router Most routers that support SNMP (Simple Network Management Protocol) will work. We have a RV042G. x 1
Double sided sticky pads Double sided sticky pads x 1

View all

Software apps and online services

Arduino IDE Arduino IDE Version 1.6 or above
ESP8266 Arduino Core ESP8266 Arduino Core Available from

Hand tools and fabrication machines

Soldering Iron Soldering Iron x 1
Laser Cutter Laser Cutter This is optional. You can use hand tools, or just a knife and cardboard if you prefer. x 1
ESP-01 Programmer ESP-01 Programmer x 1



This is a little project to monitor the usage of a building's internet connection. There was not easy way for someone who was technically minded to monitor this never mind making the the end users. This is an answer to that problem. The hardware communicates with the central router/firewall, asks how much data has passed thought it, subtract that from the last figure it was told, and then moves a physical arrow to show that figure to everyone. Although it is called the "Speed-o-meter" in the great style of Wallace and Gromit it should more accurately be thought of as a percentage of bandwidth usage meter.

Step 1 - Programming the microcontroller

At the heart of the system is an ESP-01 module. Any ESP6266 based development board or Arduino with networking should run the code with little or no modification.

I am going to assume that you are able to load the code from this listing to the microcontroller. If you don't know how to do that you can find plenty of tutorials online.

You will need to change three settings in the supplied code. First you will need to replace {wifi_ssid} and {wifi_password} with your wifi details. Next you need to change

{top_connection_speed} to the

maximum speed of your connection. Note that this needs changing in two locations.

The current code will monitor both upload and download rates and pick the highest to show. If your connection is

asymmetric (has a different upload rate to your download rate) then you can tweak the 

updateServo() function to reflect this. This is completely optional and only for programmers how are obsessive compulsive about accuracy. Basically if you are like me.

Once these settings have been changed and the code uploaded you are ready to go on to the next step.

Step 2 - Assembling the hardware

Rather than create a new circuit board or have many cables all crammed together at the back I decided to "hack" the fairly common ESP-01 adapter. This has the main advantage of regulating the power down from the 5V supply we are going to use down to the 3.3v required by the ESP-01 module. If we use the TX pin as a data pin for controlling the servo then by pure luck the GND/SVV/DATA pins on the adapter are in the correct order for a standard servo.

I removed the RX pin to reduce the risk of the servo being plugged in incorrectly but this is optional.

It is worth noting that the ESP8266 sends some serial data is sent out of the TX pin on boot and that can crash some servos. If this is the case you will need to modify the design to use the RX pin instead, or try another servo.

As we have used the VCC and GND pins to connect the servo we need to inject power another way. This is a simple hack with the power cable being soldered on the underside of the board.

The power supply is a 5v "wall wart" with a power cord on. I extended it with some speaker cable but the original was long enough for most projects.

Step 3 - Assembling the display

The last significant step is to add the electronics and mechanics to a board and create the physical display.

This listing has some CAD drawings that can be used to laser cut and board and arrow although this is where your creativity can flow. Why not create your own design?

Finally the project needs mounting somehow. You could mount it on the wall or place it on the mantelpiece. I have used picture frames and plate stands to do this with other projects, but for this on I decided to simply add a workshop clip to the back to hold it upright on the workshop shelf.

Step 4 - Sit back and enjoy

That is it all done. When you power it up it will take a free seconds to settle down and then you will see how much data is going through your network. If not a lot is happening then run a speed test and see how much of your bandwidth you can use.

Schematics, diagrams and documents

Overall Schematic

CAD, enclosures and custom parts


The design for laser cutting the scale.


The design for laser cutting the pointer.


Main Arduino (ESP8266) code

The main code for the project. You will need to change the wifi details ({wifi_ssid} and {wifi_password}) and update the speed for your Internet connection ( {top_connection_speed} in Mbps).


Leave your feedback...