Mechanical Ideas for Wearable Panel

It’s not :slight_smile: (ESP8266 doesn’t have enough pins and likely wouldn’t be fast enough for the refresh rates I’m seeing)
That’s the chip:
http://www.sz99iot.com/admin/jsp/project/html/wifiDetail.jsp?id=4c78d482cae74fd9abf06356e11d6589

afw121t Arm Cortex M4F

Nice, how about the other IC, the one that’s exposed?

Hi @Louis. Sure thing, it’s a GD32F105RBT6
https://www.semiconductorstore.com/cart/pc/viewPrd.asp?idproduct=69952
GD32® MCU incorporates the 32-bit ARM® Cortex®-M3 processor core operating at 108 MHz max frequency with Flash accesses zero wait states to obtain maximum efficiency. It provides up to 3024 KB on-chip Flash memory and up to 96 KB SRAM memory. An extensive range of enhanced I/Os and peripherals connected to two APB buses. The device offers up to three 12-bit 1MSPS ADCs, up to ten general-purpose 16-bit timers plus one PWM advanced timer, as well as standard and advanced communication interfaces: up to three SPIs, two I2Cs, five USARTs, an USB 2.0 OTG FS and two CANs.

I think the next letters are CE96637AJ1846 but they’re probably not relevant.

Either way, it shows that they are using 2 CPUs to do this, likely one for wifi and FB computes and probably the other one for high speed refreshes only.

Back to your earlier point, given that ESP32 has 2 cores, if it has enough RAM (and I guess you can add PSRAM to it, not sure if anyone makes a chip with more RAM directly onboard), isn’t it enough to have one core for frame refreshes and one for computing frames?

Also, I know that you very much care about high bpp and quality, but given the limits that I’m already hitting, while frame rate is very important for photography as already discussed, would you consider supporting a lower bpp to allow higher speeds and lower memory use?
Right now, it seems that you’re using 4 to 5 times the amount of memory used by the FB just in extra buffers to push data to the panels. That seems like a lot :slight_smile:

My plan is to use a single core ESP32, and design a board that has the single core ESP32, refresh circuitry and HUB75 connector, and APA102 cable for input. Your board that drives neopixels, IR input, SD card reading, and whatever else you need to do would be separate and I suppose wouldn’t be required to run any SmartMatrix code at all. You could use FastLED or Adafruit GFX outputting APA102 data to the TBD named HUB75 adapter board.

1 Like

So, does it look like they’re doing the same thing you were hoping to do?
A full CPU to do graphics and nothing else (apparently faster than SmartMatrix on ESP32), and then a 2nd CPU to do FB computes and wifi?

So, does it look like they’re doing the same thing you were hoping to do?

Yes, looks similar

After taking a second look at the photo, I noticed they’re using (more expensive) tantalum capacitors instead of electrolytic. You can get tantalum caps in the same values that are on my panels with package height of 3mm, vs 6mm for the typical electrolytic. Doing that sets a new low bar for overall height on the back of the panel.

BTW, I’m working on my own wearable panel project, and I gather you’re working on your next iteration based on some of the questions you’ve been asking. If you want to trade ideas while we’re both working on similar things, let’s do it, maybe in a new thread (I’m too tired right now to figure out the right thread to post to…).

I want my project to use P2.5, maybe P3 panels, as I want to create a diffused look - hiding all pixelation - and the fine pitch allows for the diffusion layer to be thinner, making the wearable overall thinner.

I like the idea of using a flexible panel that can conform to the shape of my chest, back, or the shape of a backpack and not stick out so much. I haven’t actually tried flexing any flexible panels though, and don’t know how realistic that is. Maybe the flexible panel needs to be attached to a rigid rounded frame. I haven’t found any P2.5/P3 panels that are easily purchasable with delivery to the UK yet, plus I haven’t had a need for them recently, so I haven’t ordered any yet.

Another problem for flexible fine pitch panels is the minimum size. Looking on Aliexpress, I can only find 128x64 P2.5 flexible panels, 320mm wide, and that’s too wide for my purposes (I’d like to make this look as much as possible like a logo on a shirt, not a billboard).

There’s another option with a high cost and high minimum, but good to know that someone’s at least making 96x48 pixels P2.5 flex panels, 240x120mm. My ideal at the moment is P2.5 64x64, but 96x96 might be OK if curved enough so it doesn’t stick out away from my shirt. I got a price list from this company, and they also have the 240x120mm panels at ~$50/ea, but not as easy to order as Aliexpress, and I haven’t seen if they have a minimum: SHENZHEN UNIT LED CO.,LTD-LED Display Lighting Manufacturer

I just ordered one of the 160x320mm panels, so I’ll at least have one flexible panel to play with. I got this one which cost a couple bucks more but seems like it might come with the flexible frame, where the other one I linked doesn’t(?). (Took a while to order as my bank decided my ~2000th Aliexpress order might be fraud, though the ~1999 before it were all fine)

I’m also not sure on what scan panel to use, to get the right brightness. The P2.5 64x64/32 panel seemed a little dim to me at full brightness, but I was working in daytime with thin curtains drawn. 2x P2.5 64x32/16 was better. I think you posted already, but if you don’t mind reminding me, what brightness setting are you using in the clubs, and what scan rate are your panels?

Also, have you had any problems getting through security with your panels? I could see depending on the show and venue getting a hard no to bringing even a small electronic setup to a show. I read something about someone bringing macetech LED shades to a show and security making them check them for later pickup.

Honestly, I should probably wear the one I have for at least a year, but I had some ideas on making my neomatrix gfx lib just a beneral framebuffer fastled/2D lib that talks to many more backends (sorry for your API, there is just much more code out there that uses the GFX and/or the FastLed APIs)
I’m looking at how feasible it is to generate the FB in arduino and then give it to a rPi with the rPi lib that has more hardware support, much more RAM and triple output support ( rpi-rgb-led-matrix/wiring.md at master · hzeller/rpi-rgb-led-matrix · GitHub ).
Your idea we discussed is a good idea, but honestly for an separate chip with an APA102 interface (or whatever input it takes), I really think you ought to consider rPi instead.
I’m currently running 128x128 at over 300Hz on rPi with plenty of RAM to spare and could be running 128x192 with the same refresh if I were using the 3rd port of my active-3 board (which cost a whole $3 from HKG, shipping was a lot more than the board).
I did consider mentioning that you could do parallel output on a teensy 3.6 given the amount of pins there, but it’s not going to change the issue where those chips just don’t have the RAM to hold 128x128 comfortably (never mind more), while a $10 rPi Zero has plenty more RAM…

I have not found flexible under P4, but my P4 flexible would be ok if I have a non flexible arc to attach it to. It strongly wants to go back to flat, so you’d have to attach it well to a bent piece of whatever that will keep them bent.
Now, P4 is perfect for 64x96. If you get P3 or P2, you’ll want more pixels, which brings you to the limits I mentioned above (i.e. it’s going to be painful with SmartMatrix, if it works at all)

Well, my 128 P2 is 25.5cm wide. If you bend it around your body, it would work. I agree that 32cm is too wide for your body though.
If you can find 3x 128x32, you could make a 128x96 out of it and rotate it, or keep looking for 128x64 in P2 and you’d be able to fit 128x192.
But then we’re back at my point on rPi above :slight_smile:

96x48 would work too, but $140 a piece is a bit of a ripoff IMO. I got my 128x64 (non flexible) for $60 a piece.
Warning, in P2, there is no room for an outside border to protect the outside pixels. I had 4 already fall off from the borders, which is not good :-/

I have /16 panels on my shirt and they are way too bright in clubs. I had to take them down to 1/2 to 1/4th brightness depending on how dark the club is. It’s not that the panels are so damn bright, but that the clubs are damn dark :slight_smile:
Only at burning man is it ok to be blindingly bright :wink:

I did at EDC because I wasn’t wearing my setup (it was around 40C and it was to board a bus 1H away from the venue) and all they saw was a bunch of wires and stuff they didn’t understand, and paniced. I’ve learned to always wear it and turn it on when I approach security. They are so impressed/amused/curious that they don’t care about all the wires or what’s in my fanny pack or even forget to search me altogether sometimes.

About my point that going higher res (128x128 or better) likely requires a switch to rPi to get decent output, here is a rPi3 doing 128x128 ABCDE on a FM6126A chip at 300Hz+

video isn’t perfect, but the pictures are.
The nice thing with that library is the number of quality/speed settings you can tweak, including how many pwm bits you want. Makes it very easy to tweak the quality/speed for your full panel size and the visual tradeoffs you’re willing to make, if any are required.

the interesting thing is that the FM6126A chips can be driven much faster (6 times faster than the fastest speed allowed by the rPi library), so that allows even bigger panel lengths

No need to be sorry, I think a lot has changed in the 6 years since I wrote the API (based on Adafruit GFX at the time, but I don’t think it could be integrated, or I chose not to). Thanks to you putting it back on my radar, I may make the interface for the APA102-HUB75 adapter AdafruitGFX compatible to make it easy to use for the most number of people, on the most number of boards. I still need to look into the details. I’d really like it if I could contribute scrolling text or other Layer features from SmartMatrix Library back to AdafruitGFX as it would be a shame to lose those features.

I have to say, that sounds real clunky to me, to do the most complex coding on a little micro controller, and sending it to a Linux machine which has way more power and could be running all the code. It does speak to how great the FastLED Library is though, that would drive such a decision as they have such a good API and community sharing cool code. (Hopefully the community survives the Reddit move…)

Do you have a link to order? I have a RPi and a bare hzeller board, maybe even the driver ICs, but it’s enough of a barrier to get it soldered up I haven’t tried his library yet.

300Hz refresh with a lot of pixels sounds real nice. I want my APA102-HUB75 adapter to work as close to a black box as possible though, with a minimal config interface, otherwise after configuration it should be as easy to use as an APA102 panel. Installing software on a Raspberry Pi, with a SD card that may wear out (is that still an issue?), and needing to format, install the OS, install software, run stuff from command line, all that increases the barrier to entry. Then you have a larger form factor, power supply sensitivity, boot up time.

I think it’s a good solution for some, and hope it works well for you.

I don’t follow, if the RPi library can’t drive them that fast, then what can? What is the max RPi library speed?

I don’t think you need to. If you take an array of RGB24, it doesn’t matter how it was generated. People can already use FastLED::NeoMatrix, define an APA102 as the LED backend, and they’re done. No need for you to support anything special.

yes,it’s ironic, I agree, but it’s mostly about reusing existing code as well as being able to write code that can be run on multiple backends.

It does to some extent, but it’s not very hard to just give a 2GB image that is ready to dd with no extra work. sdcard wearing I’m not sure but I’m guessing they’ve mostly taken care of that. It should otherwise be easy enough to turn off any cron job and syslog in the image. That said, yes, there is still a boot time of maybe 5 seconds or a bit more depending on the image.
Form factor: rPi0w is not that big, even if a bit bigger than an ESP32. Power supply, nothing extra needed with a Pi0, it runs with the same power than an ESP32.

It can, the code just tells you not to run faster than 50ns. I took that check out in the code and ran as fast as 8ns before it stopped working. It was simply a command line parameter check based on the fact that the old (i.e. current for most folks) chips don’t work faster than 50ns

8ns → 125 MHz I assume, that’s blazing fast! I think the ESP32 is limited to 40MHz output through I2S

5 second boot up isn’t bad at all

Have you thought about how to move data quickly from the micro to the Pi? It’s not as easy as it might seem. Teensy 3.6 seems limited to 1MB/sec throughput over USB, which is only enough for 20FPS RGB24 at 128x128 resolution.

If you use an ESP32 which has no native USB it’s even more bandwidth limited. I don’t recall what rate the usb-serial chip and associated UART on the ESP32 can handle, but it’s not great.

Most micros can drive SPI signals with a fast clock, but can’t receive signals as fast. The RPi is probably no exception, and there doesn’t seem to even be a SPI slave driver.

I think best bet for a generic solution after brief research is to use DMA reading of parallel GPIO pins to receive data. You can use shift registers and a counter to convert SPI signals into parallel, I’m prototyping this for my ESP32 adapter circuit. I don’t know if the Pi will struggle with high speed DMA-GPIO both in and out.

Thinking about bandwidth more: RGB24 isn’t enough information in my opinion to send to the Pi if the Pi is refreshing the panels at a >24bpp color depth. I guess the Pi could apply color correction mapping the 24bit color into a larger depth space, but in order to get smooth fades avoiding stepping it would need to interpolate colors for the intermediate frames between the let’s say 30-60 FPS generated frames and the 300FPS refresh the Pi can do (I’m borrowing these ideas from Fadecandy). I don’t think the hzeller project is set up to do that already, but it’s open source and seems possible. (And might already be done, I haven’t studied its features) I think the APA102 protocol with its extra byte per pixel containing a Global Brightness Control value is enough to communicate greater color depth and allow for lower overall brightness without sacrificing color depth. Using that has the advantage of compatibility with existing libraries like FastLED, which I believe already has some limited GBC support and hopefully will have better support in the future.

BTW I ordered the Electrodragon board (cheap shipping option), and I’m giving the RPi a bit more consideration as you might be able to tell, though I’m still leaning toward the ESP32. I think what we’re doing can complement each other so even if we diverge at some point I’m happy to trade ideas here.

This doc from hzeller seems to say the max observed DMA-GPIO speed is around 65MHz, so maybe 8ns is the pulse width not clock rate? Still, faster than ESP32.

rPi 3 is quad code 1.2Ghz vs 240Mhz, so i will be faster :slight_smile:

But the biggest thing is that it can output 3 RGBPanel channels in parallel, tripling the effectiving output on top of having a clock that’s 5 times faster. In theory that means 15 times more panels than an ESP32 can drive (putting aside the totally inadequate amount of RAM on ESP32 for that amount of panels anyway)

Good question. I briefly considered it, and I think right now my plan is to use an arduino layer library to compile my code on linux, and then run it on rPi as if it were an arduino. It’ll then output a FB that I need to pipe into the rPi library which would be running on another core.

You make good points, but honestly this is beyond where I’m thinking right now. I’m not trying to display high quality video, but just colorful demos. If the colors are off by just a bit, not the end of the world.

Your general idea of providing this as an interface is still sound if you can indeed get enough throughput to support bigger panels. I’d say it should support at least 128x256. Is that too much BW in 32bpp? Quick math shows it’s 1Mbit of data per frame. 100fps would be 100Mbit/s…
Or if you want to stick to 128x128 which can be done right now on teensy depending on the panel type, it’s still 50Mbit/s

Totally agreed, please do not let my ideas/plans detract you from what you’re trying to do. There is always a benefit from having multiple solutions, especially if one of them doesn’t succeed as well as planned (which could very well be mine :wink: ).

I’m excited to learn more about that in time!

Probably, I think 128x128 is a reasonable target. I suppose you could chain two adapters together to get 128x256, as you would chain two APA102 matrices. Updating using the APA102 protocol at 30FPS would require using 30MHz SPI. I’m not sure even an ESP32 could generate that much pixel data. Anyway, I’ll start with 128x128, and see what can be done after that.

yeah, that’s a fair point, FastLED::Neomatrix actually makes this trivial, you’d treat each 128x128 as a square tile and let neomatrix do the rest for layout.

I received my P2.5 128x64 panel today and I’m pretty impressed by the flexibility. It’s much easier to flex than I thought it was going to be, and the panel even holds a bit of the bend when releasing it instead of springing back to flat. I could see making a curved frame for this panel out of bent acrylic, as I think a thin frame made of 6mm acrylic (maybe even thinner) going just around the outline of the panel will be rigid enough to keep its shape with the panel attached to it.

As far as the P2.5 128x64 size goes, it’s less bulky than I thought, and I think with a slight curve might fit across my chest or back horizontally without sticking out too much. I haven’t added the diffuser to it yet, so maybe I’ll change my mind after the panel is a bit thicker, but it seems promising so far. A vertical orientation is also an option, but it seem a bit thin. It is a decent fit vertical on top of a small backpack I have, and might be a good fit over a hydration pack.

On the diffusion front, I went to a plastics store and asked for advice, and got a sample of 1mm (measured at 1.5mm) thickness white polypropylene sheet, which is a good mix of diffusion, and protection for the LEDs. Some cutting boards are made out of this material. I’ve also been testing thin white PVC, and really like the look of this material but it’s too thin to be used on its own and would need to be attached to something larger. I haven’t found a good source for it. I’m getting my samples from large heat shrink tubes used for battery packs, and think PVC might also be used for quilting templates, so next time I get a chance to go near a crafts store I’m bringing my LEDs with me.

1 Like

@marcmerlin without making something custom, this seems like the best low profile ribbon cable replacement for hub75 connectors. I haven’t been able to find this part in smaller quantities, though other pinouts are available (18 and 20, 20 is probably better as it’s symmetrical).

US $24.50 | 20pcs Flexible Flat Cable FFC FPC Connector Adapter 16 Pin 1.0 mm to 2.54 mm pitch 16 P 2x8 Pin through holes DIP PCB Converter
https://a.aliexpress.com/_UpnW2

Cables seem to be available up to 0.5m long:
US $4.65 7% Off | 2PCS/LOT New FFC FPC flat flexible 16pin cable 1.0mm pitch 16 pin forward Length 500mm Width 17mm 16p Ribbon Flex Cable 50cm
https://a.aliexpress.com/_UnVX8

1 Like

Nice.
To be honest, I’ve made my peace with the thickness of a regular panel. That’s what I wear now, the panels have been rock solid now that they don’t flex (the flexing ones broke all the time, I had to take spares with me), and it’s nice not to have to desolder those huge power connectors that added height, and were hard to get out without over heating the leds on the other side and losing them (damaged 3 panels that way).
For now, I’m going to make my life easier and stick to stock. I removed height from the hub75 cables by removing the loop at and end, and that’s good enough for me.

hi, i’m working on a project that includes a Wearable Panel controlled with an app (android or ios).
i buyed some led panels, the same that marcmerlin buyed, that work with an app (LED SPACE).
is it possibile to create a new app that comunicate directly with the board of the panel?
or is there a way to find program loaded in the board?
thanks

I have no idea what they used to program it. It was a lot cheaper for me to buy my own panels and connect to an ESP32 than to try to figure out how to reverse engineer/reflash their stuff.
Don’t take me wrong, if you have lots of spare time and skill, it is doable I’m sure, but I don’t expect it to be simple, and it sure wasn’t worth my time.