Two things decide which image is correct: which board you are holding (E02SA or E04SD) and what it should do. Getting the board wrong is not just a functional mistake: the E04SD image drives GPIO25/26 as push-pull outputs into the E02SA's input circuit, which can permanently damage the module — reflashing will not undo it. Check it here first.
| Terminal | E02SA | E04SD |
|---|---|---|
| 13 | SDA | J1 |
| 17 | V1+ | DI1+ |
| 24 | A2- | DI4- |
MODEL E02XXXX or
MODEL E04XXXX REV.A. E02SA has one output pair (O+ / O-,
terminals 9-10); E04SD has four (O1–O4, terminals 5-12).This picks the firmware line. Each is built from the same source tree and versions independently; a unit runs exactly one of them, and changing the line changes what the unit is — it is not an update.
Latest is selected by default. Pick an older release here if you need to put a unit back exactly as it shipped. The Changelog tab says what each release changes.
Watch the device's serial output — boot banner, IP address, the 5-second status line. Open this after flashing (the flasher and the monitor can't use the USB port at the same time). Click Disconnect before re-flashing.
Sending this to support? Use Download .txt /
Copy for support — both prepend the browser, the page URL, the exact firmware selected here
and the identified board, and both include what the flasher did. A bare screenshot of the log
rarely carries enough. Reproduce the fault first, then press ↺ Reset device and let it boot
once so the banner (boot: E02 fw=… reset=…) is in the capture.
If the log looks like garbled characters, the baud rate is wrong — disconnect, pick another baud (all our firmware uses 115200), and reconnect.
Use this if the browser flasher can't connect (e.g. some FTDI adapters on
macOS), or for scripting/production. It uses Espressif's esptool and the same
firmware images. Matches the current selection: —.
No Python? Download a standalone esptool binary from
github.com/espressif/esptool/releases
and drop the --chip/command args in the same way.
merged.bin erases the stored configuration. esptool writes it from address 0 padded with 0xFF, so it overwrites NVS at 0x9000 along with everything else — the unit's WiFi, MQTT and register settings are gone and have to be entered again. Use it for a new or blank board. To keep a deployed unit's configuration, flash the individual images below instead: only the listed regions are written and NVS is untouched.
| OS | Port looks like | How to find it |
|---|---|---|
| Windows | COM5 | Device Manager → Ports (COM & LPT) |
| macOS | /dev/cu.usbserial-XXXX | ls /dev/cu.* in Terminal |
| Linux | /dev/ttyUSB0 | ls /dev/ttyUSB* /dev/ttyACM*; add your user to the dialout group (sudo usermod -aG dialout $USER, then re-login) or use sudo |
Save the script next to merged.bin. It checks the file exists, finds
esptool (or falls back to python -m esptool), flashes, and reports success or failure
with hints. It also detects your esptool version and uses the matching option spelling, so it works on
both v4 and v5 with no deprecation warnings.
The commands above use esptool v5 spelling. On the older v4 use underscores
instead (write_flash, --flash_mode, --flash_freq, --flash_size,
default_reset, hard_reset, erase_flash) — or just use the helper script above,
which picks the right spelling for you. Check with esptool version.
Replace <PORT> with your port from step 3. On Windows,
if esptool isn't on PATH use python -m esptool. To also wipe stored config first:
esptool --port <PORT> erase-flash. If it can't connect, hold BOOT (GPIO0)
while starting, or check the USB-UART driver (CP210x / CH340 / FTDI).
Datasheet & user manual for each model (pinout, register map, wiring, troubleshooting; the Timestamp and Edge-MQTT variants have their own sections at the end):
📄 E02SA datasheet 📄 E04SD datasheet
| Line | Pick it when | Talks |
|---|
E02-xxxxxx /
E04-xxxxxx (pass edge12345) → http://192.168.4.1/.
The portal fields differ per line (Modbus on Converter, MQTT on Timestamp / Edge-MQTT).pip install pymodbus zeroconf, then
python3 bench_test.py (auto-discovers via mDNS).Newest release first, per firmware line. Every older version stays flashable, so a unit can always be put back. Run Identify over USB on the Flash tab and this page will mark what is already on your board and what a flash would gain you.