We programmed a circular LED screen to display animated images of "Tomorrow's Weather".
Creating public art installations can be an exciting opportunity for any tech-savvy team, but it also comes with its own unique set of challenges. That's what we learned when we received a commission from two artists, Susanna Jablonski, and Santiago Mostyn, to create an art installation called "Tomorrow's Weather." Our task was to program a circular LED screen displaying an animated image of the following day's weather in Timișoara, Romania.
The project required us to think creatively and strategically to make the installation come to life. We started by meeting with the artists to align our vision and scope and then began researching the best languages, frameworks, and hardware to use.
After some experimentation, we decided to use Golang, the 2D game library Pixel, and a Raspberry Pi 4 to power the installation. We also chose to use OpenWeatherMap's API to get weather forecasts. We then divided the project into three main areas: weather API, hardware, and graphics, and assigned roles to each team member in order to get the job done quicker and faster.
When it came to challenges, we had plenty. One of the biggest ones that we faced was figuring out how to program the graphics in Golang using Pixel, a small and hand-crafted 2D game library. We also had to find and create assets that would align with the artists' vision of modern and veridical aesthetics, which was a time-consuming task. Another challenge we faced was getting the Raspberry Pi 4 to run the application, as it did not support OpenGL 3.3, which Pixel depended on. Thankfully, we eventually found a solution by combining software rendering with experimental Vulkan support.
Despite our challenges, we were able to create an installation that met the artists' vision and displayed the following day's weather in Timișoara with visually appealing graphics.
One of the key takeaways from this project was that having a designated assets designer or a more extensive library would have saved us a lot of time and effort. We also learned that it was easy to implement the daily forecast API with OpenWeatherMap, thanks to the great net/http features in the standard library of Golang. However, we are unsure of how well the application will run after extensive uptime, and it is possible that more powerful hardware is needed to support software rendering. With that said, such ease of implementation makes the API interesting for other usages and ideas in the future.
In speaking of the future, we have many ideas for expanding and developing the project. One of the biggest features we would like to add is the ability to dynamically render more fine-grained differences in various weather conditions and periods of the day. We are also eager to learn more about how the LED screen will receive input from our application and how it will appear when displayed in a circular shape.