π
2024-11-10 01:01
in Arduino, Computers, Electronics
I attended Pasadena Hackaday Supercon, so I figured I'd put my pictures into a quick blog entry, shouldn't take long...
1) Oh, I need to finish writing code to get the SAO badge holder to do something fun
2) Mmmh, why does this python global variable thing doessn't work in the function
3) Goes to re-learn python, with help from gemini and how python forks global variables by default in functions so what you write to them isn't saved at local scope (oh my, why did they do that?)
4) after more hacking, get a proper demo working:
After having such a great time at the linux.conf.au Open Hardware Miniconfs over the year, and missing them after the last one where I built those badges, I somehow missed a local-enough Hackaday Supercon that had been going on for years. Oh noes!
It was very cool that I got to wear my LCA SAO badges for the first time:
Thanks to Anthony for letting me know about it, and I was able to attend. Went there early on friday for the pre-conf to work on the badges:
the conference badge was this 6 port micropython rPi micro with a couple of SAOs.
they nicely provided food all 3 days
essential geek survival food :)
They gave us a quick primer on how the badge worked, although it would have been better on a webpage with links and info for total beginners who had never used micropython and thorny or knew what thorny was (that included me):
I'm glad I took pictures of these slides, they only made sense many hours later. They should have been online
finding fellow LED geeks :)
learning blinkies for beginners, scan this
While I was there, I 9ound out they had a wonderful 4 bit computer some years back. I actually really regret not having been there that year, programming that in hand crafted assembly would have been epic:
someone hacked a basic I2C on it
people now hard at work
I used the opportunity to bring previous LCA toys and show them off (and fix a few)
Also, finally got to meet Henner Zeller, the rpi-rgb-panels author I've been working online with for years:
epic watch!
Also got to meet Daryll Strauss from precision insight, later acquired by VA Linux some 25+ years ago:
People still hacking at night:
I was lit up enough not to get lost :)
Day 2-3, Saturday & Sunday
Saturday and Sunday were the main conference days:
went to attend a few talks
hacking radio sound and B&W video from a chip, super cool!
learned about an online microcontroller emulator, wokwi, very nice
I got to see a pick and place machine, nice to see them work:
this is what the machine was 'printing'
I tried the SMD challenge, that was hard as hell:
we got old and fat irons, making things harder :)
I couldn't get the last 2 LEDs working, they were so stupidly small
I had someone help me fix mine :)
and they all worked, thank you to the master solderer!
added the result on my badge :)
Random fun shots :)
people hard at work
During the weekend, the SAO wall got populated:
Fun to see this SAO based on this burning man sign
Original from Burning Man
more and more
and more :)
Saturday evening party had a nice real time AI image generator:
some were far out :)
The conf ended with a presentation of best SAOs:
This guy won the contest of biggest SAO, he had a printer working off USB, run by his SAO
Sunday ended with a party at a bar, thankfully I had my battery soldering iron :)
This was loads of fun, and I definitely learned some good stuff. Sad I didn't go earlier but glad I went this year. Thanks bunch to all the organizers and attendeers who contributed!
More pictures: https://photos.app.goo.gl/2hYRaaB5dF5mvv4N8
I had a bigger stack of returned P5 RGBPanels that Azerone was nice enough to send me, it came to completment an existing stash of 12 panels I already had to make a 4x3 128x192 P5 array (pictured on the left):
This is what I started with, 128x192 in P2, P4, and P5 panels
Now let's look at the back and my old (left) vs new mounting method (right). On the left is my "up to then" McGuyver's method of attaching things: using some metal rails with holes, I was somewhat able to aligh enough holes to put some screws in, which kind of held everything together, but not securely:
On the right, a new way to put things together thanks to Marc Estes who laser cut connecting pieces so that each panel could be more securely and correctly attached to the one next to it. Also, note each panel being upside down from the previous one to allow for short ribbon cables and less signal loss, clock drift and crosstalk
Here is the end result of the new panels I put together, the code to reverse panel directions worked:
but the colors were broken, see below
So here is my old 3x4 P5 array next to the new 3x5 array I was building, just testing signal would work:
then rewired everything nicely to be the same orientation
took a while to add power and all the connector bits that Mark Estes made for me
I found those nice power concentrators from amazon
Here are 2 videos that explain the build:
But the colors were wrong. Why? Well, turns out some of the panels were badly wired from the factory and had reversed colors:
So it was all nice and good, until I turned it on:
oh great, some of the panels have broken color order
yeah, that's because I got those panels for free as returns, and they are different generations, some with broken colors. I used the orange and blue labels to tell them apart.
Ok, so since I had a couple of damaged panels and I wanted a nice row of matching panels so that the color intensities would simliar enough, I bought 3 more panels. They came with the orange label, so I wired the orange together, and got this:
Son of a.... The 3 new orange label panels lower left, have fixed colors, so they are not the same as the older orange label panels....
they looked similar enough but they were not
after getting what was going on, I re=wired everything a 3rd time to get bad color panels together
I briefly considered fixing this by swapping the color channels in the ribbon cables but then I figured out it would be less work to fix it in software. rpi-rgb-panel allows for swapping colors on a per panel basis, but not on a per panel basis. Thankfully the code was written well enough to allow very easy remapping of colors per pixel and of course per panel. I also fixed a prior patch of mine that had an unfortunate behavior with Zmapper:v that swapped the order around every time you added a row of panels. Here are the 2 patches:
And after these fixes, finally the panels are oriented the correct way and the colors are fixed:
After more days than planned, it was finally time to mount it on my wall, and that was not trivial, partially because I didn't put enough time into getting proper mounting hardware. I did have some leftover rails I used for added structural integrity, but found out under the wait and stress, they would bend too:
the mounting location was also challenging, made measurements and marks
I used electrical wire as the best hanging wire I had around and put 4 layers just to be sure. Also I found out I had to attach it to the frame in the middle to stop the frame from bending under weight
getting all the attach points under the wire, was totally not trival, but done!
The last thing I had was the native display orientation was portrait, so I wanted to switch to landscape. Turns out rPi3 is too slow to handle an array that big, the data exceeded some internal CPU cache and became very slow, and even more so if I tried the driver's 90 dgree rotate function. So, I tried an rPi4 instead, which showed other interesting electronic bits: the panels on the left are newer and can handle faster update speed while the ones on the right are slower refreshes. This is why it looked like this below. I had to add some delay fasctor in the rPi4 output and then everything was well. Fix was the expected --led-slowdown-gpio=4
See also this page that discusses the cache overflow issues on rPi3, switching to rPi4, and how led-slowdown-gpio can be a bit counter intuitive:
I received more panels in the mail thanks to Azerone, just the right amount to make another array, and make another copy of my LED outfit display in a different size. Nice to compare all 3:
It was great to be able to attend my 3rd Illuminaughty LED Meetup, a great way to see other cool LED stuff built by like minded LED maker geeks. Several had really cool LED builds I had never seen and looked very well done, happy I got to see them :)
Just like last year, Illuminaughty was about as far across the playa as a camp can be, so it was nice when we arrived :)
Ran into a bunch of people will cool gear:
Very cool hat:
Impressed that the newer panels can bend pretty well
i21*
a lot of work went into these patterns
Anthony had a lot of cool gear he built, I was very impressed:
Obligatory group picture:
Thank you to Chuck for organizing this year again, it was lots of fun.
π
2023-06-16 01:01
in Arduino, Clubbing, Electronics
This is the untethered update to my v5 outfit. Please see LED Pants and Shirt v5 on ESP32 and Raspberry Pi with P2 RGBPanels and Wifi for how the entire setup works, and for the new LED strips on arma and legs, you can see Party LED Outfit Version 5.5: Flexible P15 LED Strings, LED Fanny Pack, Rez Inspired LED Goggles, LED Laces and LED Shoes
And if you want even more details and history >>> See this full article on the why and evolution of my LED outfit <<<
For all these years, my outfit has relied on a fanny pack filled with batteries, and with an unslightly tether from the fanny pack to the panels, bringing 2 feeds with 5V (as backup and to spread out the amps over 2 wires). That system worked for many years and would survive the failure of one of the 2 5V connections, or even the 16V connection meant to feed the rPi from its own power source stepped down to 5V on the panels (so that it doesn't see a voltage dip on the remote 5V rail when the display sare fairly bright).
All in all, it worked, but the fanny pack tether and wires were cumbersome, and some security folks didn't like all the wires.
After switching to a new neopixel controller that is directly USB powered, it made more sense to power the panels locally and put the batteries on the panels:
For comparison, the old panel on the left only has the rPi and a small 16B to 5V converter and than relies on that tether cable to the white box on the left which has the DC-DC step down and the ESP32:
finished design with padding, power routing from 3 lipos or 2 USB attery packs
While this was not new for v6, made sure the camera still worked, it turns out to not be super reliable on batteries, but when it works, it's a crowd favorite:
The new version works like the old one, but with batteries directly attached to the panels, which in turn makes them much heavier, but oh well. Video with Lipos and DC-DC converter:
However, the more interesting upside is that I could also replace the 16V lips that get stepped down to 5V, with 5V USB Battery packs. the reason I never did that at the time is that the entire system takes way more than the maybe 2.5A you can get from USB packs on a good day. A somewhat cumbersome workaround to this problem is to use 2 USB battery packs with 2 independent outputs each, meaning 4 independent 5V busses able to put out up to 2.5A depending on the battery pack. So, I split my power system in 4:
front LED panels (3 panels) (1A or more depending on pattern)
rPi (about 1A depnding on CPU load, but must be a nice consistent 5V or the rPi will complain)
Neopixel string run by the ESP32 output if desired. This one might brown out but can be put on a separate USB pack to avoid taking other things down with it
Rear LED panels (also about 1A).
In total it means the whole thing uses about 3A at 5V, or 15W, which means 180Wh for 12h. In theory 2x 99Wh battery packs would work for 10H, but in real life, the first battery pack gets a lot more load since it runs the rPi, so it only really lasts about 7H before I have to replace it. Not ideal, but still nice that I can run from USB instead of lipos if needed:
Video of the USB version:
After some unfortunate feedback soon after I built the new version, I added a makeshift back cover with duct tape, mostly to hide the "scary" electronics, while still giving me accesss to them since this is still a prototype that needed occasional work and tweaks:
Since the original design with lipos, the good news is that lipo chargers have finally become much smaller. They are now small enough that I can simply leave one in my travel backpack forever:
Now I don't need this "custom made" battery box ;) which worked for its time, but didn't allow bigger batteries being an issue during 12H festivals (2 batteries wasn't enough), and was an issue during airport inspections when they wanted to "see inside the box":
I however found out over time that some airports really didn't like to see the panels in X-Ray with batteries attached. All airports were fine with the panels on their own, and the batteries on their own, but if I left the batteries in the outfit, which honestly is a lot more convenient to me, some airports really freaked out in totally irrational ways and now complained about "too many wires" "looks like a bomb" and all that good stuff. The 2 airports that delayed me enough that I barely made my flight (bangkok and Ontario, CA), literally said they would have been fine if I had packed the batteries together and still carried everything I was carrying, just not plugged in (of course everything was off, and plugged in is actually safer since you don't have loose power connectors that could somehow short).
So I'm not interested in missing a plane due to this and honestly nonsensical and irrational reactions (after all, no one said fear was rational or logical), so I eventually made a "battery pack" that I can more easily slide in and out before and after each flight:
Oh yes, it's still home made looking, could somehow get/make a box for it, but if I do they'll want to open it to see inside, going back to the original box I had earlier, so I'm not sure there is a good way to win this. Also if I make it look too much like one battery instead of 3, they'll complain it's 290Wh (over the limit) instead of 3x 98Wh (under the limit).
And to show how things evolved, this was the v3 outfit with neopixels and only 24x32 instead of 128x192, but much brighter. I did use v3 a couple of times again at day festivals, as it can be made bright enough to work in full daylight, but after doing this a few times (and that required extra batteries), I decided not to bother anymore, and skip the LED panel during day hours (I still have LEDs on arms and legs that can be made bright enough if need be):
Separately, I often have to explain to people, that my outfit is actually a scaled down version of the RGBPanels you see on stage. Once you have the display, it can scale up:
And another question I get is "how long does it last?". 2 batteries of my old 5Ah 4S lipos, was a bit short for an all night 12H festival (EDC), but back then I was also powering the LEDs on my arms and legs, which took an additional non trivial amount of power. For wiring ease, the LEDs are now on a separate battery, which allows the main system to run longer. I also upgraded the batteries from 5Ah to 6.7Ah. As a result, I found out a bit after the fact that actually 2 batteries would have been enough, since I put 3 as per my old setup, I ended up with a full runtime of just under 19H (I stopped the test before the batteries were totally drained since it's not great for them to do so). As I'm writing this, I now realize that with just 2 batteries, I could last 12.5H, which is still more than enough (and it would remove some weight, so I may want to consider that.
310Wh out of my 3 batteries, more than I thought, and almost 19H
because all meters have measurement errors, recharging pushed back in 20.4Ah instead of 21.2Ah which doesn't quite add up, but close enough
π
2023-05-17 01:01
in Arduino, Clubbing, Electronics
This is an upgrade of v5, keeping the same panels and controller, see LED Pants and Shirt v5 on ESP32 and Raspberry Pi with P2 RGBPanels and Wifi for how that part works.
Version 5 was a bit upgrade with my P2 run rPi run RGB Panels for a resolution of 128x192 per side. The oldest part of the outfit at this point were actually the Neopixel strips I've had for about 5 years, and despite being more reliable WS2813B with backup data line, the PCB traces would break and the chips solder points would eventually break too. The amount of time I've spent fixing and replacing LED strips is more than I'm willing to talk about, but there was just no good alternative, until now.
In the past, flexible LED strands with wires between each pixel did not have enough density, maybe one pixel every 5cm, which was not acceptable for my use. And after many years of waiting, a company finally made P15 flexible strands, one LED every 1.5cm, which looks much better and is even a bit more dense than my previous strips that were P16.6.
Here there are: https://www.aliexpress.us/item/3256804447608449.html . Update, don't buy these, they are shit and broke within hours. See at the bottom
While I was at it, I added a small programmable 16x32 panel to my fanny pack, because why not (the existing fanny packs didn't have sufficient storage, so I ended up decking out mine), and here is the end result:
I have no idea how reliable the strips will be, and unfortunatley they are WS2811 without the backup data path that WS2813 had, but time will tell. I'm bringing it to EDC and we'll see what happens :)
Update: these broke within hours, they were crap.
Version 6.5.1: Ray Wu Strips
Update #1: after the terrible failures of the first strip from the first vendor (the internal wires broke almost instantly), I picked this new one from Ray Wu: https://www.aliexpress.us/item/3256805296356090.html
It ended up being more solid, but the flexing and occasional pulling on the bare strips that were attached with safety pins (I didn't want to glue or sew because it would then be unwashable), eventually caused the strips to fail, although it was more slowly. It worked for 4 festivals in Europe and required some resoldering, but it was not terrible. Still, it wasn't a long term solution either.
Version 6.5.2: Full LED Tubing Protection
So, I tried one more way to do it, this time I put the LED strings inside water tubing of the exact right diameter (fishing them in was a bit tricky), hot glued them on each side, especially the side they are soldered to RC servo connectors which I use for all the electrical wiring.
The next challenge was how to fasten this, and clothes safety pins didn't do the trick, so I used rolls of velcro cut to the right size, and the glue is so good that I was able to glue the velcro strips directly to the fabric. If somehow it won't hold, I'll superglue it.
End result looks like this:
This is now going to burning man, I hope it will hold, especially with lots of biking :)
I have these adorable silkie chickens, but have better things to do than to let them out every morning and close the coop at night after they get back in, so that was the first thing I had to fix. I had enough random hardware at home to open the door with a high torque RC servo:
once I got the servo validated, I connected it to an ESP8266 as a wifi controller
Here is the basic end result:
The one downside of the ESP8266 is at least the one I have with the firmware I'm using, does not have super reliable Wifi connectivity, so my server keeps track of it being there or not, and can remotely power cycle it as needed. Not ideal, but it works...
There are predators (hawks at least), so I had to add a full net around the area:
cute chickens
This is the door in action after I added a switch to control it locally and wrote code on my home controller to talk it is via wifi:
The last thing I wanted to add was a water level monitor, especially because I had issues with the dispenser leaking, and ending up without water, is bad obviously. My first plan was a predictable total failure;
looks wonderful, but it's not meant to stay in the water and the board, failed
2nd try with pins
oh look, lots of metal ended up in the water, of course!
So yeah, all those classes in middle school about electrolysis are not just to bore you, it is a real thing, and sending current to sense the water through conductors causes ions to move and metal too:
So, I tried again with new conductors and changed my code not to check for water constantly but only 20 seconds every hour. That's thankfully enough that it mostly stopped the issue I had:
Azerone was nice enough to send me some returned RGBPanels, including a bunch of P5 ones, so I started making a matrix with them:
And by the time I was almost done, I got 4 more, so that was enough for 192x128 with 12 panels. That happened to be the exact resolution of my LED outfit, although that one was 128x192. For wiring reasons and optimizing refresh speed with 3 parallel channels, I wired the array the wrong way display wise, but the best way hardware-wise:
Thankfully rpi-rgb-panel has a mode to flip, mirror and rotate the output, so it was easy to get back a 128x192 display, and run th exact same code that my outfit. This nicely allowed me to see the same thing between P2 and P5 pixels:
The v4 outfit was 64x96 resolution (3 P4 panels of 64x32), while the new v4 outfit changes to 128x192 (3 P2 panels of 128x64), or 4 times more pixels running in the same exact footprint (my body size, which ideally remains constant :) ).
Because I now have 4x more pixels, and that would have been too much for an ESP32 or teensy (before teensy 4, which could have done it, but it lacks wifi), I had to switch to something with more memory and horsepower, I went with rPi and Henner Zeller's rpi-rgb-panel library, which also supported more panels like mine that had an FM6126 or FM6127 chip that required a special init string.
The other reason for rPi is that to get a high refresh rate and avoid visible refresh bars when taking pictures with cameras, it was better to run the 3 panels on 3 different channels to give them maximum refresh rate (300-400Hz is possible that way), which is supported by that library, using the active-3 board.
So, easy, I just have to port all my code from arduino/ESP32 to rPi/linux, right? Damn, that's actually a lot of work, and I didn't want to do this, so I was able to do something better, I found ArduinoOnPC, and was able to fork and modify it to add Framebuffer::GFX support and added 3 display outputs:
This combined work allows running my arduino code on linux, mostly unmodified, which means it runs on rPi. Then, the FastLED_RPIRGBPanel_GFX glue driver I wrote to make rpi-rgb-panel compatible with FrameBuffer::GFX, allows running all my 2D code, unmodified and have it sent to RGBPanels through the rpi-rgb-panel driver, I'm glad I didn't have to write :)
So, this is what the prototype looked like now 2 years ago:
In the process, I fixed a lot of bugs in all the 2D code I had when I went to a 384x256 panel which obviously overflowed all code that relied on x and y being smaller than 256, and also blew up FastLED code that assumed that there could only ever be 64K pixels :)
While this was a big milestone and proved that my crazy idea running arduino code on rPi using my same 2D library, was possible, there was a lot of work left to do for my outfit, including changing all the code to deal with a much higher resolution, and days (yes days) of work finding close to 200 animated GIFs in the higher resolution, and rescaling them for my non standard 128x192 resolution. Also, all the fonts had to be changed, and a bunch of other stuff, which took months and months of work (all in all over a year):
So, this is what it looks like, ESP32 SmartMatrix 64x96, compared to rPi rpi-rgb-panel 128x192, triple channel. Some gifs, I found the exact one in higher resolution:
this gif was so cool, it's only with the higher resolution that I found out it was Pulp Fiction
Other gifs, I found a much better one:
Here is a good video showing the resolution difference between the 2 chips:
Hardware
The hardware got a bit more complicated, especially as my wiring wasn't giving reliable enough 5V power to the rPi causing random failures. Eventually I had to feed the battery voltage (16V) via a different cable and step it down to 5V/USB behind the panels to get full power to the rPi (otherwise when the panels drew too much from the main 5V source, it dipped it a bit too much and caused issues).
It does not look great, it's meant to be serviceable and easy to debug, and that part is against my body, so people don't see it :)
For wiring reasons, I had a nice trick with the front panels would shift out bits, and I would send them to the back panels with ribbon cables. If you know how RGBPanels work, it does mean that a BCM plane meant to be displayed for an interval t1 in the front, ends up being displayed for an interval t2, when shifted to the back. Because of random luck of the order of BCM planes, it happened to work well enough with SmartMatrix, so it saved wiring for me (no need to splice the output to go to front and rear panels). Unfortunately with rpi-rgb-panel, the BCM planes are displayed in the opposite order it seems, so the output shifted on the rear panels, is visibly not good:
Unfortunately, there is no good fix to this outside of splicing cables, which I didn't want to do, so instead I slightly hacked the rpi-rgb-panel library to shift output bits twice. This is a bit wasteful for refresh rate, but things were fast enough with 3 channels, that I could afford the software hack and losing half of my refresh speed.
Another issue with the ribbon cables is that the active 3 board is wired to have the cable stick up (i.e. towards my belly). I worked with the nice folks at electrodragon to get bare boards without the connectors soldered and looked at how to best make it work for minimal height footprint. Bottom in blue is the original which sticks up the wrong way, upper right is what I would love to have but isn't possible because the traces on the board would have to be rewired (pin order is wrong when the plug is put underneath), so I had to settle with upper right, some angled connectors and I had to move the key hole from one side to the other for the cable to go in the right way.
I really wish I could have done this, but the wire order would be wrong
Then, I also had to protect the panels with my kitchen cutting board sheets that I've been using. It's not perfect, but they act as diffusers and protect the pixels a bit, because the P2 pixels are so small that they fall off if you look at them wrong:
Battery Use
The new setup uses a bit more battery, first because of the rPi, and also because the new panels use slightly more power, although not 4 times more because the pixels are 4 times slower, so the amount of light is somewhat similar. I had to upgrade my setup to allow adding a 3rd 80Wh battery for longer festivals (12 to 14H with 240Wh). With 2 batteries in the black box, I get about 8-9H.
ESP32 - rPi Integration
Because all my code was written for ESP32, including Wifi code that generated pages on the fly from code, thanks to https://github.com/distrakt/OmEspHelpers , and the ESP32 still runs the neopixels on arms and legs (plus IR input, although it's become a bit obsolete now), I took a very unusual approach of running my code on both CPUs a tthe same time.
The ESP32 runs the demo, and blind outputs it to an RGBPanel that isn't there anymore. At the same time, its debug serial output is connected to rPi which reads it as a text input over a ttyUSB serial port. The rPi code can run in independent mode (where I control it via ssh from my phone, haha), or it detect a hearbeat from the ESP32 over serial, and read commands from the ESP32, including what demo to run. So, the ESP32 controls what demo is run, tells the rPi to switch to that demo and display to the RGBPanels. That makes the rPi a bit more than just a glorified graphics card/GPU since it generates what pixels need to be displayed instead of just being given a pre-computed framebuffer to display.
I had to make the code smart over time so that the rPi can connect and disconnect from the ESP32 and run independently if the connection dies (which it used to when I had power issues that cause the FTDI ttyUSB to fail routinely when running on batteries).
The rPi can also back-control the ESP32, so when I test at home, I ssh into the rPi, and the rPi uses the serial connection to the ESP32 to tell it what to do, or I can use the web server on the ESP32 and tell it what to do directly.
This means the rPi can work on its own without the ESP32 being needed, except for:
- IR input (it's not really necessary, and linux IR code is very different, so it would be a full rewrite)
- Wifi commands (none of Wifi code works on linux and would have to be entirely rewritten)
- FastLED output would not work well on rPi since it's timing dependent, and also there are no IO pins left on mine with 3 channel output
If I were to re-write a lot of code to make wifi work on linux, that would make the rPi independent and not need the ESP32 anymore (except for the neopixel strips), so I just didn't bother. Also I can brag about having a dual CPU system with synchronization between the chips, which was fun to write and debug.
This bit of video shows how the 2 communicate:
Using Linux integration for development
There isn't much to say about this, thanks to my ArduinoOnPC work mentioned earlier in this page, the exact same linux code works on my rPi and my linux laptop, so I can write and debug my code on linux, which is so much faster.
This shows an example of what it looks like:
Wifi and OmEspHelpers
Ah yes, Wifi, that was a fair amount of code, especially on ESP32 where Wifi is more basic and can cause crashes if you get weird conflicts between interrupts, Flash (SPIFFS or FATFS), PSRAM, IRAM, and Wifi. After looking for an easy to use solution, I settled on https://github.com/distrakt/OmEspHelpers because I could generate the HTML pages from code (saving lost time to update the Flash FS each time, which is slow with 16MB, and not having to worry about syncing HTML tags between static HTML pages code).
This is the end result, the main screen allows selecting which demos run (neopixel strips + main screen), at which speed, how bright:
there are over 200 2D demos to cycle through, some are machine generated, some are animated gifs
The diagnosis screens give more info on the device, and allow editing the config file that selects which demos run by default depending on the screen size, and whether 'bestof' is selected, or not. The config file also allows choosing the order demos run, in:
Demo of wifi:
Glasses
I got tired of the El Wire glasses, they were unreliable, got dimmer over time, required high voltage (I literally got shocked by that current when wires got frayed), so I got rid of them.
I did try laser cut glass glasses, they look kind of cool, but they are big and impossible to fold.
I ended up getting neopixel glasses which had good battery life, but after I dropped them once, a pixel fell out, and that stopped the rest of the string from working. Thankfully I was able to take a spare neopixel from a strip and replace the missing one. I didn't have the right tools or skill, so I was not able to solder it, but I used glue and that worked too :)
LED Shoes
I've been using LED shoes since 2016. They're fun, but not that reliable: the LED strips keep breaking, if it's not the control module itself on occasion, and of course the battery is too small, which is why I wrote this page on how tohack/improve them, but that also makes them less reliable. I tried to find other options, but have not yet. I had a look at LED laces, and those are not very reliable either (or very bright). I tried to hack these to power from the power supply I added and upgraded in the shoes, but it was probably not the best idea:
I got everything somewhat working in April 2021 for a first show (about 1.5 years from when I started), and then worked through multiple electrical and reliably problems (including serial ttyUSB stability issues, and power issues I had to fix by adding a second higher voltage feed to the rPi). Also fixed sync issues between the chips and other improvements in graphics and menus. I considered V5 mostly done and reliable just in time for ADE 2021, EDC 2021, and Dreamstate 2021
I had the outfit mostly working (with a few occasional hardware issues) in time for Creamfields and untold in Aug-Sept 2021:
This even got me on Romanian national TV :)
I had fun at ADE also, and add time to make custom displays for specific events:
Solarstone looks better than his picture, haha
I have some early code that allows me to send text from my phone for special occasions, need to improve the interface:
Future
Higher resolution still? Probably not, I'm happy with this resolution, I can get pictures and text with proper fonts. Besides, that would just get me to the level of strapping a TFT screen to me with HDMI input, which would kind of be cheating and render all my code worthless since basically I'd just be carrying a TV.
I'll add a better interface to send text messasges
Uploading images from the field would be cool
Adding a USB webcam and doing video
Removing the ESP32 and running everything from the rPI would make sense, but I don't feel like rewriting all my web code.
Redoing the power system to work off USB battery packs that could be strapped under the panels (tricky because of amps needed, and would make the whole outfit heavy, because batteries are heavy)