Early experiments are complete; it’s time to put together the list of what I want in my new toy. This is… surprisingly complicated. There are a lot of moving parts, so to speak, and many rabbit holes to go tripping down.
Somehow, I seem to have survived the experience…
RISCy Behavior
As mentioned in previous notes, the ESP8266 and ESP32 are power hungry beasties, mostly due to the WiFi component. The CPU cores themselves are not that much better – unless you use the ULP. My initial answer to that was a hard no: they don’t look very well integrated into the Arudino environment, which is where I’ve been leaning in terms of tooling, and I don’t fancy writing any significant amount of code in assembler.
Then I noticed that the ESP32-S2 and ESP32-S3 have RISC-V cores for the ULP – programmable in C – and that piqued my interest.
My initial deep dive again resulted in a negative opinion. The ULP does have access to GPIOs, but not all of them – only 22 are available to that core, and we need 25 for an 8-character display, or 34 for 12 characters. Either is too many.
But then I got to thinking…
If we go with a separate processor, such as the STM32G030 I’ve been thinking about, one of the downsides is the need to add a USB-to-UART bridge if you want easy Arduino compatibility. So now you’re up to two additional chips, and probably more than five dollars in additional cost. Not to mention an extra codebase…
But what if we just added a GPIO extender instead?
They’re around a buck and a half a piece for an MCP23017, and that would give us an additional 16 GPIOs, for a cost of a pair of GPIOs used as an i2c port. That’s a total of 36, which meets our needs, at least in theory. The only question is, would it be fast enough and reasonable in terms of power consumption?
My back-of-the-napkin math says yes on both counts.
Plus, the ESP32-S2 has a built-in USB port. I’ll choose the S2 over the S3, simply because the S3’s WiFi solution is a bit more power-hungry according to the datasheet.
As for Arduino support… well, it was a nice thought, anyway. ESP-IDF is probably going to be our go-to on this one.
And with that out of the way we make a few decisions…
The Feature List
The Basics
- ESP32-S2 (possbly the SOLO-2 module; undecided if I want to use a module or not).
- MCP23017 GPIO extender (or similar) for the needed I/O capacity
- A battery charger for a LiPo battery; MCP73831 or similar
- 3 x 4-character 14-segment display modules
- USB Port for programming and wired power
Nice-To-Haves
- Ambient light detector so we can auto-dim to conserve power
- Four buttons to assist with manual configuration or other things. This may be an issue with our GPIO limitations; we’ll see.
Next Steps
This list should be a nice start; now I just need to get it done. I also want to get my hands on an ESP32-S2 to verify that the idea is going to work out with that particular processor. I have some MCP23017’s floating around, but alas, no ESP32. Time to change that and see what I think about wrangling the ULP…
…and here comes another order from Adafruit…
In the mean time I’ll start working on an initial design for this thing. It really shouldn’t be that difficult.
In theory, at least…