# MatrixPortal CircuitPython Animated Message Board

## Overview

![](https://cdn-learn.adafruit.com/assets/assets/000/124/115/medium800thumb/led_matrices_main.jpg?1693260698)

Perhaps you've seen those animated message board signs and perhaps you even wanted one. However, you may have noticed they tend to be fairly pricey and programming them can be complicated.

This project makes use of the powerful [Adafruit MatrixPortal S3](https://www.adafruit.com/product/5778) and its large memory capacity to be able to pump out and blend graphics in real time using CircuitPython. It works by using CircuitPython's `bitmaptools` module along with `displayio` to blend, blit and buffer swap images and text together to produce smooth animations.

The code for this project is based on the [OpenSign project](https://github.com/Maker-Melissa/OpenSign), which was written for the Raspberry Pi, but the code was completely rewritten from scratch for this project to make use of strengths of CircuitPython. Certain features such as shadow and text stroke were omitted because of the lack of support at this time. Some library restructuring was also done to make it more expandable and avoid OpenSign's large library files for memory efficiency.

This project was featured on one of the livestreams for CircuitPython Day, which you can watch below.

https://www.youtube.com/watch?v=pjakZUksU34

## Parts

This project requires the new MatrixPortal S3 for its speed and memory using four 16x32 RGB LED matrices.

### Adafruit Matrix Portal S3 CircuitPython Powered Internet Display

[Adafruit Matrix Portal S3 CircuitPython Powered Internet Display](https://www.adafruit.com/product/5778)
Folks love our [wide selection of RGB matrices](https://www.adafruit.com/category/327) and accessories&nbsp;for making custom colorful LED displays... and our RGB Matrix Shields and FeatherWings can be quickly soldered together to make the wiring much easier. But what if we made it...

In Stock
[Buy Now](https://www.adafruit.com/product/5778)
[Related Guides to the Product](https://learn.adafruit.com/products/5778/guides)
![Video of Adafruit Matrix Portal S3 linked up to a matrix displaying the "Adafruit Matrix Portal" in white letters and red, green and blue circles jumping around. ](https://cdn-shop.adafruit.com/product-videos/640x480/5778-06.jpg)

### Medium 16x32 RGB LED matrix panel - 6mm Pitch

[Medium 16x32 RGB LED matrix panel - 6mm Pitch](https://www.adafruit.com/product/420)
Bring a little bit of Times Square into your home with this 16 x 32 RGB LED matrix panel. These panels are normally used to make video walls, here in New York we see them on the sides of busses and bus stops, to display animations or short video clips. We thought they looked really cool so we...

In Stock
[Buy Now](https://www.adafruit.com/product/420)
[Related Guides to the Product](https://learn.adafruit.com/products/420/guides)
![16x32 RGB LED matrix panel with colorful text lit up](https://cdn-shop.adafruit.com/640x480/420-08.jpg)

### Part: GPIO Ribbon Cable 2x8 IDC Cable - 16 pins 12" long
quantity: 1
Needed for reaching the first panel
[GPIO Ribbon Cable 2x8 IDC Cable - 16 pins 12" long](https://www.adafruit.com/product/4170)

For the LED acrylic, you can either purchase a 12"x12" sheet and cut it down to a size yourself. It will need to be cut to 3 equal width pieces approximately 101.6mm (4 inches) wide and the lengths of the pieces should add up to 776mm (30.55 inches).

### Black LED Diffusion Acrylic Panel 12" x 12" - 0.1" / 2.6mm thick

[Black LED Diffusion Acrylic Panel 12" x 12" - 0.1" / 2.6mm thick](https://www.adafruit.com/product/4594)
A nice whoppin' slab of some lovely black acrylic to add some extra diffusion to your LED Matrix project. This material is 2.6mm (0.1") thick and is made of special cast acrylic that makes it perfect for glowy projects, especially matricies or NeoPixels.

Unlike smoke or...

In Stock
[Buy Now](https://www.adafruit.com/product/4594)
[Related Guides to the Product](https://learn.adafruit.com/products/4594/guides)
![LED RGB matrix 12" x 12" with "Adafruit Industries LED Matrix" text showing, and LED acrylic slowly covering to make it nicely diffused](https://cdn-shop.adafruit.com/product-videos/640x480/4594-04.jpg)

Or you can get 1 large piece from TAP Plastics custom cut to size.

### Part: Black LED Acrylic
quantity: 1
3mm thickness cut to 102mm x 776mm
[Black LED Acrylic](https://www.tapplastics.com/product/plastics/cut_to_size_plastic/black_led_sheet/668)

### Optional Parts

To assemble, you will need some metal or nylon 10mm M2.5 screws and washers, M3 screws, and zip ties for wire management.

### Part: M2.5 Nylon Screws
quantity: 1
Black Nylon Machine Screw and Stand-off Set – M2.5 Thread
[M2.5 Nylon Screws](https://www.adafruit.com/product/3299)

### Part: M3 Nylon Screws
quantity: 1
Black Nylon Machine Screw and Stand-off Set - M3 Thread
[M3 Nylon Screws](https://www.adafruit.com/product/4685)

### Part: Assorted Zip Ties
quantity: 1
1000 Pcs Black Cable Zip Ties Assorted Sizes
[Assorted Zip Ties](https://amzn.to/3OOQmif)

### Part: USB A to USB C Adapter
quantity: 1
Optional if you don't have a USB-C Port on your computer.
[USB A to USB C Adapter](https://www.adafruit.com/product/4175)

### Extra Power Parts

If you need more power than the USB port can provide, you will want these parts.

### Part: 2 in 1 USB-C OTG Splitter
quantity: 1
Useful for providing more power than the USB port can supply
[2 in 1 USB-C OTG Splitter](https://amzn.to/3P59nhK)

### Part: 5V 4 Amp Power Supply
quantity: 1
5V 4A (4000mA) switching power supply
[5V 4 Amp Power Supply](https://www.adafruit.com/product/1466)

### Part: 2.1mm 5VDC Barrel Jack to USB-C Adapter
quantity: 1
For connecting the Power Supply to USB-C
[2.1mm 5VDC Barrel Jack to USB-C Adapter](https://www.adafruit.com/product/4536)

### Part: USB Type A to Type C Cable
quantity: 1
USB Type A to Type C Cable - approx 1 meter / 3 ft long
[USB Type A to Type C Cable](https://www.adafruit.com/product/4474)

# MatrixPortal CircuitPython Animated Message Board

## 3D Printing

![](https://cdn-learn.adafruit.com/assets/assets/000/123/648/medium800/led_matrices_3D_Printing_Overview.jpg?1692313482)

This project will be assembled with quite a few 3D printed parts, described below, but many of them are duplicates. The parts are available in either the STL (older) or 3MF (newer) format. Most slicers support both. You'll need to print multiples of some parts:

- 6 x **Connector Bracket.stl**
- 7 x **Top or Bottom Panel.stl**
- 1 x **Top Panel with Cutout.stl**
- 2 x **Side Panel.stl**
- 1 x **MatrixPortal Mount.stl**

[Download STL Files](https://github.com/adafruit/Adafruit_Learning_System_Guides/raw/refs/heads/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/Enclosure/STL_Files.zip)
[Download 3MF Files](https://github.com/adafruit/Adafruit_Learning_System_Guides/raw/refs/heads/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/Enclosure/3MF_Files.zip)
[Download CAD Source](https://github.com/adafruit/Adafruit_Learning_System_Guides/raw/refs/heads/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/Enclosure/CAD_Files.zip)
## Slicer Settings

The specific setting values aren't critical with this case. Here are the settings used to print the case for this guide.

For the **Connector Bracket** and **MatrixPortal Mount** :

- 20% gyroid infill
- Supports on build plate enabled
- 0.3mm Layer Height

For the other parts:

- 20% gyroid infill
- 0.2mm Layer Height
- No Supports

## Parts Details
### Connector Bracket

Used to connect the matrices together, has a dovetail for the panels, and a zip tie slot.

![led_matrices_IMG_5254.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/764/medium640/led_matrices_IMG_5254.jpeg?1692751889)

### Top or Bottom Panel

Dovetail panel for the top or bottom of the message board.

![led_matrices_IMG_5258.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/766/medium640/led_matrices_IMG_5258.jpeg?1692751908)

### Top Panel with Cutout

Special version of the top panel with cutout holes for the MatrixPortal S3.

![led_matrices_IMG_5257.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/767/medium640/led_matrices_IMG_5257.jpeg?1692735237)

### Side Panel

Panel for each side of the message board. These attach to the matrix, but also slot into the Top and Bottom Panels.

![led_matrices_IMG_5256.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/769/medium640/led_matrices_IMG_5256.jpeg?1692735370)

### MatrixPortal Mount

Mount to hold the MatrixPortal S3 so that it lines up with the cutout holes. This attaches on top of the Matrix and one of the connector brackets.

![led_matrices_IMG_5255.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/770/medium640/led_matrices_IMG_5255.jpeg?1692752198)

# MatrixPortal CircuitPython Animated Message Board

## Install CircuitPython

[CircuitPython](https://github.com/adafruit/circuitpython) is a derivative of [MicroPython](https://micropython.org) designed to simplify experimentation and education on low-cost microcontrollers. It makes it easier than ever to get prototyping by requiring no upfront desktop software downloads. Simply copy and edit files on the **CIRCUITPY** drive to iterate.

## Set up CircuitPython Quick Start!

Follow this quick step-by-step for super-fast Python power :)

Info: 

[Download the latest version of CircuitPython for this board via circuitpython.org](https://circuitpython.org/board/adafruit_matrixportal_s3/)
## Further Information

For more detailed info on installing CircuitPython, check out [Installing CircuitPython](https://learn.adafruit.com/welcome-to-circuitpython/installing-circuitpython).

 **Click the link above and download the latest UF2 file.**

Download and save it to your **Downloads** folder or desktop (or wherever is handy).

![led_matrices_Save_to_Desktop.png](https://cdn-learn.adafruit.com/assets/assets/000/095/075/medium640/led_matrices_Save_to_Desktop.png?1601050695)

Plug your MatrixPortal S3 into your computer using a known-good USB cable.

**A lot of people end up using charge-only USB cables and it is very frustrating! So make sure you have a USB cable you know is good for data sync.**

Click the **Reset** button (indicated by the green arrow) on your board. When you see the NeoPixel RGB LED (indicated by the magenta arrow) turn purple, press it again. At that point, the NeoPixel should turn green. If it turns red, check the USB cable, try another USB port, etc.

If double-clicking doesn't work the first time, try again. Sometimes it can take a few tries to get the rhythm right!

![led_matrices_Buttons.jpg](https://cdn-learn.adafruit.com/assets/assets/000/126/074/medium640/led_matrices_Buttons.jpg?1700070173)

You will see a new disk drive appear called **MATRXS3BOOT**.

Drag the **adafruit\_circuitpython\_etc.uf2** file over to **MATRXS3BOOT****.**

![led_matrices_one_one.png](https://cdn-learn.adafruit.com/assets/assets/000/126/073/medium640/led_matrices_one_one.png?1700070069)

The LED will flash. Then, the **MATRXS3BOOT** &nbsp;drive will disappear and a new disk drive called **CIRCUITPY** will appear.

That's it, you're done! :)

![led_matrices_CircuitPy.png](https://cdn-learn.adafruit.com/assets/assets/000/122/618/medium640/led_matrices_CircuitPy.png?1689369656)

# MatrixPortal CircuitPython Animated Message Board

## Code the Message Board

Once you've finished setting up your MatrixPortal S3 with CircuitPython, you can access the code, fonts, images and necessary libraries by downloading the Project Bundle.

To do this, click on the **&nbsp;Download Project Bundle** &nbsp;button in the window below. It will download as a zipped folder.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/code.py

## Upload the Code, Fonts, Images and Libraries to the MatrixPortal S3
After downloading the Project Bundle, plug your MatrixPortal S3 into the computer's USB port. You should see a new flash drive appear in the computer's File Explorer or Finder (depending on your operating system) called&nbsp; **CIRCUITPY**. Unzip the folder and copy the following items to the MatrixPortal S3's&nbsp; **CIRCUITPY** &nbsp;drive.&nbsp;

- **lib** &nbsp;folder
- **fonts** folder
- **images** folder
- **code.py**
- **demo.py**

Your MatrixPortal S3&nbsp; **CIRCUITPY&nbsp;** drive should look like this after copying the **fonts** , **images** , and **lib** folders and the **code.py** and&nbsp; **demo.py**** &nbsp;**files.

![MatrixPortal](https://raw.githubusercontent.com/adafruit/Adafruit_Learning_System_Guides/folder-images/Matrix_Portal_S3_Message_Board.png )

# Code Overview

The majority of this code is written as a library. There are a couple of demos, which will be covered in the Usage page, but the overview will go over the library part. The code relies heavily on the CircuitPython `bitmaptools` and `displayio` modules in order to to the graphics work. The library classes can be broken up into a couple of different categories. You can find more information about `displayio` in the [CircuitPython Display Support Using displayio guide](https://learn.adafruit.com/circuitpython-display-support-using-displayio).

## Main Classes

The main classes provide the primary functionality to the message board.

### Double Buffering

Double Buffering is handled by the `DoubleBuffer` class. This class works by creating 2 sets of `displayio` Bitmaps, TileGrids, and Groups. It sets 1 of the bitmaps as the "active" buffer, meaning the buffer that is currently being drawn to. Once it is ready to display, the `show()` function is called, which will set the group of the active buffer to be displayed and then swap the buffers. By doing this, it avoids displaying small changes as they are drawn, which can lead to some flickering, and switches everything all at once. Both buffer bitmaps share the same shader, so it is best to keep consistent with the same bit depth of all bitmaps.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/lib/messageboard/doublebuffer.py

### Message

A `Message` is simply class that uses a bitmap which contains one or more labels or images placed onto it. When displayed, it acts as the foreground which can be animated on the sign. The message's bitmap buffer is automatically enlarged as content is added to it so that it only takes up as much space as it needs. The `mask_color` and `opacity` can be set to control how it is blended into the background.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/lib/messageboard/message.py

### Font Pool

The `FontPool` class is a simple font loader and dictionary that holds the loaded fonts so that they don't need to be duplicated for multiple messages.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/lib/messageboard/fontpool.py

### MessageBoard

The `MessageBoard` class is the main container class and as the name implies, it controls the message board. The message board allows setting what the current background should be and will be used when the animate command is used. The `animate()` function is used to dynamically load and run an animation, which will perform an action on the text until it reaches the end of the function. The `_draw()` function is a callback that is passed into the animation class when it is instantiated and is the function primarily responsible for drawing each frame of the animation.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/lib/messageboard/__init__.py

## Animation Classes

All of the animation classes are built on top of the base `Animation` class, which includes any functions that are shared with the different categories.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/__init__.py

### Scroll Animations

The `Scroll` animation class contains 8 different main animation functions plus 1 generic animation function, which the main functions call. The 8 functions include a scroll in and scroll out function for each of the 4 directions. Functions beginning with **out\_to** cause the content to scroll offscreen and functions beginning with **in\_from** cause the content to scroll towards the center of the screen.

The generic `scroll_from_to()` function allows for scrolling from one coordinate to another. It could be used to make text scroll at a diagonal angle.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/scroll.py

### Loop Animations

The `Loop` animation class contains functions which are similar to the scroll animations, except they cause the content to wrap back in from the opposite side. There are 4 functions for each of the directions.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/loop.py

### Split Animations

The `Split` animation class contains 4 functions as well. There are **out** functions and **in** functions, that cause the content to split out and join in respectively, for both the horizontal and vertical directions.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/split.py

The `Static` animation class is more of a miscellaneous collection of functions that don't provide any motion. It includes functions to `show`, `hide`, `blink`, `flash`, `fade_in`, and `fade_out` content. The static class will always display the message at the position of the last message to be displayed and default to **(0,0)**.

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/lib/messageboard/animations/static.py

# MatrixPortal CircuitPython Animated Message Board

## Assembly

![](https://cdn-learn.adafruit.com/assets/assets/000/123/874/medium800/led_matrices_IMG_5331.jpeg?1692750982)

Assembly of the matrixPortal is fairly straightforward and the only tools you will need are a screwdriver or two and some flush cutters. You may wish to clean up the 3D prints prior to starting assembly.

## MatrixPortal Mount Subassembly
For mounting the MatrixPortal S3, you will need:

- MatrixPortal S3
- MatrixPortal Mount
- 2 x M2.5 x 10mm Screws
- 2 x M2.5 Hex Nut

![led_matrices_IMG_5270.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/779/medium640/led_matrices_IMG_5270.jpeg?1692732102)

Insert the MatrixPortal so that the 2x10 IDC connector goes into the rectangle. It should be inserted from the side with the raised arms so that the holes line up. Insert the M2.5 screws through the MatrixPortal and out the holes in the mount.

![led_matrices_IMG_5273.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/784/medium640/led_matrices_IMG_5273.jpeg?1692732706)

![led_matrices_IMG_5271.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/785/medium640/led_matrices_IMG_5271.jpeg?1692732660)

Attach the M2.5 Hex Nuts and tighten snugly.

![led_matrices_IMG_5272.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/781/medium640/led_matrices_IMG_5272.jpeg?1692732522)

## Connect the Matrices
For this part, start with four 16x32 matrices.

![led_matrices_IMG_5259.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/774/medium640/led_matrices_IMG_5259.jpeg?1692731911)

You will want to lay them out side-by-side so that the input connector is to the right and the text appears upside down.

![led_matrices_IMG_5261.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/789/medium640/led_matrices_IMG_5261.jpeg?1692732850)

![led_matrices_IMG_5260.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/796/medium640/led_matrices_IMG_5260.jpeg?1692733623)

For connecting the matrices, you will need:

- 6 x Connector Bracket
- 10 x M3 x 10mm Screws

![led_matrices_IMG_5262.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/800/medium640/led_matrices_IMG_5262.jpeg?1692733726)

Starting from the left, place a connector so that it sits on the alignment peg and is aligned to the screw holes. Install 2 screws to hold it in place. The screws should be snug, but not overtightened.

![led_matrices_IMG_5263.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/802/medium640/led_matrices_IMG_5263.jpeg?1692733722)

![led_matrices_IMG_5264.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/810/medium640/led_matrices_IMG_5264.jpeg?1692731929)

Do the same for the other left connector bracket and both middle connector brackets.

![led_matrices_IMG_5265.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/825/medium640/led_matrices_IMG_5265.jpeg?1692735405)

For the two right connector brackets, only install a screw in the right hole. The holes without screws will be used for the MatrixPortal S3 Mount.

Now you should have all 6 connector brackets attached with the exception of the right two brackets missing their left screw.

![led_matrices_IMG_5268.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/826/medium640/led_matrices_IMG_5268.jpeg?1692735381)

![led_matrices_IMG_5269.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/827/medium640/led_matrices_IMG_5269.jpeg?1692735468)

To connect the MatrixPortal Mount Subassembly, two of the screws can be anywhere from 10mm to 16mm. You will need the following:

- MatrixPortal Mount Subassembly
- 2 x M3 x 10mm Screws
- 2 x M3 x 10mm-16mm Screws

![led_matrices_IMG_5276.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/828/medium640/led_matrices_IMG_5276.jpeg?1692751536)

Place the MatrixPortal Mount Subassembly so that the 2 raised arms go into the holes without the screws.

![led_matrices_IMG_5277.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/829/medium640/led_matrices_IMG_5277.jpeg?1692751803)

Install the shorter screws into the part of the subassembly that covers the center holes of the matrix.

![led_matrices_IMG_5278.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/830/medium640/led_matrices_IMG_5278.jpeg?1692751821)

Install the longer screws into the holes above the connector bracket.

![led_matrices_IMG_5279.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/831/medium640/led_matrices_IMG_5279.jpeg?1692751928)

## Top and Bottom Panel Assembly
Start with the panel with the cutout holes. You will also need 7 panels without holes further down.

![led_matrices_IMG_5257.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/832/medium640/led_matrices_IMG_5257.jpeg?1692752393)

With the front side of the matrices facing towards you, place the panel so that it's almost in its final place and slide the right side onto the connector bracket. You may need to flex the panel a bit to get it past the buttons.

![led_matrices_IMG_5280.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/833/medium640/led_matrices_IMG_5280.jpeg?1692752492)

![led_matrices_IMG_5281.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/834/medium640/led_matrices_IMG_5281.jpeg?1692753142)

Continue sliding the panel to the right until the panel's left side is able to clear the connector bracket underneath it and slide it onto its respective bracket.

![led_matrices_IMG_5282.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/835/medium640/led_matrices_IMG_5282.jpeg?1692753699)

![led_matrices_IMG_5284.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/836/medium640/led_matrices_IMG_5284.jpeg?1692753922)

Go ahead and center it so that the holes all line up.

![led_matrices_IMG_5285.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/837/medium640/led_matrices_IMG_5285.jpeg?1692753902)

The regular panels are easier to slide on from one end or the other until they sit flush in the middle.

When sliding them on, be sure that the lip of the panel faces the same direction as the one with cutout holes.

![led_matrices_IMG_5289.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/840/medium640/led_matrices_IMG_5289.jpeg?1692754232)

![led_matrices_IMG_5286.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/841/medium640/led_matrices_IMG_5286.jpeg?1692754187)

Continue sliding on the remainder of the panels until all 8 are on the message board.

![led_matrices_IMG_5292.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/842/medium640/led_matrices_IMG_5292.jpeg?1692754201)

## Side Panels and Front LED Acrylic
To install the sides, you will need the following:

- 2 x Side Panels
- 4 x 10mm Screws
- LED Acrylic Piece or Pieces

![led_matrices_IMG_5299.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/843/medium640/led_matrices_IMG_5299.jpeg?1692799985)

Start by connecting one side. To get it past the alignment peg, you may need to flex parts slightly. Install 2 screws once it is in place.

![led_matrices_IMG_5295.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/844/medium640/led_matrices_IMG_5295.jpeg?1692754576)

![led_matrices_IMG_5297.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/845/medium640/led_matrices_IMG_5297.jpeg?1692754505)

Slide any acrylic pieces you have into the message board from the side without a panel. The acrylic should be installed with the shiny side facing towards the matrices and the matte side facing towards the outside.

![led_matrices_IMG_5301.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/846/medium640/led_matrices_IMG_5301.jpeg?1692800322)

Install the second side panel. It's easiest to get it over the alignment peg first and then get the acrylic into the slot. Install 2 more screws.

![led_matrices_IMG_5302.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/848/medium640/led_matrices_IMG_5302.jpeg?1692800560)

![led_matrices_IMG_5303.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/849/medium640/led_matrices_IMG_5303.jpeg?1692800663)

## Wiring
For the wiring, you will be using 3 of the shorter ribbon cables and 2 of the power cables that came with the matrices.

![led_matrices_420-04.jpg](https://cdn-learn.adafruit.com/assets/assets/000/123/854/medium640/led_matrices_420-04.jpg?1692750128)

Start by connecting the 4 panels together using the 3 shorter ribbon cables.

![led_matrices_IMG_5304.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/853/medium640/led_matrices_IMG_5304.jpeg?1692749925)

When connecting the wires to the MatrixPortal S3, place the flatter sides of the spade connectors together and insert them into the 5V screw terminal. Make sure the screw is fairly tight.

![led_matrices_IMG_5305.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/855/medium640/led_matrices_IMG_5305.jpeg?1692748935)

![led_matrices_IMG_5306.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/856/medium640/led_matrices_IMG_5306.jpeg?1692748959)

Connect the ground wires to the other terminal.

![led_matrices_IMG_5307.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/857/medium640/led_matrices_IMG_5307.jpeg?1692749067)

Connect the 4 power plugs to the power inlet of each panel. You may have to try a few different ends until you find one that reaches the furthest plug well enough.

![led_matrices_IMG_5309.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/858/medium640/led_matrices_IMG_5309.jpeg?1692749204)

![led_matrices_IMG_5310.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/859/medium640/led_matrices_IMG_5310.jpeg?1692749221)

Connect the longer black ribbon cable between the MatrixPortal and the input of the right-most panel.

![led_matrices_IMG_5311.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/860/medium640/led_matrices_IMG_5311.jpeg?1692749397)

![led_matrices_IMG_5312.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/861/medium640/led_matrices_IMG_5312.jpeg?1692749412)

## Wire Management
The connector brackets have built-in zip tie holders designed to fit zip with a width of about 3mm or smaller.

![led_matrices_IMG_5313.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/862/medium640/led_matrices_IMG_5313.jpeg?1692749536)

When zipping down wires using the connectors, leave the zip tie loose for now. You will be feeding a larger zip tie between the smaller ones.

![led_matrices_IMG_5315.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/863/medium640/led_matrices_IMG_5315.jpeg?1692749639)

Place a second zip tie across from the first, even if you aren't holding any wires in place.

![led_matrices_IMG_5317.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/864/medium640/led_matrices_IMG_5317.jpeg?1692750086)

You will want to carefully fold the cable back and forth until it sits neatly between the 2 connectors.

![led_matrices_IMG_5318.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/865/medium640/led_matrices_IMG_5318.jpeg?1692750219)

![led_matrices_IMG_5320.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/866/medium640/led_matrices_IMG_5320.jpeg?1692750235)

Take a larger zip tie (8 inches or longer) and loosely connect it between the smaller zip ties so that it looks a bit like a chain.

![led_matrices_IMG_5321.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/867/medium640/led_matrices_IMG_5321.jpeg?1692750310)

Tighten the smaller zip ties first.

![led_matrices_IMG_5322.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/868/medium640/led_matrices_IMG_5322.jpeg?1692750399)

Then tighten the larger zip tie, which will hold the ribbon cable in place.

![led_matrices_IMG_5323.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/869/medium640/led_matrices_IMG_5323.jpeg?1692750458)

Clip off the ends of the zip ties with flush cutters.

Do this for the other sets of connectors.

![led_matrices_IMG_5325.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/870/medium640/led_matrices_IMG_5325.jpeg?1692750506)

You may want to carefully fold and secure the ribbon cable around the MatrixPortal so that it doesn't stick out the back.

![led_matrices_IMG_5327.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/872/medium640/led_matrices_IMG_5327.jpeg?1692750818)

You can also use the arms of the MatrixPortal Mount for securing wires.

![led_matrices_IMG_5330.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/873/medium640/led_matrices_IMG_5330.jpeg?1692750871)

That's it! You should now be done.

![led_matrices_IMG_5331.jpeg](https://cdn-learn.adafruit.com/assets/assets/000/123/875/medium640/led_matrices_IMG_5331.jpeg?1692751161)

# MatrixPortal CircuitPython Animated Message Board

## Usage

## Basic Usage

To create a message and display it, you can use the following minimal example:

```auto
import time
from adafruit_matrixportal.matrix import Matrix
from messageboard import MessageBoard
from messageboard.fontpool import FontPool
from messageboard.message import Message

matrix = Matrix(width=128, height=16, bit_depth=5)
messageboard = MessageBoard(matrix)
fontpool = FontPool()

message = Message(fontpool.find_font("terminal"))
message.add_text("Hello World")
messageboard.animate(message, "Static", "show")
time.sleep(5)
```

You will need to import `Matrix`, `MessageBoard`, `FontPool`, and `Message`. Matrix uses the MatrixPortal library. See the [Creating MatrixPortal Projects with CircuitPython guide](https://learn.adafruit.com/creating-projects-with-the-circuitpython-matrixportal-library) for more details on that library. The matrix object is the only thing needed to pass in to create a MessageBoard object.

When FontPool is initialized, the terminal font is automatically added in, so that's available without doing anything further.

Finally, a message is created using the terminal font. The text "Hello World" is added, and the show animation is called. The message displays for 5 seconds before finishing the code.

## Animations

There are quite a few animations available. To call an animation function, the animate function of the `messageboard` object is called, along with the Class name and function name of the animation. For instance, looking at the basic usage, the `show` function of the `Static` class is called. Here is a list of animations included:

### Static Animations

Static animations keep a message in its last position, which is why this group is called static. These are used to show or hide text in various ways. If you would like to set the position manually, you can call `messageboard.set_message_position(x, y)` before animating the text.

Call `messageboard.animate(message, "Static", "show")` to show a message at its current position instantly.

![led_matrices_show.png](https://cdn-learn.adafruit.com/assets/assets/000/124/003/medium640/led_matrices_show.png?1692994224)

Call `messageboard.animate(message, "Static", "hide")`&nbsp;to hide a message instantly.

![led_matrices_hide.png](https://cdn-learn.adafruit.com/assets/assets/000/124/002/medium640/led_matrices_hide.png?1692994211)

Call `messageboard.animate(message, "Static", "blink", count=3, duration=1)` to blink a message on and off a certain number of times expressed by&nbsp; **count** &nbsp;(default of 3) over the&nbsp; **duration** &nbsp;time (default of 1 second).

![led_matrices_blink.png](https://cdn-learn.adafruit.com/assets/assets/000/124/005/medium640/led_matrices_blink.png?1692994667)

Call `messageboard.animate(message, "Static", "fade_in", duration=1)` to fade a message in over the&nbsp; **duration** &nbsp;time (default of 1 second).

![led_matrices_fade_in.png](https://cdn-learn.adafruit.com/assets/assets/000/124/001/medium640/led_matrices_fade_in.png?1692994197)

Call `messageboard.animate(message, "Static", "fade_out", duration=1)` to fade a message in over the&nbsp; **duration** &nbsp;time (default of 1 second).

![led_matrices_fade_out.png](https://cdn-learn.adafruit.com/assets/assets/000/124/000/medium640/led_matrices_fade_out.png?1692994185)

Call `messageboard.animate(message, "Static", "flash", count=3, duration=1)` to fade a message in and out a certain number of times expressed by **count** &nbsp;(default of 3) over the&nbsp; **duration** &nbsp;time (default of 1 second).

![led_matrices_flash.png](https://cdn-learn.adafruit.com/assets/assets/000/124/006/medium640/led_matrices_flash.png?1692994754)

### Scroll Animations

Scroll animations scroll the text into or out of frame.

Call `messageboard.animate(message, "Scroll", "in_from_left", duration=1)` to scroll a message into frame from the left over the&nbsp; **duration** time (default of 1 second).

![led_matrices_in_from_left.png](https://cdn-learn.adafruit.com/assets/assets/000/124/059/medium640/led_matrices_in_from_left.png?1693001659)

Call `messageboard.animate(message, "Scroll", "in_from_right", duration=1)` to scroll a message into frame from the right over the&nbsp; **duration** time (default of 1 second).

![led_matrices_in_from_right.png](https://cdn-learn.adafruit.com/assets/assets/000/124/060/medium640/led_matrices_in_from_right.png?1693001689)

Call `messageboard.animate(message, "Scroll", "in_from_top", duration=1)` to scroll a message into frame from the top over the&nbsp; **duration** time (default of 1 second).

![led_matrices_in_from_top.png](https://cdn-learn.adafruit.com/assets/assets/000/124/043/medium640/led_matrices_in_from_top.png?1693000992)

Call `messageboard.animate(message, "Scroll", "in_from_bottom", duration=1)` to scroll a message into frame from the bottom over the&nbsp; **duration** time (default of 1 second).

![led_matrices_in_from_bottom.png](https://cdn-learn.adafruit.com/assets/assets/000/124/044/medium640/led_matrices_in_from_bottom.png?1693001008)

Call `messageboard.animate(message, "Scroll", "out_to_left", duration=1)` to scroll a message out of frame to the left over the&nbsp; **duration** time (default of 1 second).

![led_matrices_out_to_left.png](https://cdn-learn.adafruit.com/assets/assets/000/124/061/medium640/led_matrices_out_to_left.png?1693001710)

Call `messageboard.animate(message, "Scroll", "out_to_right", duration=1)` to scroll a message out of frame to the right over the&nbsp; **duration** time (default of 1 second).

![led_matrices_out_to_right.png](https://cdn-learn.adafruit.com/assets/assets/000/124/063/medium640/led_matrices_out_to_right.png?1693001724)

Call `messageboard.animate(message, "Scroll", "out_to_top", duration=1)` to scroll a message out of frame towards the top over the&nbsp; **duration** time (default of 1 second).

![led_matrices_out_to_top.png](https://cdn-learn.adafruit.com/assets/assets/000/124/057/medium640/led_matrices_out_to_top.png?1693001464)

Call `messageboard.animate(message, "Scroll", "out_to_from", duration=1)` to scroll a message out of frame towards the bottom over the&nbsp; **duration** time (default of 1 second).

![led_matrices_out_to_bottom.png](https://cdn-learn.adafruit.com/assets/assets/000/124/058/medium640/led_matrices_out_to_bottom.png?1693001480)

### Loop Animations

Similar to the scroll animations, but the message wraps around to the other side of the message board.

Call `messageboard.animate(message, "Loop", "left", duration=1, count=1)` to loop a message out of frame to the left and back in from the right a certain number of times expressed by&nbsp; **count** (default of 1) over the&nbsp; **duration** time (default of 1 second).

![led_matrices_left.png](https://cdn-learn.adafruit.com/assets/assets/000/124/049/medium640/led_matrices_left.png?1693001167)

Call `messageboard.animate(message, "Loop", "right", duration=1, count=1)` to loop a message out of frame to the right and back in from the left a certain number of times expressed by&nbsp; **count** (default of 1) over the&nbsp; **duration** time (default of 1 second).

![led_matrices_right.png](https://cdn-learn.adafruit.com/assets/assets/000/124/050/medium640/led_matrices_right.png?1693001184)

Call `messageboard.animate(message, "Loop", "up", duration=1, count=1)` to loop a message out of frame to the top and back in from the bottom a certain number of times expressed by&nbsp; **count** (default of 1) over the&nbsp; **duration** time (default of 1 second).

![led_matrices_up.png](https://cdn-learn.adafruit.com/assets/assets/000/124/051/medium640/led_matrices_up.png?1693001203)

Call `messageboard.animate(message, "Loop", "down", duration=1, count=1)` to loop a message out of frame to the bottom and back in from the top a certain number of times expressed by&nbsp; **count** (default of 1) over the&nbsp; **duration** time (default of 1 second).

![led_matrices_down.png](https://cdn-learn.adafruit.com/assets/assets/000/124/052/medium640/led_matrices_down.png?1693001217)

### Split Animations

These animations are for splitting up or joining together the message either horizontally or vertically.

Call `messageboard.animate(message, "Split", "out_horizontally", duration=0.5)` to split a message out of frame horizontally over the&nbsp; **duration** time (default of 0.5 seconds).

![led_matrices_out_horizontally.png](https://cdn-learn.adafruit.com/assets/assets/000/124/053/medium640/led_matrices_out_horizontally.png?1693001253)

Call `messageboard.animate(message, "Split", "in_horizontally", duration=0.5)` to join a message into frame horizontally over the&nbsp; **duration** time (default of 0.5 seconds).

![led_matrices_in_horizontally.png](https://cdn-learn.adafruit.com/assets/assets/000/124/054/medium640/led_matrices_in_horizontally.png?1693001296)

Call `messageboard.animate(message, "Split", "out_vertically", duration=0.5)` to split a message out of frame vertically over the&nbsp; **duration** time (default of 0.5 seconds).

![led_matrices_out_vertically.png](https://cdn-learn.adafruit.com/assets/assets/000/124/055/medium640/led_matrices_out_vertically.png?1693001316)

Call `messageboard.animate(message, "Split", "in_vertically", duration=0.5)` to join a message into frame vertically over the&nbsp; **duration** time (default of 0.5 seconds).

![led_matrices_in_vertically.png](https://cdn-learn.adafruit.com/assets/assets/000/124/056/medium640/led_matrices_in_vertically.png?1693001346)

## Examples

There are a couple of examples that demonstrate how to use the included **messageboard** library.

### code.py

The one included in **code.py** is only slightly more complicated than the basic usage code. It also loads the Arial font, a background, and an image.&nbsp;

```python
import time
from adafruit_matrixportal.matrix import Matrix
from messageboard import MessageBoard
from messageboard.fontpool import FontPool
from messageboard.message import Message

matrix = Matrix(width=128, height=16, bit_depth=5)
messageboard = MessageBoard(matrix)
messageboard.set_background("images/background.bmp")
fontpool = FontPool()
fontpool.add_font("arial", "fonts/Arial-10.pcf")

# Create the message ahead of time
message = Message(fontpool.find_font("arial"), mask_color=0xFF00FF, opacity=0.8)
message.add_image("images/maskedstar.bmp")
message.add_text("Hello World!", color=0xFFFF00, x_offset=2, y_offset=2)
```

For the animation, it resides in the main program loop and scrolls the message both into and out of the frame.

```auto
while True:
    # Animate the message
    messageboard.animate(message, "Scroll", "in_from_right")
    time.sleep(1)
    messageboard.animate(message, "Scroll", "out_to_left")
```

Here is that example code in its entirety:

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/code.py

### demo.py

The **demo.py** example is a little more complex and shows some of the capabilities using four different messages. Like the previous example, it starts off with the same imports and sets up the `messageboard` with a background image.

```auto
import time
from adafruit_matrixportal.matrix import Matrix
from messageboard import MessageBoard
from messageboard.fontpool import FontPool
from messageboard.message import Message

matrix = Matrix(width=128, height=16, bit_depth=5)
messageboard = MessageBoard(matrix)
messageboard.set_background("images/background.bmp")
```

After that, a `FontPool` object is created and two fonts are added to it, which will be reused.

```python
fontpool = FontPool()
fontpool.add_font("comic", "fonts/Comic-10.pcf")
fontpool.add_font("dejavu", "fonts/DejaVuSans-10.pcf")
```

Next, the messages are set up. Note that the first message doesn't have any content added to it at this time because the intent is to change it inside the main loop.

```python
message1 = Message(fontpool.find_font("dejavu"))

message2 = Message(fontpool.find_font("comic"), mask_color=0x00FF00)
print("add blinka")
message2.add_image("images/maskedblinka.bmp")
print("add text")
message2.add_text("CircuitPython", color=0xFFFF00, y_offset=-2)

message3 = Message(fontpool.find_font("dejavu"))
message3.add_text("circuitpython.com", color=0xFF0000)

message4 = Message(fontpool.find_font("arial"))
message4.add_text("Buy Electronics", color=0xFFFFFF)
```

In the main loop, `message1` has content added and is animated. To demonstrate how the messages can be dynamically changed, this is show three more times. This would be useful for updating the message with the current time or from data on the internet.

```python
message1.clear()
message1.add_text("Scroll Text In", color=0xFF0000)
messageboard.animate(message1, "Scroll", "in_from_left")
time.sleep(1)

message1.clear()
message1.add_text("Change Messages")
messageboard.animate(message1, "Static", "show")
time.sleep(1)

message1.clear()
message1.add_text("And Scroll Out")
messageboard.animate(message1, "Static", "show")
messageboard.animate(message1, "Scroll", "out_to_right")
time.sleep(1)

message1.clear()
message1.add_text("Or more effects like looping   ", color=0xFFFF00)
messageboard.animate(message1, "Split", "in_vertically")
messageboard.animate(message1, "Loop", "left")
messageboard.animate(message1, "Static", "flash", count=3)
messageboard.animate(message1, "Split", "out_vertically")
time.sleep(1)
```

Here is the animation of the remaining messages. For `message2`, use of an alternate mask color is demonstrated and for `message3`, the background is changed to green prior to displaying the message and changed back to the image after.

```python
messageboard.animate(message2, "Static", "fade_in")
time.sleep(1)
messageboard.animate(message2, "Static", "fade_out")

messageboard.set_background(0x00FF00)
messageboard.animate(message3, "Scroll", "in_from_top")
time.sleep(1)
messageboard.animate(message3, "Scroll", "out_to_bottom")
messageboard.set_background("images/background.bmp")

messageboard.animate(message4, "Scroll", "in_from_right")
time.sleep(1)
```

Here is that example code in its entirety:

https://github.com/adafruit/Adafruit_Learning_System_Guides/blob/main/Matrix_Portal/Matrix_Portal_S3_Message_Board/demo.py

# MatrixPortal CircuitPython Animated Message Board

## bitmaptools Documentation


## Featured Products

### Adafruit Matrix Portal S3 CircuitPython Powered Internet Display

[Adafruit Matrix Portal S3 CircuitPython Powered Internet Display](https://www.adafruit.com/product/5778)
Folks love our [wide selection of RGB matrices](https://www.adafruit.com/category/327) and accessories&nbsp;for making custom colorful LED displays... and our RGB Matrix Shields and FeatherWings can be quickly soldered together to make the wiring much easier. But what if we made it...

In Stock
[Buy Now](https://www.adafruit.com/product/5778)
[Related Guides to the Product](https://learn.adafruit.com/products/5778/guides)
### Medium 16x32 RGB LED matrix panel - 6mm Pitch

[Medium 16x32 RGB LED matrix panel - 6mm Pitch](https://www.adafruit.com/product/420)
Bring a little bit of Times Square into your home with this 16 x 32 RGB LED matrix panel. These panels are normally used to make video walls, here in New York we see them on the sides of busses and bus stops, to display animations or short video clips. We thought they looked really cool so we...

In Stock
[Buy Now](https://www.adafruit.com/product/420)
[Related Guides to the Product](https://learn.adafruit.com/products/420/guides)
### Black Nylon Machine Screw and Stand-off Set – M3 Thread

[Black Nylon Machine Screw and Stand-off Set – M3 Thread](https://www.adafruit.com/product/4685)
Totaling **420 pieces** , this **M3 Screw Set** &nbsp;is a must-have for your workstation.&nbsp;You'll have enough screws, nuts, and hex standoffs to fuel your maker tendencies&nbsp;for days on end! M3 size screws fit a number of&nbsp;Adafruit breakout/dev board...

In Stock
[Buy Now](https://www.adafruit.com/product/4685)
[Related Guides to the Product](https://learn.adafruit.com/products/4685/guides)
### Black Nylon Machine Screw and Stand-off Set – M2.5 Thread

[Black Nylon Machine Screw and Stand-off Set – M2.5 Thread](https://www.adafruit.com/product/3299)
Totaling 380 pieces, this **M2.5 Screw Set** &nbsp;is a must-have for your workstation.&nbsp;You'll have enough screws, nuts, and hex standoffs to fuel your maker tendencies&nbsp;for days on end! M2.5 size screws fit almost all of the Adafruit breakout/dev board mounting holes...

Out of Stock
[Buy Now](https://www.adafruit.com/product/3299)
[Related Guides to the Product](https://learn.adafruit.com/products/3299/guides)
### 5V 4A (4000mA) switching power supply - UL Listed

[5V 4A (4000mA) switching power supply - UL Listed](https://www.adafruit.com/product/1466)
Need a lot of 5V power? This switching supply gives a clean regulated 5V output at up to **4 Amps** (4000mA). 110 or 240 input, so it works in any country. The plugs are "US 2-prong" style so you may need a plug adapter, but you can pick one up at any hardware store for $1 or so,...

In Stock
[Buy Now](https://www.adafruit.com/product/1466)
[Related Guides to the Product](https://learn.adafruit.com/products/1466/guides)
### 2.1mm 5VDC Barrel Jack to USB C Adapter

[2.1mm 5VDC Barrel Jack to USB C Adapter](https://www.adafruit.com/product/4536)
As technology changes and adapts, so does Adafruit, and speaking of&nbsp;_adapting_, this&nbsp;_ **adapter** _&nbsp;has a 2.1mm barrel jack socket and a USB C plug - you could use this to power a USB C device from a common wall adapter.

USB C is the latest...

In Stock
[Buy Now](https://www.adafruit.com/product/4536)
[Related Guides to the Product](https://learn.adafruit.com/products/4536/guides)
### USB C to USB C Cable - USB 3.1 Gen 4 with E-Mark - 1 meter long

[USB C to USB C Cable - USB 3.1 Gen 4 with E-Mark - 1 meter long](https://www.adafruit.com/product/4199)
As technology changes and adapts, so does Adafruit! Rather than the regular USB A, this cable has&nbsp; **USB C to USB C** &nbsp;plugs!

USB C is the latest industry-standard connector for transmitting data&nbsp;_and_&nbsp;power. Like Lightning and MagSafe cables, USB C...

In Stock
[Buy Now](https://www.adafruit.com/product/4199)
[Related Guides to the Product](https://learn.adafruit.com/products/4199/guides)
### GPIO Ribbon Cable 2x8 IDC Cable - 16 pins 12" long

[GPIO Ribbon Cable 2x8 IDC Cable - 16 pins 12" long](https://www.adafruit.com/product/4170)
Connect this to that! If you want to bridge those contacts out onto another PCB, you'll want this **GPIO Ribbon Cable**! Comes in a classic Adafruit Black, has a nice soft flexible 16-line 0.05" ribbon cable and keyed IDC connectors on both ends. <a...></a...>

In Stock
[Buy Now](https://www.adafruit.com/product/4170)
[Related Guides to the Product](https://learn.adafruit.com/products/4170/guides)

## Related Guides

- [Adafruit MatrixPortal S3](https://learn.adafruit.com/adafruit-matrixportal-s3.md)
- [PyPortal Weather Station](https://learn.adafruit.com/pyportal-weather-station.md)
- [Nunchuck Controlled Laser Cat Toy](https://learn.adafruit.com/nunchuck-controlled-laser-cat-toy.md)
- [FunHouse IoT Fume Extractor and Air Quality Sensor](https://learn.adafruit.com/funhouse-fume-extractor-iot-air-quality-sensor.md)
- [CircuitPython Powered Sip & Puff with ST LPS33HW Pressure Sensor](https://learn.adafruit.com/st-lps33-and-circuitpython-sip-and-puff.md)
- [ESP32-S3 BLE RS-232 Controller](https://learn.adafruit.com/esp32-s3-ble-rs232-controller.md)
- [Espresso Water Tank Meter](https://learn.adafruit.com/espresso-water-tank-meter.md)
- [Knobby Sequencer](https://learn.adafruit.com/knobby-sequencer.md)
- [Ninja Timer: Giant 7-Segment Display](https://learn.adafruit.com/ninja-timer-giant-7-segment-display.md)
- [Wireless ESP32-S2 Touch Screen Controller for Pure Data](https://learn.adafruit.com/wireless-esp32-s2-controller-for-pure-data.md)
- [RGB & HSV NeoPixel Dialer](https://learn.adafruit.com/rgb-hsv-neopixel-dialer.md)
- [Raspberry Pi Halloween Costume Detector](https://learn.adafruit.com/raspberry-pi-halloween-costume-detector.md)
- [Servo Boss](https://learn.adafruit.com/servo-boss.md)
- [Programmable Wireless BLE Gesture Mouse](https://learn.adafruit.com/ble-wireless-gesture-mouse.md)
- [Compost Friend!](https://learn.adafruit.com/compost-optimization-machine.md)
- [Wireless NeoPixel Controller](https://learn.adafruit.com/neotrellis-neopixel-controller.md)
