gCore is designed for battery-powered gadgets (although with hacking it can also be used in fixed applications). The impetus came from my having to constantly add external circuitry to commercially available micro-controller dev boards to implement soft power-on and off control (for automatic low-battery shutdown). In addition I wanted a system that implemented a true USB power path, separating the battery charging from power deliver to the application. Many inexpensive dev boards put both the Li-Ion/Li-Po battery and main system voltage regulator on the output of the charger making it impossible for the charger to correctly determine battery charge state. A USB power path allows the charger to correctly determine battery charge state as well as automatically select between USB power and battery power as necessary to feed the load.
Although 320x240 pixel LCD displays are both ubiquitous and very inexpensive, I've found that 480x320 allows for far better GUI displays. Although not cheap, the Adafruit display module includes a resistive touchscreen controller and Micro-SD slot in a flat, enclosure friendly form-factor. The difference in resolution is noticeable as can be seen when the bigger display is initialized as if it was a 320x240 display.
I have also become quite fond of the ESP32 as a generic controller as it is both fast and inexpensive, includes WiFi and is well supported. The WROVER-B module is less than $5USD from distribution and has up to 16 MB Flash and 8 MB PSRAM.
gCore is comprised of the following components.
- WROVER-B Module
- CP2102N USB UART (configured through the Silicon Labs Xpress Configurator to support charger detection)
- MCP73871 Charger and Powerpath (configured to support 100mA and 500 mA charging)
- TPS63051 Boost/Buck converter generating 3.3V @ 500 mA.
- Isolation circuitry to prevent sneak power paths to the ESP32 when plugged into USB but not turned on
- Soft power enable of the TPS63051 using a push button to initially switch on power and a hold signal from the ESP32 to keep the system powered after the button is released. The ESP32 can then power-down by de-asserting the hold signal.
- Battery voltage monitor with a resistor divider array feeding an ESP32 analog input. The resistor divider is disabled using a MOSFET when the power is off to eliminate a drain on the battery.
- Charge state monitoring via a resistor divider network feeding an ESP32 analog input for firmware monitoring.
- Mostly featherwing compatible expansion area for add-on boards (the WROVER-B module does not make GPIO16/17 available).
gCore includes a pair of ICR10440 Li-Ion batteries, each nominally rated at 350 mA/Hr. Depending on WiFi utilization this should allow 2-3 hours of runtime on a charge. The batteries are connected in parallel through a pair of PTC fuses to both protect and allow equalization. I did a bunch of online research about paralleling batteries and it should be ok as long as the batteries are installed at similar charge states and the charge current is kept lower than the battery maximum. Early experiments show the batteries charge and discharge fairly equally. While I am not too concerned about gCore bursting into flame, I am still a little nervous about the long-term functionality of this arrangement. A future design may select a single, larger battery. I chose this configuration to allow for smaller enclosures.