The story of our SoC platform choice

Initial constraints

From the concept of the idea of time², two things ware clear:

  • Instead of designing a PCB with an MCU from scratch, it was going to incorporate a commercially available, open hardware development board.
  • Whether programmed in Arduino language or not, the platform of time² should support it.

There were two reasons for this:

  • We wanted the final product to be as much as tweakable and maker friendly. And nothing is more maker friendly than using a dev board which is open hardware, supports Arduino programming language and already has a big community supporting it.
  • For small to medium scale production, using a dev board is much more cost efficient than assembling your own PCBA.

The ATmega era

So, back in 2014, development started using an Arduino Nano which is based on ATmega328P.

At that time, the idea was to use traditional white color LED strips as a light source and there was no thought about WiFi support. The challenge was driving around 25 independent strips (one per clock word, depending on language), each with independent brightness control (dimming for smooth transitions) and the ATmega could handle that with the help of some shift registers, some darlington arrays and some quite painful coding to achieve PWM through the shift registers.

Nano was the cheapest Arduino that could do this task reliably, so it seemed like a good choice at the time.

The ESP8266 era

When we revisited the idea in 2017 a lot of things had changed. Mainly, we had decided that time² should use individually addressable RGB LEDs and support WiFi, at least for time sync. Luckily for us, the market was already flooded with numerous dev boards based on Esspresif’s ESP8266 which is much more powerful than the ATmega, it natively supports WiFi and had very similar cost with the Nano. We chose WEMOS D1 Mini Pro and were quite content with our choice. Almost 60% of the code running in time² today was developed on ESP8266.

When you have a WiFi client product with no input device (i.e. no keyboard) you basically have two options for passing WiFi credentials to it:

  1. You configure your product to function not only as a WiFi client but also as a WiFi station. A server is running in the station that can accept API calls to set WiFi client credentials.
  2. You use SmartConfig type technologies (on Espressif chips, this is called ESP-Touch).

The first option is quite popular, but we didn’t like it. It requires that the user temporarily disconnects from his normal internet access WiFi access point to connect to our device in order to pass the WiFi credentials to it. It’s not a smooth procedure. So, we opted for the second one.

But things don’t always work as scheduled. After repeated tests with many smartphones and tablets, we found out that ESP-Touch and similar SmartConfig technologies were not stable. And after we lost a couple of months trying to make it 100% stable, we finally gave up.

And since we still didn’t like option 1, we decided that our device must also support Bluetooth.

ESP32 at last

Again, luckily for us, Espressif had recently released ESP32, a chip even more powerful than ESP8266 with native WiFi & Bluetooth support at a very reasonable price difference. We chose WEMOS Lolin32 which is quite popular.

The downside of ESP32 was that being quite new, it lacked sufficient documentation and community support. Porting more than 1000 lines of code from ESP8266 was quite harder than expected. In the course we found out that ESP32’s Arduino framework was still a work in progress with quite a few issues. We had to get actively involved in the development of the framework itself to solve some of our issues on the development of time², an activity we continue to do until today.

Finally, today time² is still based on ESP32 and we are happy to report that it functions steady as a rock.

At this time, we are just considering switching from WEMOS Lolin32 to WEMOS Lolin D32 which is the most recent revision of the dev board.

time² | The story of our SoC platform choice