Skip to content

Releases: NickoScope/AnimatedPixelClock

v2.7.3

Choose a tag to compare

@NickoScope NickoScope released this 24 Sep 19:21

This release is for the Waveshare ESP32-S3-RGB-Matrix board driving a 128x64 HUB75 panel, the only board I have tested it on.

  • Lua effects can use sprites now. px.grab cuts a piece of the canvas out, with black as transparent. px.blit stamps it back in one call, mirrored if you want, dimmed, and mixed toward a colour. An animal drawn once in each pose and stamped after that costs one call a frame instead of forty. The aquarium went from 52-54 to about 40 ms a frame on the panel.
  • Effects have a button. On an effect's page, the click of the knob and the OK of the IR remote go to the effect as px.button(). POST /api/lua {"click":true} does the same, which is handy from Home Assistant.
  • A crash is fixed. A POST to any upload route (scripts, animations, clips, firmware) that was not a multipart file made the panel crash and reboot. Anything on the network could do it, and it had been there in every version. Such a request is refused now. A firmware upload that is cut off is not answered "OK" any more.

There is a new screen in the gallery, OCEANARIUM: a window into a big public aquarium.

  • Over a hundred kinds of sea life live their own lives in it, from reef fish to a whale shark, jellies, an octopus and seahorses.
  • The light follows the time of day.
  • The curious fish come to the glass where you stand, if you have the presence radar.
  • One press of the knob or the remote switches the tank lights. Two run a whole day in five minutes. Three bring it back to the real time.
  • It needs this firmware for the button, and 2.7.1 or later for the rest.
  • How it works, with the tank running and the numbers from the panel: https://nickoscope.github.io/AnimatedPixelClock/oceanarium/en.html (English), https://nickoscope.github.io/AnimatedPixelClock/oceanarium/ (Russian).

Install:

  • For a new board, use the web flasher at https://nickoscope.github.io/AnimatedPixelClock/ or write firmware-v2.7.3-waveshare.bin at 0x0.
  • For a board that is already running, upload OTA_ONLY_firmware-v2.7.3-waveshare.bin on the portal's firmware update page, or let the tools in tools/agent do it. Do not upload the full image as an update.
  • The Windows PC stats companion is pc_stats_monitor_v4.exe. SHA256SUMS.txt has the checksums.

v2.7.0

Choose a tag to compare

@NickoScope NickoScope released this 24 Sep 17:22

This release is for the Waveshare ESP32-S3-RGB-Matrix board driving a 128x64 HUB75 panel, the only board I have tested it on.

The main thing is that Lua effects can now show real 3D on the panel itself, not only in the simulator on a computer.

  • px.terrain draws ground that goes into the distance in one call: a height map seen from a camera, lit by the sun, with a pattern for each kind of ground, water that shows the sky, and haze. It runs in the firmware, many times faster than the same thing written in Lua, so the camera can fly over a landscape at the frame rate.
  • px.save and px.restore keep a copy of the picture and put it back. A still scene is drawn once, and after that each frame only draws what moves. The first effect that uses both went from 6-12 to about 14 frames a second.
  • A script can now be as big as it needs, up to 512 KB, limited only by the free space on the panel. It used to be 50 KB.
  • The letter Й was drawn so that it read as А in both fonts. It reads as Й now.
  • The native helpers count their work against the frame's time budget, so a broken script cannot hang the panel.

There are two new screens in the gallery that need this firmware: golf in 3D on two real courses, the Old Course at Cannes-Mandelieu and the Pestovo golf club near Moscow. Two players play all eighteen holes in four minutes, with a flyover of every hole, the tee shot from behind the player with the ball's tracer, the play from above with a plan of the hole in the corner, and the last putt with the crowd. The Old Course is built from OpenStreetMap data, so its holes, bunkers, water and woods are where they really are.

Install: for a new board, use the web flasher at https://nickoscope.github.io/AnimatedPixelClock/ or write firmware-v2.7.0-waveshare.bin at 0x0. For a board that is already running, upload OTA_ONLY_firmware-v2.7.0-waveshare.bin on the portal's firmware update page, or let the tools in tools/agent do it. Do not upload the full image as an update. The Windows PC stats companion is pc_stats_monitor_v4.exe. SHA256SUMS.txt has the checksums.

AnimatedPixelClock v2.6.1

Choose a tag to compare

@NickoScope NickoScope released this 24 Sep 06:22

This release is for the Waveshare ESP32-S3-RGB-Matrix board driving a 128x64 HUB75 panel, the only board I have tested it on. One small change.

The status marks in the corners, the A or M for the carousel, the Wi-Fi icon and the red dot while the remote is heard, now show only for five seconds after you use the remote and then disappear. They were getting in the way of the pictures. Every press shows them again for another five seconds, so they are there when you are actually changing something and gone when you are just looking.

Install: for a new board, use the web flasher at https://nickoscope.github.io/AnimatedPixelClock/ or write firmware-v2.6.1-waveshare.bin at 0x0. For a board that is already running, upload OTA_ONLY_firmware-v2.6.1-waveshare.bin on the portal's firmware update page, or let the tools in tools/agent do it. Do not upload the full image as an update. The Windows PC stats companion is pc_stats_monitor_v4.exe. SHA256SUMS.txt has the checksums.

AnimatedPixelClock v2.6.0

Choose a tag to compare

@NickoScope NickoScope released this 23 Sep 20:48

This release is for the Waveshare ESP32-S3-RGB-Matrix board driving a 128x64 HUB75 panel, the only board I have tested it on. It changes where Lua effects come from, so please read the second paragraph before you update.

No Lua effect is compiled into the firmware any more. The seven that used to be (the football, snooker, snake and Tetris clocks, Minecraft, the room radar and La Gioconda) now live in the gallery with all the others, and a panel holds up to 36 effects instead of 12 plus the built-in ones. The firmware is about 135 KB smaller, and every effect on a panel is one you chose.

What that means when you update: the seven former built-in effects disappear from your panel until you add them back. Open the portal, go to Effects & clips, and use Add from the gallery; each one takes a second and needs no reboot. Effects you uploaded yourself stay as they are, and so do the switches that keep an effect in or out of the carousel. A freshly flashed board starts with no effects at all and gets them the same way.

Install: for a new board, use the web flasher at https://nickoscope.github.io/AnimatedPixelClock/ or write firmware-v2.6.0-waveshare.bin at 0x0. For a board that is already running, upload OTA_ONLY_firmware-v2.6.0-waveshare.bin on the portal's firmware update page, or let the tools in tools/agent do it. Do not upload the full image as an update. The Windows PC stats companion is pc_stats_monitor_v4.exe. SHA256SUMS.txt has the checksums.

AnimatedPixelClock v2.5.9

Choose a tag to compare

@NickoScope NickoScope released this 23 Sep 20:35

This release is for the Waveshare ESP32-S3-RGB-Matrix board driving a 128x64 HUB75 panel, the only board I have tested it on. It does two things.

The panel now refuses a Lua effect that would not run. Until now an uploaded script was checked for its syntax and size and then stored, so a script that looked fine in the simulator but was too heavy for the panel's processor got in and showed nothing but an error. Now the panel runs every upload once before it keeps it, off screen and without touching what is showing: the load and four frames, under the same limits it runs effects with. If the script fails, or a frame takes more than 500 ms, the upload is refused with the measured frame times and nothing is stored. An accepted upload reports what it cost. The limits, and what each drawing call costs on this panel as measured through that trial, are written down in AGENTS.md, so whoever writes an effect, a person or an AI agent, can see in advance what will fit.

The world clock can now change its home city from the knob or the remote. Press to go into the page, then left and right step through the cities you set up in the portal, and the choice is kept.

Install: for a new board, use the web flasher at https://nickoscope.github.io/AnimatedPixelClock/ or write firmware-v2.5.9-waveshare.bin at 0x0. For a board that is already running, upload OTA_ONLY_firmware-v2.5.9-waveshare.bin on the portal's firmware update page, or let the tools in tools/agent do it. Do not upload the full image as an update. The Windows PC stats companion is pc_stats_monitor_v4.exe. SHA256SUMS.txt has the checksums.

AnimatedPixelClock v2.5.8

Choose a tag to compare

@NickoScope NickoScope released this 23 Sep 19:49

This release is for the Waveshare ESP32-S3-RGB-Matrix board driving a 128x64 HUB75 panel, the only board I have tested it on. Most of it came out of the first evening with an infrared receiver soldered to my panel, from the small things I missed while actually using it.

The panel now shows its state in two corners on every screen. In the top left there is an A when the carousel changes screens by itself, a dimmer A while it waits after you changed a page by hand, and an M when it is off. While you are inside a page, for example picking a station on the rail board, an arrow takes its place. In the top right there is a Wi-Fi icon coloured by signal strength: green at -67 dBm or better, amber down to -80, red below that, and a red cross when there is no connection. While the remote is being received the icon turns into a blinking red dot, so you can see that the panel hears you. Each mark sits on a small black patch, so it stays readable over any picture.

The remote now moves one step per press for left, right and brightness, however long you hold the button. Before, every repeat a held key sends counted as a new press, and one ordinary press could jump from the clock to page 22. Brightness set with the remote is also kept after a power cut now. It is saved a few seconds after the last press.

The receiver goes on GPIO0, the BOOT line, which the board already pulls up, so no extra resistor is needed. The wiring and the parts are in src/ir/README.md.

Install: for a new board, use the web flasher at https://nickoscope.github.io/AnimatedPixelClock/ or write firmware-v2.5.8-waveshare.bin at 0x0. For a board that is already running, upload OTA_ONLY_firmware-v2.5.8-waveshare.bin on the portal's firmware update page, or let the tools in tools/agent do it. Do not upload the full image as an update. The Windows PC stats companion is pc_stats_monitor_v4.exe. SHA256SUMS.txt has the checksums.

AnimatedPixelClock v2.5.7

Choose a tag to compare

@NickoScope NickoScope released this 23 Sep 17:32

This release is for the Waveshare ESP32-S3-RGB-Matrix board driving a 128x64 HUB75 panel, the only board I have tested it on. It is about Lua effects: you can now choose which ones play, remove the ones you uploaded, and add new ones from a gallery, all from the portal.

Choosing which effects play. On the portal's Effects & clips page every Lua effect has its own switch. An effect that is switched off is skipped by the knob and by the carousel, but Show still puts it on screen. The panel keeps the switches by effect name across reboots, so uploading or deleting another effect does not move them. Before, the effects could only be switched on and off all together.

Deleting. Effects you uploaded have a Delete button. It takes two presses: the first turns it red and asks "Sure? Delete", the second deletes. There is no pop-up, because some browsers block pop-ups, and there Delete did nothing at all. The other Delete buttons in the portal (clips, world clock cities, airports) now work the same way.

The gallery. "Add from the gallery" lists the effects in this repository's gallery folder, with a preview of each, and puts the one you pick on the panel. Your browser fetches the list and the script from GitHub and sends it to the panel; the panel itself does not go to the internet for it. The gallery has nine screens now: an aquarium that notices people in the room, fireworks over the bay of Cannes, a Starship flight every minute, La Gioconda in characters, a flip-disc clock, an autumn park, the sea at sunset, a city in the evening and a photograph of trees.

An upload whose name would show the same as an effect already on the panel is refused. Before, an upload called "la_gioconda" next to the built-in LA GIOCONDA made two effects with one name.

For people using the tools in tools/agent: the MCP server has effect_walk for the switches, and gallery tools for agents. An agent publishes into a branch on its own machine and never gets write access to GitHub. A person checks each screen and brings it here with tools/agent/gallery.py sync. A photograph goes in only if no person is in it.

Install: for a new board, use the web flasher at https://nickoscope.github.io/AnimatedPixelClock/ or write firmware-v2.5.7-waveshare.bin at 0x0. For a board that is already running, upload OTA_ONLY_firmware-v2.5.7-waveshare.bin on the portal's firmware update page, or let the tools in tools/agent do it. Do not upload the full image as an update. The Windows PC stats companion is pc_stats_monitor_v4.exe. SHA256SUMS.txt has the checksums.

AnimatedPixelClock v2.5.6

Choose a tag to compare

@NickoScope NickoScope released this 23 Sep 14:32

This release is for the Waveshare ESP32-S3-RGB-Matrix board driving a 128x64 HUB75 panel, the only board I have tested it on. Three things changed: the panel stays on the network, it writes Russian on every screen, and it stops doing work for screens nobody is looking at.

The network. On 2.5.5 the panel could still drop off the network in ordinary use. The Wi-Fi driver takes its 1,626 byte receive buffers from a small pool of internal memory. On 2.5.5 that pool had 13 to 15 KB free, and at times it went down to 172 bytes. When a buffer could not be had, the panel stopped answering for about three minutes, until the link watchdog restarted Wi-Fi. Most of that memory was held by the pages and effects themselves, so in 2.5.6 about 36 KB of their state lives in the board's 16 MB of PSRAM instead. The frame buffers stay where they were, so double buffering and colour depth are unchanged. On my panel the pool now has 30 to 50 KB free. Over a two hour run it never went below 21.5 KB and no allocation failed.

Russian on every screen. Text on the panel is now UTF-8 in both of its fonts, capitals and lowercase. That covers notifications, cards, media titles, the flight and rail boards, city and airport names, the original clock screens and Lua effects. Up to now Cyrillic worked only in Lua effects and on the world clock, and a notification in Russian came out as garbage. The Cyrillic letters come from the public-domain X11 misc-fixed fonts, sized to stand next to the Latin ones. Letters that look like Latin ones use exactly the same pixels. Anything the fonts cannot draw shows as a solid block. A Lua effect can pick the font: px.text(x, y, s, r, g, b, "5x7") or "pico"; without that it draws as before. The portal accepts Cyrillic city and airport names. It no longer turns Й into И or Ё into Е.

Work only for what is on screen. The room radar feed from the presence sensor is now received only while a page that shows it is on screen, the room radar or the aquarium. The board's temperature sensor is read only while the weather clock shows it, or when Home Assistant uses it as a room sensor. Before, both ran all the time.

Smaller things: the portal's list of pages no longer shows empty rows for unused effect slots. Lua effects and market pages are grouped under one switch each, since that is how the panel turns them on and off. For people using the tools in tools/agent, the health self-test now checks the new behaviour.

Install: for a new board, use the web flasher at https://nickoscope.github.io/AnimatedPixelClock/ or write firmware-v2.5.6-waveshare.bin at 0x0. For a board that is already running, upload OTA_ONLY_firmware-v2.5.6-waveshare.bin on the portal's firmware update page, or let the tools in tools/agent do it. Do not upload the full image as an update. The Windows PC stats companion is pc_stats_monitor_v4.exe. SHA256SUMS.txt has the checksums.

AnimatedPixelClock v2.5.5

Choose a tag to compare

@NickoScope NickoScope released this 23 Sep 06:39

This release is for the Waveshare ESP32-S3-RGB-Matrix board driving a 128x64 HUB75 panel, the only board I have tested it on. Version 2.5.4 never left my own panel, so everything since 2.5.3 is here.

The panel can now show Russian. The small font has a Cyrillic alphabet next to the Latin one, and any Lua effect can write Cyrillic text as it is, in UTF-8. The letters that look like Latin ones use exactly the same pixels, and anything the font cannot draw shows as a solid block instead of silently turning into a space, so a missing character is visible.

There is an infrared remote. The receiver goes on the BOOT button line, next to the knob, which keeps working as before. The web portal has ten remote buttons: you teach each one by pressing it on the remote, and pick from a list what it does, from turning and pressing like the knob to screen on and off, brightness, going home to the clock, the carousel, the screensaver, a chosen page, play and pause, track and volume, and dismissing a notification. Codes and choices survive a firmware update.

Smaller changes: the router now lists the panel by the name you gave it instead of esp32s3 and three bytes of its MAC address, and setting the brightness over the API and reading it back no longer loses one percent every time.

For people driving the panel from scripts or AI agents, the tools in tools/agent gained a health self test that exercises the panel and keeps the logs, and a way to check for a new release and install it over the air. It asks three times before it sends anything and then reports whether the new version stayed or the panel went back to the previous one on its own.

Install: for a new board, use the web flasher at https://nickoscope.github.io/AnimatedPixelClock/ or write firmware-v2.5.5-waveshare.bin at 0x0. For a board that is already running, upload OTA_ONLY_firmware-v2.5.5-waveshare.bin on the portal's firmware update page, and do not upload the full image as an update. The Windows PC stats companion is pc_stats_monitor_v4.exe. SHA256SUMS.txt has the checksums.

AnimatedPixelClock v2.5.3

Choose a tag to compare

@NickoScope NickoScope released this 22 Sep 22:12

This is the first release from my fork. It follows upstream v2.3.1, and it is built for one board only: the Waveshare ESP32-S3-RGB-Matrix (32 MB flash, 16 MB PSRAM) driving a 128x64 HUB75 panel. That is the board I have flashed from the web flasher and watched boot, so it is the only one I am offering.

The fix that made me cut this release: opening the web portal could take the panel off the network. The panel kept running and the clock stayed on the screen, but it stopped answering until it was reset. I traced it over USB. The Wi-Fi driver allocates its 1,626 byte receive buffers from the DMA-capable part of internal RAM, and one visit to the portal fired 48 requests, many of them at the same time. Every request waiting its turn held some of those buffers, the largest free DMA block fell from 11,252 to 1,396 bytes, and the radio could not get a buffer. The portal's own memory check was reading the wrong pool, which still showed 7,668 bytes free. In 2.5.3 the portal sends its requests one at a time, the memory check also looks at the DMA pool, and the link watchdog restarts Wi-Fi when it cannot even send a probe twice in a row, instead of waiting fifteen minutes. With all of that in place I clicked through every page, saved settings six times, reloaded the page and had two browsers open at once: 109 pings out of 109 answered and the radio did not fail a single allocation.

Since upstream v2.3.1 the panel has also gained:
Lua effects uploaded over the air, twelve slots of up to 50 KB each, so a new screen no longer needs a firmware flash.
Its own web flasher at https://nickoscope.github.io/AnimatedPixelClock/ with Wi-Fi setup in the browser.
A shared network broker, so the weather, flight board, rail board and other network screens take turns instead of each starting its own task.
A flight board fed directly from FlightAware AeroAPI, a Realtime Trains rail board, a world clock with your own cities, a yacht radar from AIS, a media player screen and a market screen, the last two through Home Assistant.
A presence radar screen that draws real targets from an mmWave sensor over MQTT.
No MQTT broker is assumed any more: the panel only connects to one after you give it an address.

Install: for a new board, use the web flasher above or write firmware-v2.5.3-waveshare.bin at 0x0. For a board that is already running, upload OTA_ONLY_firmware-v2.5.3-waveshare.bin on the portal's firmware update page, and do not upload the full image as an update. The Windows PC stats companion is pc_stats_monitor_v4.exe. SHA256SUMS.txt has the checksums.