M5Dial Zombieverter Dial Dislay
- robertwa
- Posts: 204
- Joined: Tue Apr 13, 2021 3:32 am
- Location: San Diego, CA
- Has thanked: 145 times
- Been thanked: 195 times
M5Dial Zombieverter Dial Dislay
I've been working on a $35 rotary dial display from M5Stack to view certain parameter from zombieverter and push updates to others for functions such as gear shifting. This is hugely leveraged from Jamiejones Lilygo zombie display code. The device is also ESP32-S3
I don't code at all, so leveraged ClaudeAI to do all the porting of code and updating features, as well as documenting files and instructions on github:
https://github.com/robertwa1974/Zombiev ... al-Display
Still lots of tweaking to do, but so far am able to display parameters like temperatures from zombie, ISA shunt values like voltages and current, and BMS information from SIMBMS. I have it configured to push changes like hi/lo gear select, modify regen and select motor modes - Mg1/2/blend etc
I'm hoping to use its RFID capability to connect to smartphone NFC as a kind of immobilizer. Currently working on the graphics to make it look cleaner.
I don't code at all, so leveraged ClaudeAI to do all the porting of code and updating features, as well as documenting files and instructions on github:
https://github.com/robertwa1974/Zombiev ... al-Display
Still lots of tweaking to do, but so far am able to display parameters like temperatures from zombie, ISA shunt values like voltages and current, and BMS information from SIMBMS. I have it configured to push changes like hi/lo gear select, modify regen and select motor modes - Mg1/2/blend etc
I'm hoping to use its RFID capability to connect to smartphone NFC as a kind of immobilizer. Currently working on the graphics to make it look cleaner.
Building: 1964 International Scout 80. LS600H transmission with ZombieVerter, B250e battery pack
- robertwa
- Posts: 204
- Joined: Tue Apr 13, 2021 3:32 am
- Location: San Diego, CA
- Has thanked: 145 times
- Been thanked: 195 times
Re: M5Dial Zombieverter Dial Dislay
Working on updates to add an immobilizer feature and improve look and feel of screens. My car is pretty open like a Jeep so security is important to me. I am building the immobilizer to have a 4 digit PIN entry or a scan of a RFID card/NFC from smartphone. It can output a digital signal via GPIO or via CAN. For inputs, PIN functionality is currently working, I am working on the RFID part.
For outputs, I could use a relay to control inverter 12V power or brake input switch (my setup is Lexus inverter). I'd prefer CAN for minimal wiring but am struggling with finding a parameter I can use to inhibit run mode. Open to any suggestions here - I tried to CAN map to idcmax, tried limiting idcmax via SDO control, and tried a BMS spoof (no discharge allowed) 0x6B4 BMS signal, to no avail. Please chime in if any suggestions.
For outputs, I could use a relay to control inverter 12V power or brake input switch (my setup is Lexus inverter). I'd prefer CAN for minimal wiring but am struggling with finding a parameter I can use to inhibit run mode. Open to any suggestions here - I tried to CAN map to idcmax, tried limiting idcmax via SDO control, and tried a BMS spoof (no discharge allowed) 0x6B4 BMS signal, to no avail. Please chime in if any suggestions.
Building: 1964 International Scout 80. LS600H transmission with ZombieVerter, B250e battery pack
- robertwa
- Posts: 204
- Joined: Tue Apr 13, 2021 3:32 am
- Location: San Diego, CA
- Has thanked: 145 times
- Been thanked: 195 times
Re: M5Dial Zombieverter Dial Dislay
Continuing to evolve the dial. Latest release:
https://github.com/robertwa1974/Zombiev ... y/releases
Playing with the dials web interface to read parameters. Have some scaling issues need work Added tab to show can log Thinking more on the Web UI and don't want to reinvent the wheel. Jamie already has a great CAN based derivative of the Openinverter one so I'm going to pivot to that. I've been able to run that on the dial successfully but not yet without killing dial functionality. Will keep working on this as time allows
This whole Claude AI thing has been an experience. It's so easy for AI to go off track and, as someone who doesn't know code, is easy to get sucked in. Many times, I've had to call a timeout (akin to a board meeting) and reinforce the objectives. It's been fun, but quite a detour from my car build. On the plus side, I've learned about SPIFFS and JSONs and SDO and all sorts of other stuff. I've had SavvyCan running along with Openinerter CAN tool together.
https://github.com/robertwa1974/Zombiev ... y/releases
Playing with the dials web interface to read parameters. Have some scaling issues need work Added tab to show can log Thinking more on the Web UI and don't want to reinvent the wheel. Jamie already has a great CAN based derivative of the Openinverter one so I'm going to pivot to that. I've been able to run that on the dial successfully but not yet without killing dial functionality. Will keep working on this as time allows
This whole Claude AI thing has been an experience. It's so easy for AI to go off track and, as someone who doesn't know code, is easy to get sucked in. Many times, I've had to call a timeout (akin to a board meeting) and reinforce the objectives. It's been fun, but quite a detour from my car build. On the plus side, I've learned about SPIFFS and JSONs and SDO and all sorts of other stuff. I've had SavvyCan running along with Openinerter CAN tool together.
Building: 1964 International Scout 80. LS600H transmission with ZombieVerter, B250e battery pack
-
LRBen
- Posts: 608
- Joined: Thu Jul 04, 2019 6:35 pm
- Location: Somerset, UK
- Has thanked: 121 times
- Been thanked: 290 times
Re: M5Dial Zombieverter Dial Dislay
There is a drive inhibit feature in the vehicle testing branch that uses PP detect, wouldn't be too difficult to add the immobiliser function into that as an option. Wouldn't stop power up functions or charging, but would stop drive until it saw whatever signal you decided to use. I've been thinking about something similar for the Land Rover as that's also going to be quite open. Being a can message would be ideal as you can't hotwire around that.robertwa wrote: ↑Tue Feb 10, 2026 5:37 am Working on updates to add an immobilizer feature and improve look and feel of screens. My car is pretty open like a Jeep so security is important to me. I am building the immobilizer to have a 4 digit PIN entry or a scan of a RFID card/NFC from smartphone. It can output a digital signal via GPIO or via CAN. For inputs, PIN functionality is currently working, I am working on the RFID part.
For outputs, I could use a relay to control inverter 12V power or brake input switch (my setup is Lexus inverter). I'd prefer CAN for minimal wiring but am struggling with finding a parameter I can use to inhibit run mode. Open to any suggestions here - I tried to CAN map to idcmax, tried limiting idcmax via SDO control, and tried a BMS spoof (no discharge allowed) 0x6B4 BMS signal, to no avail. Please chime in if any suggestions.
- robertwa
- Posts: 204
- Joined: Tue Apr 13, 2021 3:32 am
- Location: San Diego, CA
- Has thanked: 145 times
- Been thanked: 195 times
Re: M5Dial Zombieverter Dial Dislay
Thanks, will look forward to seeing that drive inhibit feature on next zombie release, that will be great
Building: 1964 International Scout 80. LS600H transmission with ZombieVerter, B250e battery pack
- robertwa
- Posts: 204
- Joined: Tue Apr 13, 2021 3:32 am
- Location: San Diego, CA
- Has thanked: 145 times
- Been thanked: 195 times
Re: M5Dial Zombieverter Dial Dislay
Finally got the Openinverter Web Interface working with the dial.
Released v2.1.0
https://github.com/robertwa1974/Zombiev ... tag/v2.1.0
Released v2.1.0
https://github.com/robertwa1974/Zombiev ... tag/v2.1.0
Building: 1964 International Scout 80. LS600H transmission with ZombieVerter, B250e battery pack
- robertwa
- Posts: 204
- Joined: Tue Apr 13, 2021 3:32 am
- Location: San Diego, CA
- Has thanked: 145 times
- Been thanked: 195 times
Re: M5Dial Zombieverter Dial Dislay
Got the Dial fetching parameters from zombieverter on boot. Also created a one-click install link in the release notes below in case anyone is interested. Again, all coding done by ClaudeAI
# Release Notes — v2.2.1
## ZombieVerter Dial Display — Auto Parameter Fetch & One-Click Web Installer
---
## What's New
### Automatic Parameter Fetch from VCU
The display now downloads its parameter list directly from the ZombieVerter VCU at boot via SDO segmented transfer — no more manual `params.json` upload required.
**Boot sequence:**
1. On first power-up with the VCU connected, the display fetches the full parameter schema (~30KB) from the VCU over CAN
2. The splash screen shows live progress: **"Fetching params from VCU..."**
3. On success: **"VCU params loaded!"** — the file is automatically saved to internal storage for future use
4. If the VCU is not connected at boot, the display falls back to the last cached parameter file
5. If no cache exists, a minimal set of default parameters is used
**Three-tier fallback system:**
| Priority | Source | When used |
|----------|--------|-----------|
| 1 | VCU (live SDO fetch) | VCU powered and CAN connected at boot |
| 2 | Cached `/params.json` (SPIFFS) | VCU not available, but previously fetched |
| 3 | Built-in sample params | No VCU and no cache — limited functionality |
This means after one successful boot with the VCU connected, the display works correctly even if the VCU is off when the display powers up. It also means that if you upgrade your VCU firmware and the parameter list changes, the display automatically picks up the new list on next boot with the VCU connected.
### One-Click Web Installer
A browser-based installer is now available — no development tools, no drivers, no command line required.
**Visit:** `https://robertwa1974.github.io/Zombieve ... l-Display/
- Works in Chrome and Edge (Web Serial API required)
- Flashes firmware, web interface, and all supporting files in a single operation
- Takes approximately 30–60 seconds
- M5Stack Dial connects automatically — no button pressing required
The installer is automatically rebuilt and published every time a new release is pushed to GitHub.
---
## Bug Fixes
- Fixed SDO task startup order — SDOManager now starts after the VCU parameter fetch completes, preventing frame routing conflicts during boot
- Removed leftover `buildParamsJsonCache` / `cachedParamsJson` code from CANData that was no longer used
---
## Technical Notes
- Parameter fetch uses CANopen segmented upload protocol on SDO index `0x5001` (the ZombieVerter strings index)
- Download runs synchronously before SDOManager starts, reading directly from TWAI to avoid FreeRTOS queue conflicts
- On a typical 200-parameter VCU, the download takes 3–5 seconds (~4400 segments × 7 bytes)
- Fetched file is saved to SPIFFS as `/params.json`, overwriting any previously uploaded file
- GitHub Actions workflow builds `factory.bin` (merged binary at offset `0x0`) and deploys to GitHub Pages on every push to `main`
---
## Upgrade Notes
- Flash firmware only (no filesystem change required if you already have v2.1.0)
- On first boot after upgrade, the display will attempt to fetch parameters from the VCU
- Any manually uploaded `params.json` will be overwritten on the next successful VCU fetch — this is intentional and ensures the display always has the correct parameter list for the connected VCU firmware version
- If you want to prevent overwriting a custom `params.json`, connect the display without the VCU powered on — it will load from SPIFFS instead
# Release Notes — v2.2.1
## ZombieVerter Dial Display — Auto Parameter Fetch & One-Click Web Installer
---
## What's New
### Automatic Parameter Fetch from VCU
The display now downloads its parameter list directly from the ZombieVerter VCU at boot via SDO segmented transfer — no more manual `params.json` upload required.
**Boot sequence:**
1. On first power-up with the VCU connected, the display fetches the full parameter schema (~30KB) from the VCU over CAN
2. The splash screen shows live progress: **"Fetching params from VCU..."**
3. On success: **"VCU params loaded!"** — the file is automatically saved to internal storage for future use
4. If the VCU is not connected at boot, the display falls back to the last cached parameter file
5. If no cache exists, a minimal set of default parameters is used
**Three-tier fallback system:**
| Priority | Source | When used |
|----------|--------|-----------|
| 1 | VCU (live SDO fetch) | VCU powered and CAN connected at boot |
| 2 | Cached `/params.json` (SPIFFS) | VCU not available, but previously fetched |
| 3 | Built-in sample params | No VCU and no cache — limited functionality |
This means after one successful boot with the VCU connected, the display works correctly even if the VCU is off when the display powers up. It also means that if you upgrade your VCU firmware and the parameter list changes, the display automatically picks up the new list on next boot with the VCU connected.
### One-Click Web Installer
A browser-based installer is now available — no development tools, no drivers, no command line required.
**Visit:** `https://robertwa1974.github.io/Zombieve ... l-Display/
- Works in Chrome and Edge (Web Serial API required)
- Flashes firmware, web interface, and all supporting files in a single operation
- Takes approximately 30–60 seconds
- M5Stack Dial connects automatically — no button pressing required
The installer is automatically rebuilt and published every time a new release is pushed to GitHub.
---
## Bug Fixes
- Fixed SDO task startup order — SDOManager now starts after the VCU parameter fetch completes, preventing frame routing conflicts during boot
- Removed leftover `buildParamsJsonCache` / `cachedParamsJson` code from CANData that was no longer used
---
## Technical Notes
- Parameter fetch uses CANopen segmented upload protocol on SDO index `0x5001` (the ZombieVerter strings index)
- Download runs synchronously before SDOManager starts, reading directly from TWAI to avoid FreeRTOS queue conflicts
- On a typical 200-parameter VCU, the download takes 3–5 seconds (~4400 segments × 7 bytes)
- Fetched file is saved to SPIFFS as `/params.json`, overwriting any previously uploaded file
- GitHub Actions workflow builds `factory.bin` (merged binary at offset `0x0`) and deploys to GitHub Pages on every push to `main`
---
## Upgrade Notes
- Flash firmware only (no filesystem change required if you already have v2.1.0)
- On first boot after upgrade, the display will attempt to fetch parameters from the VCU
- Any manually uploaded `params.json` will be overwritten on the next successful VCU fetch — this is intentional and ensures the display always has the correct parameter list for the connected VCU firmware version
- If you want to prevent overwriting a custom `params.json`, connect the display without the VCU powered on — it will load from SPIFFS instead
Building: 1964 International Scout 80. LS600H transmission with ZombieVerter, B250e battery pack
- robertwa
- Posts: 204
- Joined: Tue Apr 13, 2021 3:32 am
- Location: San Diego, CA
- Has thanked: 145 times
- Been thanked: 195 times
Re: M5Dial Zombieverter Dial Dislay
Released v2.3.0.
Full release notes: https://github.com/robertwa1974/Zombiev ... tag/v2.3.0
Key changes:
- Changed gearchange, motor select, regen to SDO, no more need for parameter mapping.
- Added tab to web UI screen showing CAN traffic, decoding, transmit single packet and logging
- Added OTA FW updates on web UI
-Added parameter fetch on web UI (in addition to fetching automatically on dial boot)
-Fixed bugs on parameter fetching on dial boot
-General file cleanup and dial graphics optimization
Full release notes: https://github.com/robertwa1974/Zombiev ... tag/v2.3.0
Key changes:
- Changed gearchange, motor select, regen to SDO, no more need for parameter mapping.
- Added tab to web UI screen showing CAN traffic, decoding, transmit single packet and logging
- Added OTA FW updates on web UI
-Added parameter fetch on web UI (in addition to fetching automatically on dial boot)
-Fixed bugs on parameter fetching on dial boot
-General file cleanup and dial graphics optimization
Building: 1964 International Scout 80. LS600H transmission with ZombieVerter, B250e battery pack
-
Ghia66
- Posts: 171
- Joined: Wed Apr 10, 2024 6:50 pm
- Location: Ireland
- Has thanked: 750 times
- Been thanked: 65 times
Re: M5Dial Zombieverter Dial Dislay
Hi Robert, what is the Zombieverter-Display password when using a M5Stack Dial…I’m stuck!?
What Can H Can L did you use on the Zombieverter…I was going to use pin 25 and 26 (which is free) but I have the Can to the BMW Sbox or Outlander charger available?
Thanks
-
Mhs
- Posts: 65
- Joined: Fri Jul 26, 2019 8:06 pm
- Location: Bahrain
- Has thanked: 309 times
- Been thanked: 13 times
Re: M5Dial Zombieverter Dial Dislay
Password should be
Code: Select all
zombieverterZombieverter
Outlander rear motor & Inverter
Outlander rear motor & Inverter
- robertwa
- Posts: 204
- Joined: Tue Apr 13, 2021 3:32 am
- Location: San Diego, CA
- Has thanked: 145 times
- Been thanked: 195 times
Re: M5Dial Zombieverter Dial Dislay
Correct, password is 'zombieverter'
Instructions here:
https://github.com/robertwa1974/Zombiev ... /README.md
I connect to CAN 1 on zombieverter as that is confirmed to work with SDO. Not sure about CAN 2. You will want it in on the same bus as you have your shunt/S-box wired to
Instructions here:
https://github.com/robertwa1974/Zombiev ... /README.md
I connect to CAN 1 on zombieverter as that is confirmed to work with SDO. Not sure about CAN 2. You will want it in on the same bus as you have your shunt/S-box wired to
Building: 1964 International Scout 80. LS600H transmission with ZombieVerter, B250e battery pack