SimpleEVSE-WiFi Charger Retrofit
This lab explores embedded systems and smart grid integration by retrofitting a standard electric vehicle supply equipment (EVSE) charge controller into a networked, intelligent charging station. Students interface an ESP8266 or ESP32 microcontroller with a base EVSE wallbox controller using Modbus RTU over TTL serial, and expand the system with RS485 or S0 pulse energy meters, an SPI RFID access reader, and control indicators. Throughout the build, students measure and monitor active pilot states, charge current limits, power consumption, and session metrics through an embedded web interface and RESTful API. By completing this retrofit, learners develop practical skills in serial industrial communications, peripheral integration, access control, energy metering, and Internet of Things charging infrastructure management.
Uploaded by demo on 2026-09-03 · ready · Electronics · Original source ↗
Files: README.md · platformio.ini
Readiness checks
-
complete 2026-09-04 00:05 🛡 Cybersecurity: Do not place on an open network · 6 findings 13 searches · 15 pagesview · PDF
Latest report — 2026-09-04 00:05
Readiness: SimpleEVSE-WiFi Charger Retrofit
Verdict: Ready with caveats · 2026-09-03 · est. parts cost €90 + $19 (minimum ESP8266 build) to about €415 (fully optioned 2.0 build) Cybersecurity — software & network: Do not place on an open network
This is the cold check for this lab — there is no previous report, so everything below is the baseline the next check will measure drift against. Every item in the bill of materials has a current, priced, in-stock source found this run, and the two boards the lab cannot run without — the EVSE charge controller and, on the 2.0 path, the EVSE-WiFi 2.0 Base — are both stocked by the original vendor at 2–5 business days. Three things keep this off a clean "Ready". The plain "EVSE WB" and "EVSE DIN" controllers the lab names are no longer sold; the vendor now offers only the "EVSE WBDIN Ladecontroller mit RS485", preconfigured for EVSE-WiFi 2.0, and its shipped firmware revision is not stated anywhere, so the lab's hard requirement (revision 8 or ≥ 10, with revision 9 explicitly unsupported) cannot be confirmed before ordering. The vendor's main domain has moved — evse-wifi.de now redirects to smartwb.de — and the firmware download page the lab's own README points at is dead, while the newest GitHub release carries no binaries, so the documented "flash.bat plus compiled binary" route is broken and the firmware must be built from source. Finally, upstream is stale: the last release is from January 2021 and the last commit from January 2023. None of this blocks the build, but an instructor should resolve the controller question with the vendor before spending money.
Action required
| Part | Problem | Recommended action |
|---|---|---|
| Base EVSE Charging Controller | The named "EVSE Wallbox" and "EVSE DIN" products are gone from the vendor catalogue; only the EVSE WBDIN with RS485 remains, and its firmware revision is not published. The lab requires revision 8 or ≥ 10 and rejects revision 9. | Order the EVSE WBDIN Ladecontroller mit RS485 (€89.90) but ask the vendor in writing to confirm the shipped firmware revision, and confirm the TTL UART pins (TX/RX/GND/AN) are still exposed if you are building the v1.x ESP8266 variant. |
| Precompiled firmware / flash.bat | The download page every release note links to (https://www.evse-wifi.de/download/) returned nothing this run, and release v1.1.0 attaches no .bin files. The no-toolchain flashing route does not work. |
Build from source with PlatformIO — the repository and its platformio.ini are intact and were fetched successfully this run. Budget lab time for toolchain setup, or request current binaries from the vendor. |
| Modbus energy meter (SDM120 / SDM630) | Not carried by DigiKey at all; the distributor lookup returned unrelated parts with colliding names, and no ECIA-authorized distributor lists it. | Buy the SDM630v2 from the lab's own vendor (€129.00) for three-phase, or an Eastron SDM120-Modbus ($65.39) for single-phase. Do not substitute a generic meter — the firmware's register map is specific to these. |
Cybersecurity — software & network
Do not place on an open network — A network service that switches a mains EV charging contactor accepts unauthenticated commands, ships with a documented default password and an open setup access point, and upstream has been unmaintained since 2021 with no fix available.
| Component | Version | How known | Support status |
|---|---|---|---|
| SimpleEVSE-WiFi firmware (v1.x, ESP8266) | 1.1.0 | inferred (The lab materials pin no firmware version; v1.1.0 is the latest upstream release listed on the fetched GitHub releases page (published 2021-01-23).) | — |
| EVSE-WiFi web interface and HTTP REST API (port 80) | not determined | not determined (Ships as part of the firmware; no separate version is recorded anywhere in the fetched files.) | — |
| espressif32 (PlatformIO platform, env base_1_045) | 3.0.0 | read from project (Pinned as 'platform = espressif32@3.0.0' in fetched/01-platformio.ini.) | — |
| espressif8266 (PlatformIO platform, env d1_mini) | not determined | unpinned (Declared as 'platform = espressif8266' with no version in fetched/01-platformio.ini.) | — |
| plerup/EspSoftwareSerial | 6.9.0 | read from project (Pinned as 'plerup/EspSoftwareSerial@6.9.0' under [env:d1_mini] lib_deps in fetched/01-platformio.ini.) | — |
| miguelbalboa/MFRC522 | not determined | unpinned (Listed in lib_deps of both environments with no version in fetched/01-platformio.ini.) | — |
| bblanchon/ArduinoJson | not determined | unpinned (Listed in lib_deps of both environments with no version in fetched/01-platformio.ini; the snapshot notes v5/v6/v7 are mutually breaking.) | — |
| emelianov/modbus-esp8266 | not determined | unpinned (Listed in lib_deps of both environments with no version in fetched/01-platformio.ini.) | — |
| ESP8266 Core for Arduino | 2.4.0 | inferred (The fetched README.md states a minimum of v2.4.0 - a floor, not an exact pin, so the version actually built against is not determined.) | — |
| Arduino IDE (alternative toolchain) | not determined | not determined (The fetched README.md says only 'Please install Arduino IDE if you didn't already'.) | — |
| PlatformIO Core (build toolchain) | not determined | not determined (fetched/01-platformio.ini declares environments but pins no PlatformIO Core version.) | — |
| CurtRod/ModbusMaster (mandatory fork) | not determined | unpinned (Source-only git fork tracked at master per the snapshot; no version appears in any fetched file.) | — |
| ESPAsyncWebServer | not determined | unpinned (Named in the fetched README.md with no version; installed from git.) | — |
| ESPAsyncTCP | not determined | unpinned (Named in the fetched README.md with no version; mandatory dependency of ESPAsyncWebServer.) | — |
| ESPAsyncUDP | not determined | unpinned (Named in the fetched README.md with no version; ignored on the ESP32 environment per fetched/01-platformio.ini.) | — |
| NTPClientLib | not determined | unpinned (Named in the fetched README.md with no version.) | — |
| TimeLib | not determined | unpinned (Named in the fetched README.md with no version; mandatory dependency of NTPClientLib.) | — |
| ESP8266Ping | not determined | unpinned (Named in the fetched README.md with no version.) | — |
| Precompiled firmware binaries and flash.bat flasher | not determined | not determined (Distributed from the vendor download page, which did not respond when fetched this run.) | — |
| Component | Finding | Severity | Fix available? |
|---|---|---|---|
| EVSE-WiFi web interface and HTTP REST API (port 80) | The web interface ships with a published default password, 'adminadmin', so anyone who can reach the device and has read the project's README can log in and control the charger. | posture | Mitigation only — change the web interface password at first boot, before the device is connected to any shared network. |
| EVSE-WiFi web interface and HTTP REST API (port 80) | On first boot or after a config reset the device raises an open, unencrypted Wi-Fi access point named 'evse-wifi' with no password, and serves the full management interface on it at 192.168.4.1. | posture | Mitigation only — complete the initial setup out of range of other people, switch the device to client mode immediately, and never leave it sitting in access-point mode. |
| EVSE-WiFi web interface and HTTP REST API (port 80) | The HTTP API needs no authentication: plain GET requests to /setStatus, /setCurrent and /doReboot let anyone on the same network start or stop charging, change the maximum charging current, or reboot the controller, and /getLog discloses the RFID user log. | posture | Mitigation only — put the device on an isolated network segment or VLAN with no route from the general campus network, and disable the API in settings if the lab does not need it. |
| Precompiled firmware binaries and flash.bat flasher | The vendor download page the README and every release note send you to for compiled firmware and the Windows flash.bat flasher did not respond when fetched this run, and the releases carry no binaries and never published checksums or signatures, so there is no verifiable way to obtain a trusted prebuilt image. | posture | Mitigation only — build the firmware from source with PlatformIO using the project's own platformio.ini instead of running an unverified prebuilt binary. |
| SimpleEVSE-WiFi firmware (v1.x, ESP8266) | Dependencies unpinned: 6 of 7 lib_deps entries in platformio.ini carry no version, so two builds a week apart can ship different library code and the firmware has no reproducible or checkable security state. | posture | Mitigation only — pin every lib_deps entry to an exact version in platformio.ini, as EspSoftwareSerial@6.9.0 already is. |
| SimpleEVSE-WiFi firmware (v1.x, ESP8266) | The project is effectively unmaintained - the newest release is v1.1.0 from January 2021 - so no security fixes should be expected for the firmware or the libraries it pulls in. | posture | Mitigation only — treat the device as permanently unpatched and rely on network isolation rather than on updates. |
What this means for your lab
Treat this charger controller as an untrusted device on your network. Its web interface starts with a password that is printed in the project's public documentation ('adminadmin'), and on first boot it broadcasts its own open Wi-Fi network called 'evse-wifi' that anyone nearby can join without a password. More importantly, its HTTP interface accepts commands without asking who is sending them: anyone who can reach the device on the network can start or stop a charging session, change how much current the charger delivers, reboot it, or download the log of which RFID card charged when. Because this controls a mains-powered EV charging contactor, that is a safety matter as well as a privacy one. The project has had no release since January 2021, so do not expect fixes. Before you connect it to anything, change the web password, put the device on its own isolated network segment or VLAN with no path from the general campus or student network, and talk to campus IT first. One thing we could not tell you: none of the firmware libraries this project uses have a vulnerability database covering them, so we cannot say whether they contain known flaws - that is unknown, not clean.
Not checked
- plerup/EspSoftwareSerial 6.9.0: OSV has no 'platformio' ecosystem - the lookup returned unknown_ecosystem, so nothing was queried. This is not the same as 'no vulnerabilities'.
- espressif32 3.0.0: Not queryable: OSV has no 'platformio' ecosystem, and endoflife.date has no 'espressif32' product, so neither advisories nor support status could be checked.
- espressif8266 (PlatformIO platform): Unpinned - no version exists to check, and PlatformIO platforms have no advisory database.
- miguelbalboa/MFRC522, bblanchon/ArduinoJson, emelianov/modbus-esp8266: Unpinned in platformio.ini, and Arduino/PlatformIO libraries have no vulnerability database in OSV.
- ESP8266 Core for Arduino: The README gives a minimum (>= 2.4.0), not an exact version, and endoflife.date has no 'esp8266' product - support status unknown.
- CurtRod/ModbusMaster (mandatory fork): Source-hosted git fork tracked at master - no registry and no version, so it cannot be checked against any advisory database.
- ESPAsyncWebServer, ESPAsyncTCP, ESPAsyncUDP, NTPClientLib, TimeLib, ESP8266Ping: All unpinned and installed from GitHub source - no registry version and no advisory database for these ecosystems.
- Arduino IDE and PlatformIO Core toolchains: No version is stated in any fetched file, so neither could be looked up.
- Precompiled firmware binaries and flash.bat: The vendor download page did not respond when fetched, so the binaries themselves could not be retrieved or examined.
- espressif32 3.0.0: support status: endoflife.date has no such product
- esp8266 2.4.0: support status: endoflife.date has no such product
Parts
| Part | Spec/Package | Status | Stock | Price | Source |
|---|---|---|---|---|---|
| Base EVSE Charging Controller (EVSE WB / EVSE DIN) | DIN-rail charge controller, IEC 61851-1, Modbus RTU over UART/RS485 | Available — variant substitution required; named variants discontinued, firmware revision unconfirmed | In stock, 2–5 business days | €89.90 | shop.evse-wifi.de (EVSE WBDIN mit RS485) |
| Main Microcontroller Board — ESP8266 (WeMos D1 mini / NodeMCU 1.0) | 2.54 mm dual header module, 5 V in, 3.3 V logic | Readily available | Many sellers | $1.97–$2.94 | Google Shopping |
| EVSE-WiFi 2.0 Base Module (v2.0 option) | ESP32, 1 TE DIN-rail housing, integrated RS485 | Readily available | In stock, 2–5 business days | €159.90 | shop.evse-wifi.de |
| DC Power Supply — Mean Well HDR-15-5 | DIN-rail AC/DC, 85–264 VAC in, 5 V out, 2.4 A, 12 W | Active, readily available | 1,603 | $12.50 | DigiKey |
| TTL-to-RS485 Converter Module | 5 V supply, 3.3 V/5 V TTL, automatic flow control, 9600 baud | Readily available — flow-control claim unverified | Many sellers | $0.28–$5.28 | Google Shopping |
| Modbus Energy Meter — Eastron SDM630 (optional) | 3×230/400 V, DIN 4 TE, RS485 Modbus + 2× S0 | Readily available — not via DigiKey | In stock, 2–5 business days | €129.00 | shop.evse-wifi.de |
| Modbus Energy Meter — Eastron SDM120 (optional) | Single phase 45 A, DIN 1 module, RS485 Modbus + pulsed output | Readily available — not via DigiKey | Retail listing | $65.39 | Google Shopping; specs from Eastron |
| S0 Pulse Energy Meter (optional alternative) | DIN-rail meter, passive open-collector S0 output to GND | Available — satisfied by the meters above; S0-to-GND characteristic not verified | In stock, 2–5 business days | €129.00 | shop.evse-wifi.de (SDM630v2 lists 2× S0) |
| RFID Reader Module — RC522 / MFRC522 (optional) | 3.3 V only, 13.56 MHz, SPI, 8-pin 2.54 mm header | Readily available | Many sellers | $3.99–$7.50 | Google Shopping |
| RFID Media — Mifare Classic 1KB cards/keyfobs (optional) | ISO 14443A PICC, 13.56 MHz, 1 KB EEPROM | Readily available — chip type not stated on the product pages | In stock, 2–5 business days | €0.49 each | shop.evse-wifi.de (keyfob and card) |
| Pushbutton Switch (optional) | Momentary SPST-NO, 16 mm panel mount, dry contact to GND | Readily available — momentary action assumed, not stated | In stock, 2–5 business days | €5.90 | shop.evse-wifi.de (LED-Taster, 16 mm) |
| Status Indicator LED — Lite-On LTL-4223 | T-1 3/4 (5 mm) radial through-hole, Vf 2 V at 10 mA | Active, readily available | 66,048 | $0.24 | DigiKey |
| Wiring and Interconnect Hardware | DuPont 2.54 mm F/M and F/F jumper wires, 22–26 AWG specified | Readily available — 28 AWG, thinner than specified | In stock | $3.95 per 40 | Adafruit (F/M); M/M set |
Substitutes
| For part | Substitute | Differences | Verified | Judgment |
|---|---|---|---|---|
| EVSE Wallbox / EVSE DIN controller | EVSE WBDIN Ladecontroller mit RS485, €89.90 | Same vendor and controller line; adds an integrated RS485 interface and arrives preconfigured for EVSE-WiFi 2.0 with Modbus enabled at Slave ID 1 (exceeds the original's interface set). DIN-rail form factor matches the EVSE DIN option; ships with the 220 Ω and 680 Ω PP resistors. | Verified: current price, stock and lead time, DIN-rail form factor, IEC 61851-1 conformity, Modbus interface present and preconfigured (fetched vendor product page). Not verified: shipped firmware revision (page silent — the rev 8 / not-rev-9 constraint cannot be checked); TTL-UART pin availability for the v1.x ESP8266 path; the exact Modbus register map. | Almost certainly the intended successor, but not verified against the lab's two hard constraints — confirm firmware revision and TTL-UART availability with the vendor before ordering. |
| Eastron SDM120 (single-phase Modbus meter) | Eastron SDM630v2, €129.00 | Three-phase rather than single-phase (3×230/400 V, 10 A nominal / 80 A limit) and 4 TE wide rather than 1 module — a larger DIN footprint, so check panel space. Carries the RS485 Modbus interface the firmware needs plus 2× S0, and is in the register-map family the snapshot permits. | Verified: price, stock, RS485 Modbus interface, 2× S0 interfaces, 4 TE width, operating voltage and temperature range (fetched vendor product page). Not verified: 9600 baud / 8N1 and slave-ID-002 configurability; the S0 output's open-collector-to-GND characteristic. | Acceptable where the vehicle charges three-phase, and it is the vendor's own recommendation for EVSE-WiFi 2.0. For single-phase installs prefer the SDM120-Modbus. |
| Separate S0 pulse meter | Eastron SDM630v2 S0 output, €129.00, or Eastron SDM120-Pulse | Removes a whole line item — one meter serves either the Modbus or the S0 wiring path, so no second meter is needed. | Verified: the SDM630v2 page states "2x S0-Schnittstelle"; Eastron's page confirms an SDM120-Pulse variant with a configurable pulsed output (fetched pages). Not verified: that the S0 output is a passive open-collector/dry contact switching to GND, which is what the lab's GPIO0 wiring requires. | Plausible and clearly the economical choice, but confirm the S0 output is passive before wiring it to GPIO0 — the lab warns explicitly against applying 3.3 V or 5 V to that input. |
| Generic RC522 breakout | EVSE-WiFi RFID Reader module, €29.90 | Costs roughly four to seven times a bare RC522 breakout, but ships with pre-soldered headers, all connecting cables, a card and a keyfob. Supply 3.3 V and 13.56 MHz match exactly; supports S50 (Mifare Classic 1K). The 32 × 40.5 mm version is currently unavailable; the 21 × 33 mm mini version is the one in stock. | Verified: supply voltage 3.3 V, frequency 13.56 MHz, S50 support, price, lead time and mini dimensions (fetched vendor product page); endorsed as the supported RFID module by the project's own README (fetched). Not verified: that the module is MFRC522-based — the page names supported card types but never the chipset, and the lab requires MFRC522. | Acceptable as a convenience option. The generic RC522 breakout is cheaper and is what the lab names, so prefer it; note the lab states PN532 and Wiegand readers will not work. |
| Momentary pushbutton | LED-Taster, 16 mm, €5.90 | Covers the pushbutton and the status LED in one part. 16 mm panel cutout is within the lab's 12/16/19 mm range; provides NO, NC and C terminals so the required normally-open dry contact is present; waterproof with sealing ring and nut; LED rail 3.3–5 V matches the lab's logic supply. An optional holder with DuPont sockets is offered. | Verified: 16 mm panel-mount diameter, presence of a normally-open dry contact, LED supply range 3.3–5 V, price and lead time (fetched vendor product page). Not verified: momentary (non-latching) action — the page never states it; the German "Taster" conventionally means a momentary pushbutton, but that is assumed, not specified. | Acceptable and convenient, subject to confirming momentary action — the lab makes actuator style a hard requirement (momentary, not a latching toggle or rocker). Generic momentary panel buttons are cheap if in doubt. |
| DuPont jumper wires at 22–26 AWG | Adafruit 826 Premium Female/Male jumper wires, $3.95 per 40 | Pitch 2.54 mm and the female-to-male gender both match. Gauge falls short: 28 AWG against the specified 22–26 AWG. Immaterial for the logic, SPI and S0 lines; marginal for the 5 V feed to the ESP board, which can draw 500 mA in Wi-Fi bursts. | Verified: 2.54 mm pitch, connector genders, 28 AWG wire gauge, price and in-stock status (fetched Adafruit product pages). Not verified: nothing outstanding. | Acceptable for signal wiring. Use thicker hookup wire, or double up conductors, for the 5 V supply run. |
Verify any substitute against its own datasheet before ordering — the comparisons above rest only on the evidence gathered this run.
Other dependencies
https://www.evse-wifi.de/— moved. The domain now redirects tohttps://www.smartwb.de/, which is live and was fetched this run; it sells the smartWB 11 kW Individual and Classic wallboxes and states that EVSE-WiFi is the open-source software running in each. The shop remains reachable at its own subdomain, shop.evse-wifi.de, which is where every vendor price in this report came from.https://www.evse-wifi.de/download/— dead. Fetching it returned nothing this run. This is the page the lab's README and every GitHub release note point at for compiled firmware and the Windowsflash.batflasher. Building from source with PlatformIO is the way forward; the repository and its build configuration are intact.- github.com/CurtRod/SimpleEVSE-WiFi — live but stale. The releases page was fetched: the newest release is v1.1.0 and it attaches no binary assets, only a pointer to the dead download page. The repository is not archived; its last commit is from January 2023.
https://github.com/CurtRod/ModbusMaster— not checked this run. The lab flags this fork as mandatory (the upstream library triggers an ESP watchdog reset on Modbus timeout), so its availability should be confirmed at the next check.https://github.com/esp8266/arduino-esp8266fs-plugin— not checked this run.- Custom PCB / fabrication — none required. The lab records no layout files; the build is off-the-shelf modules wired point-to-point, so there is nothing to fabricate or source.
- Vendor board-support files (
base_1_045board definition,default_8MB.csvpartition table) — not in the repository. They are referenced by the build configuration but shipped only with the vendor hardware, so buying the EVSE-WiFi 2.0 Base module is the supported route for the ESP32 variant.
Watch list
- The EVSE charge controller. The exact products the lab names are already gone, and the surviving variant is being steered toward EVSE-WiFi 2.0. If the vendor drops the standalone controller, or stops exposing TTL UART, the v1.x ESP8266 half of this lab loses its foundation. Confirm the firmware revision on first order and record it as the new baseline.
- The vendor's web presence. One domain move and one dead download page in a single check is a lot of movement. Re-check
shop.evse-wifi.denext run; if the shop follows the main site onto smartwb.de, every vendor URL in this report changes. - The firmware distribution channel. With no binaries on GitHub and the vendor page gone, source builds are the only route. If the repository's dependencies drift out from under the unpinned
lib_depsentries, builds may start failing outright — the single pinned library, EspSoftwareSerial 6.9.0, is the exception, not the rule. - The Eastron meters. Neither DigiKey nor any ECIA-authorized distributor carries them, so pricing depends on the vendor shop and general retail. That is a thinner supply base than the rest of the BOM and worth watching for price movement.
- The RFID module's regular-size variant is already marked unavailable at the vendor, with only the mini version in stock — a small signal that this peripheral line is thinning.
Snapshot What the lab depended on when it was uploaded — the baseline the readiness checks research against.
This lab document describes the SimpleEVSE-WiFi smart EV charger retrofit, an IoT controller upgrade that interfaces an ESP8266 development board (WeMos D1 mini or NodeMCU 1.0) or a dedicated ESP32-based module ("EVSE-WiFi 2.0 Base") with an existing EVSE Wallbox or EVSE DIN electric vehicle charge controller. The ESP microcontroller acts as a Modbus RTU master communicating over TTL UART (at 3.3 V logic levels) to manage the EVSE charging state, set charging current limits, read vehicle and pilot status, authenticate users via an SPI RFID reader, log charge sessions, and read power metrics via Modbus RS485 or S0 pulse metering. The primary power rail powering the microcontroller and RS485 transceiver is 5 V DC (minimum 500 mA), with a 3.3 V DC secondary rail provided by the development board regulator for the ESP core logic, GPIO, and the RC522 RFID reader.
Bill of Materials
Base EVSE Charging Controller
- Identity: EVSE Wallbox or EVSE DIN charge controller board (Simple EVSE WB/DIN). Software revision must be revision 8 (dated 2017-10-31) or higher. Firmware revision 9 is explicitly unsupported due to a vendor firmware bug.
- Quantity needed: 1
- Footprint/package: DIN-rail mount (EVSE DIN) or standalone PCB assembly module (EVSE Wallbox) mounted within an EV charging station enclosure.
- Electrical constraints: Operates from the wallbox internal DC power rail; communicates via 3.3 V/5 V tolerant UART TTL logic pins (TX, RX, GND) and an analog/digital input pin (AN) used to activate Modbus mode during boot.
- Substitution latitude: Must be a Simple EVSE WB or EVSE DIN charge controller running firmware revision 8 or ≥ 10. The system firmware directly maps to Modbus RTU registers specific to this controller (e.g., register 2001 for Modbus enable, registers ≥ 2000 for non-volatile configuration, register writes for vehicle state and charge current). Generic EVSE controllers without this exact Modbus register map will not function.
- Control role: Not a student/user operated control. Set-once configuration during initial setup (AN pin pulled to GND 5 times within 3 seconds at boot to enable Modbus).
- Sourcing plan: retail shopping search: "EVSE Wallbox controller revision 8" or "EVSE DIN ladecontroller"
Main Microcontroller Board (v1.x Hardware Option)
- Identity: ESP8266 Development Board, specifically WeMos D1 mini or NodeMCU 1.0.
- Quantity needed: 1 (if building v1.x variant)
- Footprint/package: Dual-inline breadboard/header module footprint (WeMos D1 mini 1x8 dual headers, pitch 2.54 mm; or NodeMCU 0.9" / 1.0" pitch 2.54 mm).
- Electrical constraints: Power input: 5 V DC at VCC/VIN (draws up to 500 mA peak during Wi-Fi transmission bursts); logic rail: 3.3 V DC; GPIO pins operate strictly at 3.3 V logic levels (GPIO4, GPIO5, GPIO0, GPIO2, GPIO12, GPIO13, GPIO14, GPIO15, GPIO16).
- Substitution latitude: Any WeMos D1 mini or NodeMCU 1.0 ESP8266 development board. Pinout definitions in firmware assume standard ESP8266 GPIO mapping (D1 = GPIO5, D2 = GPIO4, D3 = GPIO0, D4 = GPIO2, D5 = GPIO14, D6 = GPIO12, D7 = GPIO13, D8 = GPIO15, D0 = GPIO16).
- Control role: Reset (RST) tactile button is present on-board for manual reset after flashing.
- Sourcing plan: retail shopping search: "WeMos D1 mini ESP8266 development board"
EVSE-WiFi 2.0 Base Module (v2.0 Hardware Option)
- Identity: EVSE-WiFi 2.0 Base Module (dedicated ESP32-based board, custom board target
base_1_045). - Quantity needed: 1 (alternative to ESP8266 board for v2.0 firmware)
- Footprint/package: Custom enclosed DIN-rail or wallbox-mount adapter module.
- Electrical constraints: 5 V DC input power rail; 3.3 V internal logic rail; 160 MHz ESP32 core clock; 8 MB flash memory.
- Substitution latitude: Proprietary integrated module from evse-wifi.de. If building from source using generic ESP32 hardware, custom pin mapping and partition table definitions (
default_8MB.csv) are required. - Control role: Not an operated control.
- Sourcing plan: retail shopping search: "EVSE-WiFi 2.0 Base Module"
DC Power Supply
- Identity: 5 V DC regulated power supply module (power supply brick or DIN-rail AC/DC power supply).
- Quantity needed: 1
- Footprint/package: Chassis-mount, DIN-rail mount, or encapsulated PCB module (e.g. Mean Well HDR-15-5 or external 5V 1A wall adapter).
- Electrical constraints: Input: 100–240 V AC (or wallbox internal auxiliary DC supply); Output: 5 V DC regulated (±5%), current rating ≥ 500 mA (1 A or higher recommended to prevent Wi-Fi brownouts).
- Substitution latitude: Any 5 V DC regulated power supply rated for ≥ 500 mA continuous output.
- Control role: None (fixed power supply).
- Sourcing plan: distributor lookup (representative example — sources give spec only): Mean Well HDR-15-5
TTL-to-RS485 Transceiver Converter Module
- Identity: UART TTL to RS485 differential converter module (automatic flow control or hardware DE/RE handling, marketed as "EVSE-WiFi TTL-RS485 Converter").
- Quantity needed: 1 (required only if an RS485 Modbus energy meter is installed)
- Footprint/package: Small breakout module with 4-pin TTL header (VCC, GND, TX, RX) and 2-pin screw terminal block (A+, B-).
- Electrical constraints: Supply voltage: 5 V DC; logic I/O: 3.3 V / 5 V TTL compatible; bus side: RS485 differential balanced signaling (A and B lines).
- Substitution latitude: Any TTL-to-RS485 converter module featuring automatic flow control (transceivers with automatic TX/RX switching, e.g. based on MAX13487, MAX485 with auto-direction circuitry, or SP3485). Must operate at 9600 baud.
- Control role: None.
- Sourcing plan: retail shopping search: "TTL to RS485 converter module automatic flow control"
Modbus Electricity Energy Meter (Optional)
- Identity: Eastron SDM120 (single-phase) or Eastron SDM630 (three-phase) Modbus RTU electricity meter.
- Quantity needed: 1 (optional peripheral)
- Footprint/package: DIN-rail mount (SDM120: 1-module 18 mm width; SDM630: 4-module 72 mm width).
- Electrical constraints: AC mains voltage: 230 V AC nominal (SDM120) or 230/400 V AC (SDM630); RS485 Modbus RTU interface configured to 9600 baud, 8 data bits, 1 stop bit, no parity, Slave ID set to "002".
- Substitution latitude: The Modbus readout routines are tailored specifically to the Eastron SDM120 and SDM630 register addresses. Alternative meters cannot be used over Modbus without modifying the source code, though other pulse meters can be connected via the S0 interface instead.
- Control role: Front-panel navigation buttons used during commissioning to configure slave ID
002and 9600 baud. - Sourcing plan: distributor lookup: Eastron SDM120 Modbus / Eastron SDM630 Modbus
S0 Pulse Electricity Meter (Optional Alternative to Modbus Meter)
- Identity: Electricity energy meter equipped with an S0 pulse output interface.
- Quantity needed: 1 (optional peripheral)
- Footprint/package: DIN-rail mount energy meter.
- Electrical constraints: S0 pulse output must be an open-collector / dry-contact interface that switches directly to GND. The sources explicitly warn: do NOT connect 3.3 V or 5 V to this interface. S0+ connects to ESP GPIO0 (D3) and S0- connects to GND.
- Substitution latitude: Any standard DIN-rail electricity meter with a passive S0 transistor/optocoupler output capable of sinking the internal/external pull-up current to GND.
- Control role: None during operation.
- Sourcing plan: retail shopping search: "DIN rail kWh meter S0 pulse output"
RFID Reader Module (Optional)
- Identity: RC522 RFID reader/writer module (based on NXP MFRC522 IC).
- Quantity needed: 1 (optional peripheral)
- Footprint/package: PCB module with integrated PCB trace antenna and 8-pin 2.54 mm single-row header (pins used: 3.3V, GND, RST, MISO, MOSI, SCK, SDA/SS).
- Electrical constraints: Supply voltage: 3.3 V DC (strictly 3.3 V; 5 V will damage the MFRC522 IC); SPI bus communication with ESP8266 (SCK = GPIO14, MISO = GPIO12, MOSI = GPIO13, SDA = GPIO15).
- Substitution latitude: Must be an MFRC522-based module. The documentation explicitly states that PN532 and Wiegand-based RFID readers are not supported.
- Control role: User-facing proximity card reader (tap card against module to activate/deactivate charging).
- Sourcing plan: retail shopping search: "RC522 RFID reader module 13.56 MHz SPI"
RFID Media / Transponders (Optional)
- Identity: Mifare Classic 1KB RFID cards, tags, or keyfobs (ISO/IEC 14443 Type A PICC, 13.56 MHz).
- Quantity needed: 1 or more (one per authorized user).
- Footprint/package: Standard ISO card (CR80) or plastic teardrop/round keyfob.
- Electrical constraints: Passive 13.56 MHz RF transponder with 1 KB EEPROM storage; supports ISO 14443A protocol.
- Substitution latitude: Must be Mifare Classic 1KB (13.56 MHz). 125 kHz tags (EM4100) or high-security NFC cards (DESFire, Ultralight) will not work with the existing firmware code base.
- Control role: Handheld credential operated by the user.
- Sourcing plan: retail shopping search: "Mifare Classic 1K RFID 13.56MHz key fob tag"
Pushbutton Switch (Optional)
- Identity: Momentary tactile pushbutton switch, normally open (SPST-NO).
- Quantity needed: 1 (optional peripheral)
- Footprint/package: Panel-mount pushbutton (12 mm, 16 mm, or 19 mm round panel cutout) or PCB tactile switch.
- Electrical constraints: Dry contact switching to GND (connects ESP8266 GPIO2 / D4 to GND); handles logic-level currents (< 1 mA at 3.3 V).
- Substitution latitude: Any momentary normally open push switch.
- Control role: Student/user operated actuator to start/stop the charging process. Actuator style must be momentary pushbutton (not latching toggle/rocker).
- Sourcing plan: retail shopping search: "momentary panel mount pushbutton normally open"
Status Indicator LED (Optional)
- Identity: Standard discrete light emitting diode, 3 mm or 5 mm (with appropriate current-limiting series resistor, e.g. 330 Ω to 1 kΩ, unless integrated).
- Quantity needed: 1 (optional peripheral)
- Footprint/package: Through-hole radial LED or panel-mount indicator.
- Electrical constraints: Driven by GPIO16 (D0) relative to GND. Sinks/sources at 3.3 V logic levels; continuous current must not exceed 12 mA.
- Substitution latitude: Any standard 3 mm or 5 mm indicator LED (green, blue, red, or amber) with a suitable series resistor to limit current.
- Control role: Passive visual indicator.
- Sourcing plan: distributor lookup (representative example — sources give spec only): Lite-On LTL-4223
Wiring and Interconnect Hardware
- Identity: Jumper wires / hookup wire (22–26 AWG) with DuPont headers (female-to-female and female-to-male) and/or stripped wire leads for terminal block clamping.
- Quantity needed: 1 set (approx. 10 to 20 individual conductors).
- Footprint/package: 0.1" (2.54 mm) female/male crimp connectors and bare-wire terminals.
- Electrical constraints: Low-voltage signal and power lines (< 1 A, 5 V / 3.3 V).
- Substitution latitude: Any standard electronic prototyping hookup wire.
- Control role: None.
- Sourcing plan: retail shopping search: "Dupont jumper wire ribbon cable 2.54mm"
Software and network dependencies
Firmware and Build Tools
PlatformIO Core / Build Environment:
- Name: PlatformIO
- Environment
base_1_045:- Platform:
espressif32@3.0.0(pinned inplatformio.ini) - Framework:
arduino - Board target:
base_1_045(custom board manifest not present in workspace) - Partitions manifest:
default_8MB.csv(referenced inplatformio.ini, not present in workspace) - CPU frequency:
160000000L(160 MHz) - Build flags/options: upload speed 921600; ignored libraries:
ESPAsyncUDP,EspSoftwareSerial
- Platform:
- Environment
d1_mini:- Platform:
espressif8266(unpinned inplatformio.ini) - Framework:
arduino - Board target:
d1_mini - Build flags:
-D PIO_FRAMEWORK_ARDUINO_LWIP2_LOW_MEMORY -Wl,-Map,output.map(pinned inplatformio.ini) - Ignored libraries:
U8g2
- Platform:
- Check plan: support-status lookup: espressif32 3.0.0; support-status lookup: espressif8266 unpinned
Arduino IDE Build Toolchain (Alternative to PlatformIO):
- Name: Arduino IDE
- Version: not stated ("Please install Arduino IDE if you didn't already")
- Core: ESP8266 Core for Arduino IDE (repository:
https://github.com/esp8266/Arduino) - Version: ≥ v2.4.0 (stated in documentation
README.md) - Plugin: ESP8266FS Uploader (
arduino-esp8266fs-pluginfromhttps://github.com/esp8266/arduino-esp8266fs-plugin) - Check plan: support-status lookup: ESP8266 Core for Arduino 2.4.0
Software Libraries and Frameworks
miguelbalboa/MFRC522:
- Source: PlatformIO Registry /
https://github.com/miguelbalboa/rfid - Version: unpinned in
platformio.ini(both environments) andREADME.md - Check plan: not checkable: unpinned version and no advisory database for Arduino libraries
- Source: PlatformIO Registry /
bblanchon/ArduinoJson:
- Source: PlatformIO Registry /
https://github.com/bblanchon/ArduinoJson - Version: unpinned in
platformio.ini(both environments) andREADME.md - Note: ArduinoJson underwent major breaking API changes between v5, v6, and v7; lack of pinning poses a significant build reproducibility risk.
- Check plan: not checkable: unpinned version
- Source: PlatformIO Registry /
emelianov/modbus-esp8266:
- Source: PlatformIO Registry
- Version: unpinned in
platformio.ini(used inbase_1_045andd1_mini) - Check plan: not checkable: unpinned version
plerup/EspSoftwareSerial:
- Source: PlatformIO Registry /
https://github.com/plerup/espsoftwareserial - Version:
6.9.0(pinned inplatformio.iniunderenv:d1_mini); unpinned inREADME.md - Check plan: vulnerability lookup: plerup/EspSoftwareSerial / platformio / 6.9.0
- Source: PlatformIO Registry /
CurtRod/ModbusMaster (Forked):
- Source:
https://github.com/CurtRod/ModbusMaster - Version: not stated (unpinned git repository master branch)
- Note: The documentation states that this specific fork must be used instead of the upstream 4-20ma/ModbusMaster library, because the standard library triggers an ESP hardware watchdog timer (WDT) reset on Modbus timeout.
- Check plan: not checkable: unpinned git fork
- Source:
ESPAsyncWebServer:
- Source:
https://github.com/me-no-dev/ESPAsyncWebServer - Version: not stated (unpinned in
README.md) - Check plan: not checkable: unpinned version
- Source:
ESPAsyncTCP:
- Source:
https://github.com/me-no-dev/ESPAsyncTCP - Version: not stated (unpinned in
README.md, mandatory dependency for ESPAsyncWebServer) - Check plan: not checkable: unpinned version
- Source:
ESPAsyncUDP:
- Source:
https://github.com/me-no-dev/ESPAsyncUDP - Version: not stated (unpinned in
README.md; ignored on ESP32 inplatformio.ini) - Check plan: not checkable: unpinned version
- Source:
NTPClientLib:
- Source:
https://github.com/gmag11/NtpClient/ - Version: not stated (unpinned in
README.md) - Check plan: not checkable: unpinned version
- Source:
TimeLib:
- Source:
https://github.com/PaulStoffregen/Time - Version: not stated (unpinned in
README.md, mandatory dependency for NTPClientLib) - Check plan: not checkable: unpinned version
- Source:
ESP8266Ping:
- Source:
https://github.com/dancol90/ESP8266Ping - Version: not stated (unpinned in
README.md) - Check plan: not checkable: unpinned version
- Source:
Flashing Utility and Precompiled Binaries
- Name: Windows flashing script (
flash.bat) and compiled firmware binaries - Source:
https://www.evse-wifi.de/download/ - Version: not stated
- Check plan: not checkable: closed vendor download page
Network Exposure and Communication Protocols
- Wi-Fi Connectivity:
- SoftAP Mode: On initial boot or configuration reset, sets up an unencrypted 802.11 b/g/n Wi-Fi Access Point with SSID
evse-wifi. No Wi-Fi password is required (open network). - Station (Client) Mode: Connects to local 2.4 GHz Wi-Fi WLAN via credentials supplied through the Web UI.
- SoftAP Mode: On initial boot or configuration reset, sets up an unencrypted 802.11 b/g/n Wi-Fi Access Point with SSID
- IP Addressing:
- Default AP IP:
192.168.4.1
- Default AP IP:
- Listening Ports and Services:
- Port 80 (HTTP): Serves web management graphical interface and REST HTTP API.
- Default Web Interface Credentials: username/password is
adminadmin(documented inREADME.md). - WebSocket: Integrated into the async web server for push updates.
- NTP Client: Sends outbound UDP packets on port 123 to synchronize charge session timestamps.
- HTTP REST API Endpoints (all unauthenticated by default or authenticated via web session):
GET /getParameters— Returns JSON object with vehicle status, EVSE status, max current, actual current, active power, duration, energy (kWh), mileage, meter reading, and 3-phase currents (currentP1,currentP2,currentP3).GET /getLog— Returns JSON array of recent charging sessions with RFID UID, username, duration, energy, and calculated price.GET /setCurrent?current=<amps>— Sets EVSE maximum charge current (e.g.?current=16).GET /setStatus?active=<true|false>— Engages or disengages EVSE charging contactor state.GET /doReboot?reboot=true— Triggers a software reset viaESP.restart().
External Downloads and URLs
https://www.evse-wifi.de/— Vendor documentation, news, firmware binaries, and online shop.https://www.evse-wifi.de/download/— Download page for compiled.binfirmware andflash.batflasher.https://github.com/CurtRod/SimpleEVSE-WiFi— Upstream project repository containing showcase images and issue tracker.https://github.com/CurtRod/ModbusMaster— Required forked Modbus RTU library containing the WDT fix.https://github.com/esp8266/arduino-esp8266fs-plugin— SPIFFS file system uploader plugin for Arduino IDE.
Fabrication and Board Constraints
- Custom PCB / Layout Files: None present in the workspace. The design uses standard off-the-shelf breakout modules (WeMos D1 mini / NodeMCU, RC522 reader, TTL-RS485 converter) wired point-to-point via DuPont jumper wires directly to the screw terminals of the EVSE Wallbox/DIN controller.
- Custom Hardware Board Target: The platform configuration references a board definition
board = base_1_045and custom partition tabledefault_8MB.csvfor the ESP32 variant; these files are not included in the repository and represent proprietary vendor board support definitions.