What kind of computers to use?

A project log for Maelstrom: 35 machines discuss you

Using sensors, scrapers, and questionnaires, this art installation gets your data--and spreads rumors about you with NRF24L01+ radios.

chris-combsChris Combs 02/03/2021 at 16:470 Comments

Well, as much as "Raspberry Pi" isn't a standard--it is a de facto standard. I ended up using a controlled version of the Raspberry Pi pinout as my host controller's connector.

After scoping everything out and tossing out some overly expansive ideas, the host controller board needed to include the following hardware interfaces:

I wanted to be able to source and replace the actual computers with ease. But as an independent artist self-financing this project, I didn't have the resources to be able to throw, say, a Compute Module at each of the ~40 machines. Thus, my key design goals for the computers were:

You might be thinking, "sounds like a Raspberry Pi Zero to me!" And you're not wrong--I did end up using many Zero Ws, slowly collected over 18 months, as part of this installation. But as a pandemic slowly crept across the globe in early 2020, and supply chains were torn asunder, I renewed my focus on making Maelstrom a multi-platform project through the design of "controller boards" that adapt non-Pi platforms to the Maelstrom/Pi pinout. 

I ended up supporting these three platforms in Maelstrom:

I was able to develop host controller boards for ESP32 and Orange Pi Zero that support the above hardware interfaces. My software detects the platform and adjusts the pinout and software modules to suit the host machine.

Despite my best efforts, there are some per-platform strangenesses.


Orange Pi Zero LTS:

Raspberry Pi:

By adapting the ESP32 and Orange Pi Zero LTS to my limited subset of the Raspberry Pi pinout, I ended up with a "Maelstrom pinout." This took a lot of staring at datasheets, library docs, and spreadsheets, and I still got it wrong several times--especially on ESP32, where some of the "GPIOs" are just "GPIs."

There was one big idea I wanted to build out that was totally incompatible with the main Maelstrom pinout, however: "HUB75" RGB LED matrix panels. 

I ended up addressing this by making a separate, matrix pinout, only compatible with Raspberry Pi, and adding an extra pinout adjustment in the Maelstrom software. So a Raspberry Pi node will start up, read the EEPROM data from the attached host board--sort of like a HAT--and use that to decide whether it loads the "Maelstrom pinout" or the "Maelstrom matrix pinout."

This introduced a few new weirdnesses to work around in the Maelstrom matrix pinout:

All of these hoops were helpful to jump through. I now have a multiplatform system that works reasonably well across the boundaries, and a given host controller board can be replaced with a completely different architecture in most cases--making it easier to address future electronics failures.