
We provide custom hardware and firmware development for a US oral care brand. Our scope covers hardware design (schematic, PCB layout, component selection, prototyping and debugging), embedded firmware, a production-line flashing host application, and integration with the customer's cloud backend. The device is used in professional oral care settings, so data accuracy is a critical requirement. It uses a single button, drives a vibration motor for multiple brushing modes, connects to the cloud over Wi-Fi to report brushing sessions and check for firmware updates, and supports local provisioning and status queries. The device is battery powered, making battery life another key metric.
Low power and power management
Built on the ESP32-C3 platform, the device enters deep sleep when idle and is woken only by the button GPIO. It also enters deep sleep automatically while charging or when the battery is exhausted, with a light indication before shutdown. Battery level is derived from ADC sampling with piecewise linear fitting, balancing accuracy against resource usage.
Single-button, multi-level interaction
A short press starts brushing; another short press within 5 seconds cycles through modes; a short press after 5 seconds stops and triggers reporting. A 5-second long press enters provisioning mode. All states are shown through the mode LEDs and an RGB status light, so daily use requires no phone.
Multiple brushing modes
Five modes are built in — a 20-second quick mode plus clean, refresh, polish and sensitive. PWM combined with software timers generates different vibration rhythms and intensities, and the last used mode is remembered.
Data accuracy: time sync, caching and back-fill
Because the device is offline while brushing, each session is first stored locally with microsecond precision (up to 64 records, oldest dropped when full). Once connected, the device completes network time synchronisation before converting microsecond values into accurate timestamps, so time drift cannot undermine the data. All cached sessions are then reported in one batch, and local records are cleared only after a successful upload — otherwise they are kept in full for the next attempt, so no data is lost.
Provisioning and local interface
A long press enters AP provisioning mode, where a local HTTP interface lets the phone read device information, write Wi-Fi and cloud settings, query connection status and perform a factory reset. During provisioning, the configuration acknowledgement is returned to the phone before the device starts connecting, avoiding false "setup failed" indications caused by RF switching.
Security and cloud integration
Reporting and OTA both use HTTPS with server certificate validation and Bearer authentication. The cloud can push new configuration (including certificates) in the reporting response, or send a null value to clear a configuration item.
Over-the-air updates
After each report the device queries for OTA information, downloads and installs new firmware automatically when available, and indicates the result through the status light.
Production tooling: a secure flashing host application
Alongside the device firmware, we built a companion flashing tool for the production line:
