[personal profile] chebe
Divoom Pixoo Slingbag is nice looking bag, with a 16x16 RGB LED screen in it. I was curious and wanted to look inside. (I must caution you if you buy one for yourself; there are always discounts, don't pay full price. And their after-sales marketing is often overwhelming.)

The bag is constructed well, of decent quality materials. The LED grid works very well. The app for it, on the other hand, is absolute hell. Other people have made alternative clients for them, like the DivoomClient for ESP32, Divoom Timebox Evo, but the only one I personally tried out was the Windows Diwoom client. Which worked pretty well, but made me realise the bluetooth communication isn't protected at all. If there isn't a client currently connected to the bag, there's nothing stopping anyone else from connecting and changing the displayed image. So clearly the hardware had to come out.

Dissection


There is an FCC filing for a slightly different bag, but it does include photos of this display hardware. First we have to get to it though.

There is a side pocket behind the display, that has a small opening to let the displays USB cable through, to hold the (not included) power pack. If you pull out this pocket, and unpick the stitching, you have hand-sized access to the display.

The display is held in place with a variety of layers. On the outside (of the bag) you have the plastic diffuser screen. Bonded to the screen, with an area cut out for the display, is a fabric mesh. The display package is glued into place on this. There is then a very stiff interfacing, with an area cut out for the display, laid on top of this, glued to the frame/edges of the display grid. And on top of all this is a piece of faux-leather (brown in my case) that keeps it all covered. With gentle, and persistent pressure all but the screen and mesh separate.


Screenshot of a hand drawn sketch of the various layers of the bag, as described above, with hand written notes next to each layer.

Sketch of the different layers holding the LED display in place
Photo by [personal profile] chebe




Photo of the intact and removed original display grid, from front, with traces of old glue around the edges.

Original LED display grid after removal
Photo by [personal profile] chebe



Replacement Display


Now that we know what the original display looks like, we can look around for other 16x16 RGB LED panels to replacement it. Turns out we don't need to go far. Piromoni have the Stellar Unicorn, a 16x16 RGB LED matrix, with a Raspberry Pi Pico W attached in one package. I ordered it and it turned out to be just ever so slightly larger (width and height), but a fair bit thicker (depth). But we can make it work.

One thing the Stellar Unicorn doesn't have is a per-pixel grid, like the original. (At time of writing there are no linked models either.) Heavily relying on the dimensional drawing I opened up 3D Builder and made my own. I left spaces for the M2 screws in the corners, and M2.5 in the middle. I added a lip around the edge to glue it all to the screen/mesh, similar to the original. The back of the Stellar Unicorn has a bunch of buttons, so I created a back panel too, with gaps so the buttons could be accessed.


Screenshot of the to-be-printed front grid panel model in 3D Builder.

Front grid panel model
Photo by [personal profile] chebe




Screenshot of the to-be-printed back panel model in 3D Builder.

Back panel model
Photo by [personal profile] chebe



The first time I printed the front/grid it came out beautifully. A little bit of stringing but I went through the 256 holes with a flat head screwdriver and neatened it up. Unfortunately I discovered that the bag didn't quite fit that version. The bottom edge needed to be narrower. And when I printed it again my printer and/or filament was having a very bad day. It was a mess. I hit it with the heat gun to address the worst of the strings. But then I had to go through another 256 holes and file them all. It took a while. In the end it was functional, but nowhere near as pretty as the original result.


Photo of the printed, melted, and filed front grid panel, back view.

Back of the printed front grid panel
Photo by [personal profile] chebe




Photo of the printed, melted, and filed front grid panel, front view.

Front of the printed front grid panel
Photo by [personal profile] chebe




Photo of the printed, melted, and filed front grid panel screwed onto the Stellar Unicorn, front view.

Front grid panel screwed onto Stellar Unicorn
Photo by [personal profile] chebe



I printed the back panel between the two front/grid panels, and the print quality is intermediate. But functional. I had to do a couple of iterations to get the spacings for buttons to feel right. I screwed it all together with four inset/countersunk screws on the front, regular screws on the back, and standoffs in between.


Photo of the printed, melted, and filed back panel screwed onto the Stellar Unicorn, back view.

Back panel screwed onto Stellar Unicorn, top view
Photo by [personal profile] chebe




Photo of the printed, melted, and filed back panel screwed onto the Stellar Unicorn, back view, left-hand side showing the volume and lux buttons.

Front and back panels screwed onto Stellar Unicorn, showing button access on left side
Photo by [personal profile] chebe




Photo of the printed, melted, and filed back panel screwed onto the Stellar Unicorn, back view, right-hand side showing the A,B,C,D Prog buttons.

Front and back panels screwed onto Stellar Unicorn, showing button access on right side
Photo by [personal profile] chebe




Photo of the printed, melted, and filed back panel screwed onto the Stellar Unicorn, looking front the bottom right down between all the layers, showing components like the (unused) speaker.

Front and back panels screwed onto Stellar Unicorn, showing the spacing between the board components and the panels
Photo by [personal profile] chebe




Software


This is a MicroPython device (with means using the Thonny code editor). Pimoroni have some code examples, and I'm using the Rainbow one here for testing. The W in Raspberry Pi Pico W means it can do wifi connectivity, but it isn't enabled by default. I'm planning to leave it off and just upload scripts the old fashioned way, and make use of the provided buttons for alternating. But I haven't delved into the code much yet.


Reassemble


The Stellar Unicorn with the addition of the panels is too thick to fit in the side pocket any more. So I had to cut open the lining next to that pocket, and awkwardly hand stitch bias binding to finish the raw edges. The USB cable is also on the opposite side of the board from the original, and doesn't reach to the side pocket, so I nestled the power pack in the section I cut open.

I sewed back up the side pocket, and melted the edges as a quick and dirty seam finish. I used 6mm strips of double-sided sticky tape along the front edges of the 3d printed grid to secure it to the screen/mesh. It has a good hold, but also pulls away with no damage to the fabric mesh.

Because my grid is slightly bigger than the original I lose about a third of each edge pixel, all the way around, to the black-out mesh. (The cut out area in the mesh isn't perfectly even/straight, on top of everything, so it's all a bit uneven, but close enough.) You can make out the unevenness of the walls of my grid, which didn't happen with the good print that is slightly too big. But it's a choice between 'character' and being (even more) off-centre. I'm okay with my choice.


Photo of the pocket of the bag with the new opening finished with bias tape, with a USB cable coming through it, and into a power pack.

View of the section behind the display pocket, with new opening, and power pack in place
Photo by [personal profile] chebe




Photo of the outside of the bag, in low light, with the Rainbow animation playing. The uneven outline of the grid walls can be seen.

New display in place, running Rainbow example, in low light, with the uneven grid edges visible
Photo by [personal profile] chebe




Photo of the outside of the bag, in regular light, with the Rainbow animation playing.

Outside view of the bag, new display in place, running Rainbow example
Photo by [personal profile] chebe



This bag is quite eye-catching, and people have asked me questions about it whenever I've brought it out. I look forward to customising the animations, eventually. There are repos that will decode the actual animations from the app, but there doesn't seem to be a ready library for implementing them in MicroPython (I saw a promising one for CircuitPython, which alas is not MircroPython), but I'll keep investigating. Also, the original display is still functional, so that might find a use somewhere that isn't public.

Profile

chebe: (Default)
chebe

June 2025

M T W T F S S
      1
23 45678
9101112131415
1617 1819202122
2324 2526272829
30      

Expand Cut Tags

No cut tags

Style Credit