Ulanzi Smart Pixel Clock (TC001)

I’m going to get an Ulanzi Smart Pixel Clock (TC001) and tasmotize it and I would need some guidance on setting it up.

So far I’ve come to the conclusion that I should use the following setup:

Tasmotized TC001/ArtNet <-> ArtNet Bridge (DMX Binding) <-> DMX Color (RGB) Dimmer (DMX Binding)

Am I right in thinking that the tasmotized TC001 provides 8*32 DMX channels?

Is there a better way?

1 Like

Seems to be correct, but to be honest I don’t know thee hardware (yet - instantly ordered one).

1 Like

The TC001 seems to be the ideal device to terrorize your roommates with a graphical representation of Tibber’s hourly energy rates. :slight_smile:

1 Like

After reading more about Tasmota/ArtNet, I am no longer convinced that the DMX Binding would be the optimal choice: each row of the LED matrix is a separate universe (0…7) and only one universe can be bound to an ArtNet Bridge, so you would have to deal with 8 ArtNet Bridges to control the TC001. I might be wrong though …

No, you have to define how many rows and how many columns.
It makes no sense to setup multiple universes for one matrix with less than 512 channels.

Excerpt from Tamota/ArtNet:

When setting "Rows":<x> with <x> greater than 1, the display is considered as a LED matrix. The first row matches the Univers number, and following rows are matched to increasing Universe numbers.

Aren’t we dealing with 8 x 32 x 3 = 768 channels?

Yes, forgot about the three color channels…

I think GitHub - aptonline/PixelIt_Ulanzi: PixelIt is an ESP8266 and WS2812B LED Matrix based PixelArt display with added Ulanzi Pixel Clock support. would be the way to go.

IIUC, the clock comes with support for AWTRIX built in. AWTRIX does support MQTT, so my test setup will be:

TC001/AWTRIX client <-> AWTRIX host/MQTT <-> openHAB/MQTT Binding

Unfortunately, AWTRIX is closed source (and you have to use RGB565 for bitmaps …). Sandbox analysis (AWTRIX stable version 2045):

IP Traffic:

  • (TCP)
  • (TCP)
  • (UDP)
  • (TCP)
  • (UDP)

Net ranges assigned to Akamai and Oath …

I’ll test the stability of AWTRIX and report back - and then upgrade my TC001 to a Pixoo-64. :slight_smile:

First results (hourly Tibber rate for today, white cursor for current hour, price in cent/kWh):

See Hourly Tibber rates on matrix displays (e.g. Ulanzi TC001) for setup instructions and source code.

1 Like

There is another (brandnew) option, called AWTRIX-Light

which is also nice and lightweight. There is even a simple mqtt interface to send messages to display. Icons can be downloaded via Web UI as well as simple sound files in RTTTL format.

1 Like

Thanks for the hint. I haven’t fiddled with the firmware of my TC001 yet. Of course, first step would be to backup the stock firmware.

While AWTRIX-light seems to reduce complexity (no AWTRIX server required), user-defined bitmaps seem to be lacking - but well, it’s a light version and it should be much easier to use than the full fledged AWTRIX version.

In fact, Awtrix2 isn’t maintained any longer, seems to be a dead root.

On the other hand, awtrix-light can use LaMetric Icons (even animated versions!) and it’s really simple, just go to the LaMetric dev site, find the Icon, get the ID, go to your awtrix-light website, set the ID, get a preview(!), download the file, voila.
You can even put files to the filesystem via web frontend. (also nice for sound files).

Totally forgot to mention…
See Ulanzi Awtrix Smart Pixel Clock 2882 official Website has a Link to the alternative firmware (and of course another for the stock firmware)

This device seems to be gaining momentum. :slight_smile:

Do you think it would be worthwile to flash it with Tasmota and use the DMX Binding? IIUC, one would need one ArtNet Bridge per pixel row and 32 Color Things per ArtNet Bridge. One might get along with only one ArtNet Bridge and one Color Thing by using the openHAB API to change the definitions of the Bridge and the Thing on the fly - but AFAIU DMX requires refresh messages (at least every 800 ms, IIRC), which might invalidate this hackish approach.

I don*t see any benefit other than having the option to control every single pixel, but on the other hand, you will have to control every single pixel in any situation.
I’m also not sure about the panel, if it will last long if, let’s say, all LEDs are at full power (there are some warnings about that in the Awtrix2 Documentation ant it makes sense).

I’m quite happy with awtrix-light so far.

Just to mention… AwTrix-light does also ArtNet (since 0.64? not sure about) but it uses only two universes (i.e. 128 Pixel per universe)

And there are commands to draw pixels by mqtt code. :slight_smile:

1 Like

For me after 15 pixels the ulanzi with awtrix light 0.69 didn’t show any pixels anymore. Anyone with experience on that? Or even better the bitmap function?

Show your code - then we might be able to help.

In a nutshell I try to create a GitHub commit app for the Awtrix Light. Therefore I have a lot of single pixels I need to set. I guess I figured out what was wrong. But anyways. I get a different result if I send the json with or without indents. So after deleting all the whitespaces, I’m now able to set up to 49 Pixels. But I don’t know if this is the best way to publish so many pixels.

{"draw": [{"dp": [31, 3, "#FFFFFF"]}, {"dp": [31, 2, "#00CB00"]}, {"dp": [31, 1, "#00B900"]}, {"dp": [30, 5, "#00B000"]}, {"dp": [30, 4, "#009E00"]}, {"dp": [30, 2, "#00B000"]}, {"dp": [30, 1, "#00B900"]}, {"dp": [28, 3, "#009500"]}, {"dp": [28, 1, "#009500"]}, {"dp": [26, 5, "#009500"]}, {"dp": [26, 4, "#009E00"]}, {"dp": [25, 3, "#009500"]}, {"dp": [25, 2, "#009500"]}, {"dp": [25, 1, "#00D400"]}, {"dp": [24, 5, "#009E00"]}, {"dp": [24, 3, "#009E00"]}, {"dp": [24, 1, "#00A700"]}, {"dp": [23, 6, "#00A700"]}, {"dp": [23, 5, "#009500"]}, {"dp": [23, 4, "#009E00"]}, {"dp": [23, 3, "#009500"]}, {"dp": [23, 2, "#009500"]}, {"dp": [23, 1, "#00A700"]}, {"dp": [22, 5, "#009500"]}, {"dp": [22, 3, "#009500"]}, {"dp": [22, 1, "#00B000"]}, {"dp": [21, 4, "#009500"]}, {"dp": [21, 3, "#00A700"]}, {"dp": [20, 5, "#009E00"]}, {"dp": [19, 3, "#009E00"]}, {"dp": [18, 7, "#00A700"]}, {"dp": [18, 2, "#00F900"]}, {"dp": [15, 1, "#009500"]}, {"dp": [14, 5, "#009E00"]}, {"dp": [14, 4, "#00B900"]}, {"dp": [14, 1, "#00B900"]}, {"dp": [13, 5, "#00B900"]}, {"dp": [12, 4, "#00C200"]}, {"dp": [11, 6, "#00CB00"]}, {"dp": [11, 4, "#009500"]}, {"dp": [11, 3, "#00CB00"]}, {"dp": [11, 1, "#009500"]}, {"dp": [10, 1, "#009E00"]}], "duration": 10, "icon": 5251}

Try using db instead of dp, cf. AWTRIX LIGHT. Please note that the db command uses RGB565 (i.e. 5 bits for Red and Blue and 6 bits for Green; 2 bytes/pixel).