Hitting bottleneck controlling close to 4,000 LEDs!

Thanks! I have no problem going DIY as I have an engineering background :wink:

I’ll probably build something similar in the near future, thank for the info it really helps! I’ll post updates when I have something to show!

Update time!

I wanted to drop back in here and put out some updated info on driving led’s with TD, over serial to teensy. I had a few pieces of mis information from before and there’s been a few updates on fastLED octows2811 librarys over the months that make things faster!

Current figures:

  • TD 60 fps
  • Serial over usb (for multiple teensys use a multi-tt hub)
  • Teensy 3.1 running a fastLED/OCTOws2811 mixture (more on this below if you’re curious)
  • 3,680 ws28xx leds per teensy 3.1 (460 per pin) also @ 60 fps

Dependancies: (also attached for conveniance)
Arduino Libraries:
[url]https://github.com/FastLED/FastLED/tree/FastLED3.1[/url] -attached-
[url]https://github.com/PaulStoffregen/OctoWS2811[/url] -attached-
[url]https://www.pjrc.com/teensy/teensyduino.html[/url] (addon for arduino IDE)

Arduino sketch:
-attached-

Touch Designer Barebones example
-attached-

Notes:

You can scale this solution by adding more teensys running the same code to the mix. I have not reached an upper limit but haven’t tested it too much yet, but I imagine at least 3 or 4 teensy’s total could be done with out dipping below 60 fps, perhaps more.

Eventually the USB host card will reach it’s max, and / or TD will choke on sending that much data out via serial, but i’ve found that with the modifications the dev’s helped put forward in this thread you will probably hit a hardware wall before a software wall !

For those integrating this into already complex / heavy networks, it may be wise to offload the communication part to another touch designer process and use a sharedMem chop or spout in/out to offload that work and keep speeds up!

A little info on why / how the led counts have increased with this solution:

The reason the octows2811 library works so damn fast is due to the r/g/b data being formatted in a special way that the teensy’s DMA engine can push out natively, so no bit banging, which means hardware can do it’s thing on 8 strips in parallel. However! The .setPixel() command used previously has been somewhat slow, so Daniel Garcia at fastLED has written some backend code that does that translation much faster using some of fastLED’s code.

more info:
[url]https://plus.google.com/communities/109127054924227823508/s/octows2811Demo[/url]
[url]https://github.com/FastLED/FastLED/wiki/Parallel-Output[/url]

I’ve been researching pixel controllers and various software / hardware configurations, and have not found anything like this before. Paul, Daniel, and everyone at Derivative have made this a painless and extremely elegant (and cost effective!) way of building / controlling custom led art, displays etc.

Thank you for that :slight_smile: Hope this helps some of you looking for a solution and missing bits and pieces of how to make it all work.

Lucas
OctoWS2811.zip (171 KB)
FastLED3_1.zip (250 KB)
ledPixelController_460.zip (832 Bytes)
ws2811-12-12b_DrivingSolution_BareBones.1.toe (5.74 KB)

2 Likes

@SCare

that issue was a thing of the past, check out the latest TD file I attached, working example should have everything you need to get going.

@lucasm
thanks for providing the detailed example and recount of your experience.

im currently evaluating teensy serial vs beagle opc and mostly trying to get the fastest framerate possible with 1000s of leds.

is there a reason you used fastled instead of paul’s octows2811 library directly?

Let us know what you find out!

Yeah the devs on fast led wrote some code that allows fast led to prep the drawing buffer of the octows library faster than the built in .setpixel() command can. Which effectively merges the best part of both libraries.

I elaborated a bit on my update a couple posts back on this page.

Hi!

Thanks lucasm for this nice solution.
On my side I can’t send the data by serial. Do you know how I could convert your code to work over udp?

Thanks a lot

create a udp Out node, and an execute DAT (if you want to execute every frame), and in the execute dat you’ll need to get the contents of a chop channel and assign it to a python list.

Then to send that byte array/list through the UDP out node you’d need something like this (replacing the psuedo names with your UDP node name, and python list respectively.)

name_of_Python_Byte_Array = name_of_chop[channel_indicie].vals
op(“UDP_out_node_name”).sendBytes(*name_Of_Python_Byte_Array)

NOTE: the " * " sign is neccesary, it’s called the splat operator I believe, it basically takes a list and breaks it’s contents down into separate arguments which is what .sendBytes likes (correct me if I have this wrong!)

Bit of a late comer to this awesome post, but I just wanted to say thank you! :smiley: :smiley:

hey, first of all thanks for the great stuff!
i’m quite new to td and i’m using a macbook pro… and somehow this patch doesn’t work there.
i think the serial is sending some strange things. On a windows machine everything works just fine.
Does anybody know if there is any difference in the serial output?

We’ve just made a fix to the MAC serial library which was cutting off messages longer than 1K in length.
Look for it in builds 2018.22930 and later.
Cheers

1 Like

thanks!

New build 2018.23080 posted now which has a fix for this.

Download

hey guys!
one question:
has some way i make work with an arduino or only with teensy boards?
second question:
can i make work with a teensy 2? or need to be a teensy 3.1?
thanks!

I had good luck with the teensy and octoWS2811 board. According this page :OctoWS2811 LED Library, Driving Hundreds to Thousands of WS2811 LEDs with Teensy 3.0 it does require a 3.x version teensy. You might also have a look at the ESP32 boards for wireless connectivity as well depending on how many leds you want to control.

Hi

firstly thanks for everything you’ve done.

I try to easily run just one 20LED strip with no octo board (only breadboard) with no luck.

I use MacOs 10.13.6 and Teensy 3.5, do I need to change an Arduino script somehow?

Fetching the bytes to serialConnector DAT seems not working…

Thanks in advance

Just used the last update of the code and got it working pretty much in the first shot! thanks!

This looks Awesome! Thanks for your hard work! I am having trouble getting your pixelcontroller to work with my setup. I am using a teensy 3.2 and OCTOWS2811 with ws2812b leds, single strip for now. Do I need to change anything for my setup to work?

Thanks!

To add on to Lucas’ most recent resources, here is something for the people who just want to run it on a simple old Arduino board.

A few people were asking previously, and as someone getting back into hardware after a decade or so, I figured this might help some people newer to that side of things, and is more or less plug and play.

Directions:

  1. Download the FastLED zip and .toe file Lucas linked to (you can also just download the latest version of FastLED from fastled.io)

  2. Download the file attached here to this post.

  3. Open the Arduino file from here, and run it in the Arduino IDE. Adjust variables and brightness to the size of your LED grid, etc. Make sure you upload it to your board using the correct port and all that now.

  4. Remember that port or look back at it in Arduino lol. Open the .toe file and look for the serialConnector operator. Click on it and you will see a line for Port here, type in your port number there.

  5. Press enter.

  6. Smile at how easy that was and the inspiration you have for making something supafly. Arduino-TouchDesigner-LED-tgs.zip (1.2 KB)

Hello everyone,

I’ve been trying recently to use the serial node and just found this topic, looks like you got some really cool results !

@thegladscientist I followed your last post for a regular Arduino setup, but I’m experiencing weird flickering and colors that doesn’t seem to make any sense compared to what I’m sending. (It’s flickering even when I’m sending a constant TOP)

I have an arduino UNO and a single WS2811 led strip, any idea where this could come from ?
I’ve tried all the baud rates values listed, nothing seens to match. :pensive:

Hello. I have the same issue. Do you attain any success on it?