Introduction: Addressable 7-Segment Displays
Every so often an idea clicks in my brain and I think, "how has this not been done before?" and majority of the time, it actually has been. In the case of the "Addressable 7-Segment Display" - I really don't think its been done, at least not like this.
Most of the time 7-segment displays end up being way more complicated than you think they would be. Essentially you're just lighting a bunch of LEDs to display numbers or letters. That means you need to have control over each segment of each digit you have, so if you have 4 digits, thats 4 * 7 = 28 outputs! Not to mention wiring and resistors. Then once you start driving a bunch of them, things don't look so simple anymore. I decided to create a simple way to have as many, or as little, 7-segment displays as you want, and they're super modular. Whether you want 20, or 2, you only need one data line from the Arduino to control them. Follow along to see how I did this, or to make your own, or to just know how they work!
If you don't feel like making your own, or you just feel like supporting the open source projects I create, I'm current running a crowdfunding campaign for these displays on my website! https://shop.idlehandsdev.com/
Step 1: Watch the Video
If you learn better by watching videos, I explain how I built them and how they work here.
Don't forget to subscribe!
Step 2: Get the Parts and Tools!
There aren't many parts, which is what makes this great, but you will have to be okay with surface mount soldering.
Parts per display:
- 1 x Custom PCB - Get the files from GitHub, or Order through PCBWay
- 3 x WS2811 - Adafruit
- 1 x 7 Segment Display - Needs to be Common Anode! Sparkfun Has Them
- 3 x 33OHM Resistor 0805 - Digikey
- 3 x 1uF Capacitor 0805 - Digikey
- 1 x 3-Pin Right Angle Header - Female - Digikey
- 1 x 3-Pin Right Angle Header - Male - Digikey
Tools:
- Soldering Iron
- Reflow Oven or Hot Air (Optional but easier)
- Solder Paste or Solder
If you want to skip the build and just buy a couple, go here!
https://shop.idlehandsdev.com/products/addressable-7-segment-display
Step 3: Start With Surface Mount Components!
On the back, apply the solder paste. These are all really forgiving components, so it would be a good project to start on if you have never reflowed surface mount components. After applying the solder paste, place the caps, resistors, and finally the WS2811. Follow the markings on the board.
Step 4: Reflow!
Get that hot air or reflow oven out, heat them up until all of the solder paste sets. If you don't have hot air or a reflow oven, you can use a soldering iron and solder. Its more tedious but totally doable. I have a video on this if you want to know some techniques. Check it out here: https://www.youtube.com/watch?v=uQjjcaN57y8
Step 5: Add the Pin Headers.
The order of steps this Instructable is in is important. The pin headers need to be soldered next, because their pads will soon be hidden under the 7-segment display component. The board shows you which direction the male and female pin headers go. Try to make them straight!
Step 6: Solder the 7-Segment Display
Lastly we have to solder on the 7-segment display component. Make sure its in the correct orientation by following the direction of the silkscreen.
Once you're done soldering, clean the board with your favourite cleaner and you're done!
Step 7: How the Hardware Works.
The WS2811 IC is capable of driving 3 LEDs with variable current. Normally these are a Red, Green, and Blue LEDs to be able to make thousands of different colours. In the case of the 7-segment display we are using 3 WS2811s to control the brightness of 8 different segments of the 7-segment display. Two of the WS2811s are connected to 3 segments and the last one is connected to 2 segments, with one remaining. The remaining one is actually connected to an unpopulated LED, which I thought could possibly be useful for something.
The way a WS2811 is addressable is that it is able to pass data from one WS2811 to another. So when you send a string of bits(data), it will take in its own information about what LEDs to turn on, and pass along some information to the following WS2811s until they have all received the information. That means this method of communication only requires a single data line. Once the data has been received for the single digit, it pushes data to the next three.There is a very simplified schematic in the image above. The free green wire is what goes onto the next display.
Step 8: How the Demo Program Works.
I quickly put together an Arduino program to demonstrate how to display things on the Addressable 7-Segment Display. It utilizes the Adafruit NeoPixel Library to control the number displays. It basically turns each digit into 3 Neopixels. You can send a single digit to a single display and control its brightness by simply writing:
writeDigit(DisplayNumber, Number, Brightness);
Display number being the number from right to left of which display you want to write to starting with 0. Number is the actual number you want to show up on the display from 0-9, and brightness being a value from 0-255 for how bright you want it to be.
Each time you want to refresh the displays you have to send:
segments.show();
Since there is no multiplexing going on here, it makes it really easy to do things like pulse the numbers, dim them, make cool animations.
There is no standalone library, but I may being working on one soon. If you want to contribute to the project and write a library, feel free to contact me and I will send you some displays.
Attachments
Step 9: Daisy Chain Them Together!
This is the best part. If you have a project that requires 5 displays, just connect 5 together and change the code to show 5 displays. If you need 10, just connect 10! Its that simple, and the wiring stays exactly the same! Just 3 wires.
Step 10: Support These Projects!
As I mentioned before, this project and basically all of my other projects are open source. That means you can build your own using the resources I provide online, all for free. However these projects do cost me time and money, so if you want to support future or current projects consider purchasing a couple of these displays directly from me. Check out my web-store where I am running my own crowdfunding campaign!
https://shop.idlehandsdev.com/
I like crowdfunding because it allows me to reduce the overall cost of the product by only purchasing the parts if I know they have sold.
If you prefer to build your own, there are other ways to support me and my projects. Consider subscribing to my YouTube Channel:
And finally, if you want to see more and possible bigger projects, you can also become a patron on Patreon.
My patrons really do help with my ability to create projects, as their support allows me to put more time and money into the projects that don't bring me any in return. These are often the most fun and interesting projects, and I like that I am able to release them to the world for free for anyone else to try and recreate.

Second Prize in the
PCB Contest
42 Comments
Question 5 weeks ago on Step 8
Do you have an example sketch for Python, or will you be developing how to control these using Python? I have a project that these would be perfect on, but I code it in Python.
Question 2 years ago
I purchased 8 of these modules a couple of years back, and was never able to make them work. Today I was about to dump them to the electronic trash and decided to give it final chance. I wrote a small program with the provided library + example that just prints a sequence of 8's and it only prints garbage. Image attached.
Do you have any idea what's going on?
Update: The errors show when using a Teensy 3.2 and the following library: https://github.com/IdleHandsProject/addr_7seg
Update: The modules work fine with Arduino and the following library: https://github.com/kosme/Addr7Seg.git
3 years ago
Hello,
is there a proper schematic. I mean that fritzing "schematic" is kinda stupid...
Reply 3 years ago
There is a link to the GitHub in step 2 which contains the KiCad schematics.
4 years ago
Is the brightness difference achieved by adjusting voltage or is it all done through the data line? How much power is consumed by each of the modules? My meaning, if the Arduino is capable of 150mA and I need to string a series of 10 modules, will I be stressing the power output capabilities of the Uno or Nano?
4 years ago
I don't think the WS2811 chips are the best choice for a single 7 segment display. You need three of them at a cost of $1.50. A better and cheaper, but not easier, choice would be to use a single $0.60 Busy Bee (EFM8BB10F8G-A-SOIC16). The Busy Bee is an 8051 mcu with everything built in. It has 13 IO lines that can drive the 7 segment display directly - only a single resistor and a pair of power coupling caps are necessary. Actually, you could actually drive two multiplexed digits plus the decimal point with it. That particular MCU is in a giant 16 pin soic so its really easy to solder. Because the Busy Bee is a MCU, you can program whatever communication protocol you want including bidirectional with error correction. It has built in hardware CRC to make that easier.
I just completed a large chain of 8x8 matrix displays that were daisy chainable like your 7 seg displays are. I used, and regretted it, a set of MAX7219 chips. The problem was that the serial communication broke down with longer chains. I finally found a way to fix it, but its still not perfect. If you use bidirectional communication with error correction then you don't have that problem.
Reply 4 years ago
Well, I also found a 100pc lot for $4.9 on aliexpress. Puts it at $0.049 a piece and around $0.15 for 3 pieces. Also its much easier to use, and I would definitely go with WS2811.
Reply 4 years ago
That's 15c plus the cost of the PCB plus the 7 seg display. On ebay, for $1.40 you can buy the 8 digit 7 seg display with the counterfeit Max7219 already built and ready to go. It still needs two 2K resistors to make it work properly. The WS2811 would be a good option for when you only need one or two digits. The MAX chip uses a SPI-like interface. SPI is not as error free as NRZ, but its better supported.
Reply 4 years ago
You can get WS2811 chips for much cheaper. I'm getting 100x of them for only $6.17 on aliexpress, although it's somewhat of a gamble whether they'll all work or not...
https://www.aliexpress.com/item/Free-shipping/32629521458.html?spm=a2g0s.13010208.99999999.346.22cd3c006H3FB0
Reply 4 years ago
Those chips work good for LED strips which is what they were intended for. A MAX 7219 chip, which I frown upon, can handle eight 7-seg + DP displays. Those are about $20 for 50 but they have problems. Mostly because they are counterfeit. I suspect the Ali WS chips are also. Might work - might not. Still, the Busy Bee is a single chip solution that can handle up to 3 digits and provide error corrected communication. That was the biggest problem with the MAX chip, it was basically a big shift register and any noise that got shifted in also got shifted out to the next chip in the line. The more chips, the more chance of an error creeping in to the data stream. I briefly looked at the WS datasheet and suspect that it works the same way.
EDIT: I looked again and the WS chip uses an embedded clock NRZ communication. Its generally less susceptible to noise than straight logic levels. Its still using the shift register method though.
4 years ago
Всё неплохо но эти микросхемы во первых достаточно дорогие. Во вторых что более важно заказные. И доступны к заказу минимальной партией от 100шт. что очень осложняет их покупку. При этом оптовики не работают с физическими лицами.
Так что решение выглядит несколько сомнителным. Сдвиговый регистр в этом отношении по моему проще и самое главное они намного доступнее и дешевле.
4 years ago
That was fantastic!!
4 years ago
Love this project, a really clever use of existing ICs to achieve another very useful function.
4 years ago
Have a look at this: https://neosegment.com/ .. I still like your project :) Made me design a pcb for the ws2812b chip leds like this before I found the one at neosegment.
4 years ago on Step 10
Simplify this with the neopixel leds arranged in the segments on a pcb, apply a window mask over the leds to form uniform segments, and use the existing libraries. Still 3 wire interconnect, but able to be multi color along with brightness. What you think?
Reply 4 years ago
I did some work designing a pcb for a display of what I mentioned doing, then I found this is already available. Here is the link : https://neosegment.com/ I still like the exercise to design one like this, always fun! Thanks for sharing your project.
Question 4 years ago on Introduction
Sean, my I was in your store and tried to use the contact link -> https://shop.idlehandsdev.com/pages/contact-us
But it has no info so I'll ask here. First, I like these. If the project funds, I'm in for 4 to start, consider a slight design option of making them connectible from top and bottom as well. Then someone can make a larger multi line display.
Answer 4 years ago
They'd work like a string of neopixels. Just make multiple rows and then chain them together at the ends with jumper wires (no need for more components, or worse, PCB space). It's a beautiful design really in so many ways.
4 years ago
Nice work. I thank you for sharing, for free, what could undoubtedly be a very profitable idea. I really like this.
4 years ago
Woah....that's....groundbreaking......
well done!