Software apps and online services
Hand tools and fabrication machines
There are lots of ways to connect PocketBeagle® up to LED strands and matrices thanks to the powerful on-board Programmable Real-time Unit (PRU) microcontrollers and some folks have made a career out of doing just that. The good news for you is there are now some wonderful tools to make it really easy and affordable to build very fancy animated Christmas lights and displays and this is a nice way to dip your toe in these waters with tools that could eventually land you on The Great Christmas Light Fight!
For more Holiday Projects with PocketBeagle® Check out this blog.
The controller hardware set me back about $75, including PocketBeagle, PocketScroller LED Panel Cape for PocketBeagle, and USB Wifi dongle. While, I spent about another $100 for a nice quality RGB LED panel and power supply from Adafruit, I've found similar for under $30 on Amazon and Aliexpress. Your mileage may vary, but I expect they'll work just fine and I've ordered a couple myself to find out.
Further, realize that these 64x32 LED panels have 2048 RGB LED segments! Using something like NeoPixels or DotStar LEDs where the controller smarts are in the LED segments themselves, you could easily spend 10, 20 or even 50 times as much, depending on your sources. Also, the controller is capable of driving 4 panels deep and 6 panels tall (256 x 192) while still doing 30fps refresh rates at 9 bits-per-pixel for a total of around 30 MILLION pixel updates per second! Have I ever mentioned these PRUs are powerful?
As I hope you can see, while I would certainly have more fun with more panels, the bang-for-the-buck and ability to grow made this a nice place to start.
I chose Falcon Christmas' Falcon Player (FPP) as my software controller because it provides a good initial experience and, again, lots of room to grow with integration to tools like xLights. While I could have easily started with something closer-to-the-metal, the ability to update the panels with simple memory update scripts made it easy to get low-level enough without souring me on implementation details. Falcon Christmas provides microSD card images for BeagleBone Black that are compatible with PocketBeagle, so there was minimal need for doing any software development or configuration, but the scripts are all there to do the software installation on a default BeagleBoard.org Debian image.
1) Download the Falcon Player version 2.4 microSD card image
The file "FPP-v2.4-BBB-btrfs.zip" for BeagleBone/PocketBeagle is available from https://github.com/FalconChristmas/fpp/releases. Note that I chose the 'btrfs' image as I understand them to be more robust to power failures as well as save more space on the microSD card.
Aside: I reported a small issue in version 2.3 that was quickly fixed in version 2.4. That's the amazing thing about tools like this, there's actually active developers and an interactive community of users! Try getting that with off-the-shelf commercial products. :-)
2) Download Etcher
Download Etcher from etcher.io. It is a tool to write images to microSD cards. It is also awesome and open source.
3) Write FPP-v2.4-BBB-btrfs.zip to microSD card using Etcher
You don't need to extract the ".img" file from the ".zip" because Etcher is awesome and does the extraction for you on-the-fly.
4) Verify microSD card image[optional]
To verify the microSD card image, I inserted the microSD into my PocketBeagle then connected my PocketBeagle to my computer via a microUSB cable. The USR0 LED blinks in a "heartbeat" pattern and I was able to visit the Falcon Player control panel at http://192.168.7.2 in the Chrome web browser. For a debug serial interface, if needed, you can use the USB UART click board from MikroElectronika. I had a separate PocketBeagle with female headers on top, instead of bottom, where I could plug this adapter in over the microSD card. This is a totally unnecessary item, but figure it is handy to document some debug processes here for those who might get stuck. It is possible to power the PocketBeagle via the USB UART click board by pressing the power button on PocketBeagle while the USB UART click board is powered via USB. Also note that a virtual serial port should also show up on your host computer and you can use any serial terminal software to access the board that way after it has booted. The 'root' password is 'root'. :-)
1) Buy PocketBeagle pre-soldered to the PocketScroller
Personally, at least on my first build, I soldered it with female headers on PocketBeagle, but buying the pre-soldered version will save you time and simplify my instructions. :-)
Note that on my first build I removed the screw terminal block and soldered wires directly in the holes where the screw terminal block was, so your will look slightly different there.
Note also that I have the microSD card plugged in from my previous verification step and I'll assume you have yours plugged in on future steps.
2) Connect 5V barrel adapter to the provided power cable for the panel
3) Connect the power cable to the LED panel
4) Screw wires to the PocketScroller power inputs
Personally, on my first build, I had a challenge with this, so I removed the screw terminals and soldered the wires directly to the board. I believe my fundamental issue was having too large of a screwdriver. Just make sure the red wire is connected to the 5V terminal and the black wire is connected to the GND terminal.
Below is a picture of my second build, where I didn't remove the screw terminal block. Near the bottom of this project, I snagged some pictures of my completed second and third builds. :-)
5) Plug wires into the other power cable connector
Red-to-red, black-to-black. It should fit snug enough to not want to fall out, other wise you might want to break out a soldering iron or clip and strip the wires to connect directly on the screw terminals of the PocketScroller.
6) Connect the ribbon cable between LED panel input and PocketScroller J1
The ribbon cable is keyed, so you won't plug it in backwards. Just make sure you connect to J1 on the PocketScroller and the input side of the LED panel. You'll notice arrows pointing left-to-right on the panel and you'll want to use the connector on the left-side of the power.
7) Plug in the USB WiFi adapter
Your adapter might look different.
You might choose to make some sort of enclosure after testing the LED panel, but this is where I stopped the mechanical build for the time being.
1) Plug in the 5V power supply
Do this before connecting the USB cable to make sure you don't try to draw panel power from your USB cable. You should see LEDs light up on your PocketBeagle within 30 seconds, including a heartbeat pattern on the USR0 LED.
WARNING: Be absolutely sure you are connecting a 5V supply!
2) Connect up the USB cable between your PocketBeagle and a host computer
3) Get to the FPP control panel
Open up http://192.168.7.2 in your Chrome or Firefox web browser.
4) Setup the WiFi
You need to connect to your home network so that you'll get time updates! This is fairly straight-forward under the Status/Control menu in the Network pull-down. Type in your SSID and PSK, then click the update button. The new IP address will start showing up near the top to be able to access the control panel from over your network once it has been obtained.
5) Set the channel outputs
See the Falcon Player manual Chapter 5: Input/Output section on channel outputs for some details on how to do this. For this panel, we need to set the single panel size to "64x32 1/16 scan". The "1/16 scan" part is in the panel specification and lets you know that 1 out of every 16 rows is scanned at a time. This Sparkfun blog post on "Everything You Didn't Want to Know About RGB Matrix Panels" helps make these scan rate specifications easy to understand. Everything else can stay at the defaults. When you start to look at how you could build out a bigger display, the flexibility of Falcon Player starts to show its beauty. Pretty easy, eh?
6) Enable "Matrix #2" pixel overlay model
This is required to work with the pixel overlay script examples, including the one provided here for the Christmas countdown. This was the hardest part for me to initially understand. The tricky part for me was figuring out to use 32 strings and 1 strand per string. The software wants to think of the LEDs as strings, but instead we have rows and the rows (strings) themselves aren't broken down into multiples. Our LED matrix is 32 rows high. Once I thought of it this way, it was pretty easy to figure out how to configure it. Also, the name "Matrix #2" appears to be completely arbitrary.
7) Test the panel the same as in the PRU Cookbook instructions
After testing uncheck the "Enable Test Mode" box before loading clock script.
8) Add the script
Copy the code from this project (PixelOverlay-Countdown.pl).
Open file manager, click on select files under upload files section and add the perl script. Then click on the Scripts tab and you will see the below. Choose the ".pl" program and click Run.
Your count down clock will now display on the matrix!
I've had a number of HUB75 LED matrix panels laying around for other projects, so I threw on a PocketBeagle, PocketScroller Cape for PocketBeagle and Christmas countdown software on those too.
Five 32x16 LED Panels
These are the medium pitch 32x16 panels available from Adafruit at https://www.adafruit.com/product/420.
Sixteen 32x32 panels
These are the 6mm pitch 32x32 panels available from Adafruit at https://www.adafruit.com/product/1484. The frame was built of learning from the tutorial at https://learn.adafruit.com/adafruit-diy-led-video-wall and placed on a simple art easel. I hope to eventually hang this one over a window with less obstruction.
microSD card Image used: https://github.com/FalconChristmas/fpp/releases/download/2.4/FPP-v2.4-BBB-btrfs.zip
Issue fixed to enable boot: https://github.com/FalconChristmas/fpp/issues/451
Script for countdown timer: https://github.com/FalconChristmas/fpp-scripts/blob/master/PixelOverlay/PixelOverlay-ScrollingText.pl
Instructions for pixel overlay setup: https://falcon-player.gitbooks.io/falcon-player-manual/content/chapter_five_inputoutput_setup/pixel_overlay_models.html
Updated script: https://gist.github.com/jadonk/fa3d9b96c81bd473064b0db542196311