Hi everyone,
We have an exciting release that will allow you to:
- Group Pixelblazes and control them all from one device’s web UI (launch patterns, run playlists, set global brightness)
- Send sensor board data (audio, for example) to all group members
- Live code patterns and have them update on all group members in real-time
The synchronized pattern control is a little like using Firestorm, but you don’t need to have the same patterns on all the devices ahead of time (and obviously you don’t need a separate computer or Raspberry Pi).
This works when one Pixelblaze is in AP mode too, creating a WiFi network, so you don’t need any internet connection or network gear at all.
If you try it out, we’d love your feedback. To keep the forum free from things likely to change quickly, please give us feedback via email (support@electromage.com) or in a DM.
This release also includes:
- WS2814 color order support!
- A much-improved timesync algorithm. A group will self-synchronize, and the synchronization accuracy has been improved.
- Transitions (fade-through-black) between patterns when using Shuffle or Playlists.
- Background preloading of the next pattern means switches are smooth and fast, with or without transitions.
- Doubled playlist size to 64 entries.
- Nicer status information and a drop-down with more detail, including local Pixelblazes on the network, making it easier to find things.
How to use the new sync features
You’ll designate one of your Pixelblazes as the group leader. This is the device you’ll use the UI on most, and the one that can broadcast its sensor board data to others.
In this example, we have three Pixelblazes, each controlling an 8x8 matrix (the Beautiful Box).
On the leader's Settings page, you can see a list of peer devices that you can add as a follower.
You can also select from available leaders on a follower's Settings page. Here we can see that Box B and Box C are set to follow Box A:
Sometimes you might want a pattern’s code to do different things on a particular follower. To do this, you can give assign each Pixelblaze a distinct Node ID that can be read in pattern code:
As for mapping, there are two approaches we've been playing with. The simpler of the two is to add "phantom pixels" that will compress the respective maps into where you'd like them relative to each other. For example:
To illustrate the use of Node IDs, let's make a single pattern on the leader (Box A) that will play simultaneously on all three, but will change the hue based on which node it's executing on.
Consider this pattern:
near = (a, b, width) => clamp(1-mod(abs(a-b), 1) / width, 0, 1)
export function render2D(index, x, y) {
// Waves from center
v = near(hypot(x-.5, y-.5), time(.05), .15)
hsv(0, 0, v*v*v)
}
We can change the code to use a different color based on the `nodeId()`:
var hue, red = 0, purple = .8, blue = .6
near = (a, b, width) => clamp(1-mod(abs(a-b), 1) / width, 0, 1)
export function render2D(index, x, y) {
// Waves from center
v = near(hypot(x-.5, y-.5), time(.05), .15)
if (nodeId() == 0) { // Box A - left
hue = red
} else if (nodeId() == 1) { // Box B - center
hue = purple
} else if (nodeId() == 2) { // Box C - right
hue = blue
}
hsv(hue, 1, v*v*v)
}
Installing the Update
If your Pixelblaze is online, you can update right from the Settings tab!
Otherwise, here are instructions for manually installing the update. First, download the appropriate Signed Transfer Firmware Update file:
- Standard: v3.40.pb32.stfu (1.4 MB)
- Pico: v3.40.pico32.stfu (1.4 MB)
I recommend that you upload these using the /recovery.html tool, since you can get progress information. You can use the firmware update in Settings at any time to revert to the current stable version.
Let us know how it goes!