"D" - I2C Data Pin (SDA)
"C" - I2C Clock Pin (SCL)
"+" - 5v. (Will not run on 3.3v!)
"-" - GND
"IO" - I2C bus voltage.
For use with 3.3v processors, connect the IO pin to 3.3v. This will keep the I2C bus signals at a safe level for your processor.
With 5v processors like the Arduino UNO, this pin can be connected to either 5v or 3.3v. (use 3.3v if there will be other 3.3v devices on the bus)
Arduino "Classic" Wiring
- D → Analog-4 or Digital 20 for the Mega
- C → Analog-5 or Digital 21 for the Mega
- + → 5v
- - → GND
- IO → jumper to + for 5v.
OK, now on to the firmware!
Our 7-segment backpack library makes it easy to program these displays. The library is written for the Arduino and will work with any Arduino as it just uses the I2C pins. The code is very portable and can be easily adapted to any I2C-capable micro.
Download the Adafruit LED Backpack library and the Adafruit GFX library from the Arduino library manager.
Open up the Arduino library manager:
Search for the Adafruit LED Backpack library and install it
Search for the Adafruit GFX library and install it
If using an earlier version of the Arduino IDE (prior to 1.8.10), also locate and install Adafruit_BusIO (newer versions will install this dependency automatically).
We also have a great tutorial on Arduino library installation at:
You should now be able to select the File→Examples→Adafruit_LEDBackpack→sevenseg example sketch. Upload it to your Arduino as usual. You should see a "sevenseg" example sketch that will demonstrate various capabilities of the library and the display.
Once you're happy that the matrix works, you can write your own sketches.
There's a few ways you can draw to the display. The easiest is to just call print - just like you do with Serial
- print(variable,HEX) - this will print a hexadecimal number, from 0000 up to FFFF
- print(variable,DEC) or print(variable) - this will print a decimal integer, from 0000 up to 9999
If you need more control, you can call writeDigitNum(location, number) - this will write the number (0-9) to a single location. Location #0 is all the way to the left, location #2 is the colon dots so you probably want to skip it, location #4 is all the way to the right.
To control the colon and decimal points, use the writeDigitRaw(location, bitmap) function. (Note that both dots of the center colon are wired together internal to the display, so it is not possible to address them separately.) Specify 2 for the location and the bits are mapped as follows:
- 0x02 - center colon (both dots)
- 0x04 - left colon - lower dot
- 0x08 - left colon - upper dot
- 0x10 - decimal point (upper right)
If you want a decimal point, call writeDigitNum(location, number, true) which will paint the decimal point. To draw the colon, use drawColon(true or false)
If you want full control of the segments in all digits, you can call writeDigitRaw(location, bitmask) to draw a raw 8-bit mask (as stored in a uint8_t) to any location.
All the drawing routines only change the display memory kept by the Arduino. Don't forget to call writeDisplay() after drawing to 'save' the memory out to the matrix via I2C.
There are also a few small routines that are special to the backpack:
- setBrightness(brightness)- will let you change the overall brightness of the entire display. 0 is least bright, 15 is brightest and is what is initialized by the display when you start
- blinkRate(rate) - You can blink the entire display. 0 is no blinking. 1, 2 or 3 is for display blinking.