Skip to content

wjcloudy/esp32-web-interface

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

282 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

esp32-web-interface

A modern web interface for OpenInverter systems — over UART or CAN bus.

Build combined images Tests Latest release

Dashboard Gauges

Works with the OpenInverter family of firmware: stm32-sine / FOC · ZombieVerter VCU · stm32-charger · stm32-island · BMS · and more.


Highlights

Modern single-page UI (Preact + HTM, no build step)

  • Dark-first glass design with full light mode and a customisable accent colour
  • Dashboard hero card: live state pill, error chips, battery voltage & temperature with sparklines
  • Installable to your phone's home screen (PWA manifest, iOS standalone)

Two inverter transports

  • UART — the classic serial connection, with fast-mode streaming and pin-swap setting
  • CAN bus — full SDO support: device scanning, multi-node management with a boot-default node, parameter database download, live values, error log, and firmware updates over CAN

Telemetry

  • Gauges — radial and line gauges in four sizes, per-gauge colours (hue-matched gradients), enum fields show their mode text, drag-to-reorder layout
  • Plot — multi-chart plotting with left/right axes and burst sampling (UART)
  • Spot Values — searchable table with favourites, ~10 Hz fast mode, and optional per-row sparklines
  • Data Logger — log any fields to a downloadable file

Configuration

  • Parameters — searchable, categorised, favourites, inline editing, flash save/restore, file download/upload, and openinverter.org parameter-database submit/subscribe
  • CAN Mapping — view, add and remove the device's TX/RX CAN mappings (decimal or 0x hex IDs)
  • Settings export/import — favourites, gauge & plot layouts and UI preferences as a single JSON file

Updates

  • OpenInverter board firmware updates over UART or CAN with live progress (CAN requires the CAN bootloader on the device)
  • Web interface OTA updates for the ESP32 firmware and individual files

Getting started

1. Get an image

Pre-built flash-at-0x0 combined images for both supported boards:

Source What you get
Latest release Version-stamped raw .bin files: full-flash *-0x000.bin and OTA *-ota.bin, per board (e.g. esp32_wemos_v4.1-0x000.bin)
CI builds Every push, as run artifacts (zipped)

2. Flash it

Flash the image at offset 0x0 with ESP Web Tools or esptool.py:

esptool.py --chip esp32   write_flash 0x0 esp32_wemos_v4.1-0x000.bin   # classic ESP32 / Wemos
esptool.py --chip esp32s3 write_flash 0x0 esp32_t2can_v4.1-0x000.bin   # LILYGO T-2Can

3. Connect

4. Pick a transport

In Settings → Interface: choose UART (default) or CAN Bus → Save → Scan for devices. The first node found becomes the boot default; mark any other node as default from the device list.


Hardware

Board Notes
ESP32-WROOM-32E (and most dev boards) UART to the inverter on pin 16 (RX ← inverter TX) and pin 17 (TX → inverter RX)
LILYGO T-2Can (ESP32-S3) Built-in CAN transceiver — default CAN pins RX 6 / TX 7 (esp32_t2can build target)

Optional peripherals (classic ESP32):

  • SD card in SDIO mode for data logging — CLK pin 14, CMD pin 15, D0 pin 2, D1 pin 4, D2 pin 12, D3 pin 13
  • RTC (PCF8523 as standard, anything RTClib supports with a sketch change) — SCL pin 22, SDA pin 21

CAN speed (125k/250k/500k) and pins are configurable in Settings on any board.


Flashing & upgrading

Wirelessly (OTA)

Once a board is running you can update it over WiFi from the Update tab — no cables, no toolchain. Updates use a combined *-ota.bin image that flashes the ESP32 firmware and the web interface together, so the two can never drift out of sync. The bootloader and partition table are left untouched, so a bad image stays recoverable over USB. The device reboots and the page reloads automatically when the flash completes.

From the web interface — Update → Web Interface:

  • Get releases → choose a release. The image matching your board (esp32_wemos or esp32_t2can, marked (this board)) is pre-selected. The repository field defaults to the repo this build came from, but you can point it at any fork. Then Download & install.
  • Install OTA image from file — upload an *-ota.bin you already have (e.g. a release asset).
  • Upload single file — replace one file in the filesystem without a full update.

For development (PlatformIO over the network) — the envs use upload_protocol = espota in platformio-local-override.ini:

pio run -e esp32_wemos -t upload     # flash firmware (use esp32_t2can for the T-2Can)
pio run -e esp32_wemos -t uploadfs   # flash the web interface filesystem

Wired

For a new or fully-erased board, connect a 3.3V USB/serial adapter:

Pin# ESP32 board function USB/serial adapter
1 +3.3V input 3.3V output (if available)
2 GND GND
3 RXD input TXD output
4 TXD output RXD input

Various openinverter boards (SDU, LDU, Leaf) use a different wiring scheme for initial programming. Flash the ESP32 before the STM32 — otherwise the UART pins collide. If the STM32 is already flashed, erase it or hold it in reset while flashing the ESP32.

Pin# ESP32 board function USB/serial adapter
1 TXD output RXD input
2 RXD input TXD output
3 +5V input 5V output (if available)
4 GND GND
5 GND GND
6 GPIO0 Connect to GND (pin 5) for programming mode, then power up

Flash subsequent updates via OTA.

Updating the inverter itself

The Update tab flashes OpenInverter board firmware (stm32_*.bin) through the ESP32:

  • UART mode — works with the standard OpenInverter bootloader
  • CAN mode — the transfer runs gap-free in the background with live progress; the device must run the CAN bootloader. A power-cycle prompt allows recovery of a board whose application no longer boots.

Development

Built with the Arduino framework. Versioning comes from git tags (git describe) and is shown in the UI and /version.

Build targets: esp32_wemos / esp32_wemos_debug (classic ESP32 / Wemos), esp32_t2can / esp32_t2can_debug (LILYGO T-2Can, ESP32-S3).

Web UI sources live in data/ — plain Preact + HTM with no build step; gzip the changed files and upload via uploadfs or the Update tab.


Documentation

Credits

This is a fork of jsphuebner/esp32-web-interface with a rewritten frontend and a CAN bus backend. Thanks to Johannes Huebner and the OpenInverter community.

Bundled third-party libraries and their licenses are listed in THIRD_PARTY_NOTICES.md.

About

No description, website, or topics provided.

Resources

Contributing

Stars

6 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors

Languages

  • JavaScript 72.8%
  • C++ 17.4%
  • CSS 6.6%
  • HTML 2.2%
  • Python 0.7%
  • C 0.2%
  • Shell 0.1%