MMDVM Display by 13MAD86 / Martin - Use at your own risk.

A touchscreen ESP32 dashboard for monitoring an MMDVM hotspot running Pi-Star or WPSD.

This project connects to your hotspot over Wi-Fi and shows live radio activity, last-heard stations, status information, frequencies, signal quality, and basic device stats on a small TFT display.

This software is intended for amateur radio hotspot monitoring and display use.


***** Features *****
- Live and last-heard view for hotspot traffic
- Support for Pi-Star and WPSD
- Touchscreen interface with multiple pages
- Wi-Fi setup fallback with local AP/web configuration
- Theme color, brightness, and screen rotation options
- Screensaver support
- SD card support for config and flag images
- Windows desktop version support
- Windows batch tools for building and flashing
- and many more...


***** Supported hardware / firmware targets *****

Default firmware build targets:
- ESP32-2432S028R ILI9341       Target: CYD_ILI9341      Firmware prefix: esp32-2432S028R-ILI9341
- ESP32-2432S028R ST7789        Target: CYD_ST7789       Firmware prefix: esp32-2432S028R-ST7789
- JC3248W535C                   Target: JC3248W535C      Firmware prefix: esp32s3-JC3248W535C
- WS8048S043C                   Target: WS8048S043C      Firmware prefix: esp32s3-WS8048S043C
- WS8048S070C                   Target: WS8048S070C      Firmware prefix: esp32s3-WS8048S070C
- EC8048S070C                   Target: EC8048S070C      Firmware prefix: esp32s3-EC8048S070C
- EC8048S070B                   Target: EC8048S070B      Firmware prefix: esp32s3-EC8048S070B
- EC8048S070CT                  Target: EC8048S070CT     Firmware prefix: esp32s3-EC8048S070CT
- WSTOUCHLCD28                  Target: WSTOUCHLCD28     Firmware prefix: esp32s3-WSTOUCHLCD28

Optional single build target:
- ESP32-2432S028R ILI9341 V2    Target: CYD_ILI9341_V2   Firmware prefix: esp32-2432S028R-ILI9341-V2

The optional ILI9341 V2 target is not included in the default "build all" list. Build it manually if needed.


***** Recommended Windows project layout *****

The batch files are designed for this portable Arduino IDE 2 layout:

C:\ArduinoIDE\Data\Arduino15
C:\ArduinoIDE\Data\Sketchbook
C:\ArduinoIDE\Data\Lib

Recommended project folder:

C:\ArduinoIDE\Project\MMDVM-Display\content

Inside the content folder:

content\build_firmware.bat
content\flash_firmware.bat
content\esptool.exe
content\Makefile
content\mmdvm-display\mmdvm-display.ino
content\firmware\
content\sdcard\
content\svxlink\

The Arduino CLI is expected from Arduino IDE 2. The batch file will search common locations, including:

C:\ArduinoIDE\resources\app\lib\backend\resources\arduino-cli.exe

If your Arduino CLI is somewhere else, set it before running the build file:

set "ARDUINO_CLI=C:\path\to\arduino-cli.exe"
build_firmware.bat --check


***** Building on Windows *****

Use build_firmware.bat for building only. Flashing is done with the separate flash_firmware.bat file.

Double-click:

build_firmware.bat

Menu:

1) Build firmware for all displays
2) Build Windows desktop version only
3) Build firmware for all displays + desktop
4) Install/update Arduino ESP32 core and libraries
5) Check paths/configuration
0) Exit

First-time setup:

build_firmware.bat --install

Check paths/configuration:

build_firmware.bat --check

Build firmware for all default display targets:

build_firmware.bat --firmware-only

Build Windows desktop version only:

build_firmware.bat --desktop-only

Build firmware and desktop version:

build_firmware.bat --all

Build one display target only:

build_firmware.bat WS8048S070C
build_firmware.bat CYD_ILI9341
build_firmware.bat CYD_ST7789
build_firmware.bat EC8048S070B

Temporary Arduino build folders are created under:

content\_build_work

The script removes temporary build folders after a successful build so the firmware folder stays clean.

Firmware output goes here:

content\firmware

Example output files:

content\firmware\esp32s3-WS8048S070C.bin
content\firmware\esp32s3-WS8048S070C.boot.bin
content\firmware\esp32s3-WS8048S070C.bootloader.bin
content\firmware\esp32s3-WS8048S070C.partitions.bin

For the ESP32-S3 targets, some builds may not generate a .boot.bin file. The flash tool handles this automatically.


***** Windows desktop version build *****

The desktop version is built with MinGW using the Makefile in the content folder.

Default MinGW path used by build_firmware.bat:

C:\devcpp\i686-w64-mingw32\bin

The desktop build is equivalent to:

set PATH=C:\devcpp\i686-w64-mingw32\bin;%PATH%
mingw32-make -f Makefile

If MinGW is installed somewhere else, set MINGW_BIN before running:

set "MINGW_BIN=C:\path\to\i686-w64-mingw32\bin"
build_firmware.bat --desktop-only


***** Flashing on Windows - recommended method *****

Use the separate flash tool:

flash_firmware.bat

Put it in the content folder next to esptool.exe and the firmware folder:

content\flash_firmware.bat
content\esptool.exe
content\firmware\

Double-click:

flash_firmware.bat

Menu:

1) Flash firmware to a display
2) List serial COM ports
3) Check paths and firmware folder
0) Exit

When flashing, the tool will:

1. List detected COM ports.
2. Ask which COM port to use.
3. Ask which display/device you have.
4. Check that the needed .bin files exist in content\firmware.
5. Ask for confirmation.
6. Erase flash and write the selected firmware.

Command-line examples:

flash_firmware.bat --target WS8048S070C --port COM5
flash_firmware.bat --target EC8048S070B --port COM7
flash_firmware.bat CYD_ILI9341 COM5
flash_firmware.bat WS8048S070C COM5

Skip erase-flash if needed:

flash_firmware.bat --target WS8048S070C --port COM5 --no-erase

List COM ports:

flash_firmware.bat --list-ports

Check flash tool paths:

flash_firmware.bat --check

If flashing fails at "Connecting...", hold the BOOT button while connecting or while the flash starts, then release after the connection begins.


***** Manual flashing with esptool.exe on Windows *****

The flash_firmware.bat tool is recommended. These commands are only for manual flashing.

Replace COM7 with the correct serial port for your device.

2432S028R - ILI9341:

esptool.exe --chip esp32 --port COM7 --baud 460800 write-flash -z 0x1000 firmware\esp32-2432S028R-ILI9341.bootloader.bin 0x8000 firmware\esp32-2432S028R-ILI9341.partitions.bin 0xe000 firmware\esp32-2432S028R-ILI9341.boot.bin 0x10000 firmware\esp32-2432S028R-ILI9341.bin

2432S028R - ST7789:

esptool.exe --chip esp32 --port COM7 --baud 460800 write-flash -z 0x1000 firmware\esp32-2432S028R-ST7789.bootloader.bin 0x8000 firmware\esp32-2432S028R-ST7789.partitions.bin 0xe000 firmware\esp32-2432S028R-ST7789.boot.bin 0x10000 firmware\esp32-2432S028R-ST7789.bin

ESP32-S3 display with boot.bin file, example WS8048S070C:

esptool.exe --chip esp32s3 --port COM7 --baud 460800 write-flash -z 0x0000 firmware\esp32s3-WS8048S070C.bootloader.bin 0x8000 firmware\esp32s3-WS8048S070C.partitions.bin 0xe000 firmware\esp32s3-WS8048S070C.boot.bin 0x10000 firmware\esp32s3-WS8048S070C.bin

ESP32-S3 display without boot.bin file, example JC3248W535C:

esptool.exe --chip esp32s3 --port COM7 --baud 460800 write-flash -z 0x0000 firmware\esp32s3-JC3248W535C.bootloader.bin 0x8000 firmware\esp32s3-JC3248W535C.partitions.bin 0x10000 firmware\esp32s3-JC3248W535C.bin

Use the matching firmware prefix for your display:

esp32s3-JC3248W535C
esp32s3-WS8048S043C
esp32s3-WS8048S070C
esp32s3-EC8048S070C
esp32s3-EC8048S070B
esp32s3-EC8048S070CT
esp32s3-WSTOUCHLCD28


***** Flashing with Python / Linux *****

First install esptool:

pip install esptool

On Linux, your device will usually appear as something like /dev/ttyUSB0 or /dev/ttyACM0.

Replace /dev/ttyUSB0 with the correct serial device for your system.

2432S028R - ILI9341:

python -m esptool --chip esp32 --port /dev/ttyUSB0 --baud 460800 write-flash -z 0x1000 firmware/esp32-2432S028R-ILI9341.bootloader.bin 0x8000 firmware/esp32-2432S028R-ILI9341.partitions.bin 0xe000 firmware/esp32-2432S028R-ILI9341.boot.bin 0x10000 firmware/esp32-2432S028R-ILI9341.bin

2432S028R - ST7789:

python -m esptool --chip esp32 --port /dev/ttyUSB0 --baud 460800 write-flash -z 0x1000 firmware/esp32-2432S028R-ST7789.bootloader.bin 0x8000 firmware/esp32-2432S028R-ST7789.partitions.bin 0xe000 firmware/esp32-2432S028R-ST7789.boot.bin 0x10000 firmware/esp32-2432S028R-ST7789.bin

ESP32-S3 display with boot.bin file, example WS8048S070C:

python -m esptool --chip esp32s3 --port /dev/ttyUSB0 --baud 460800 write-flash -z 0x0000 firmware/esp32s3-WS8048S070C.bootloader.bin 0x8000 firmware/esp32s3-WS8048S070C.partitions.bin 0xe000 firmware/esp32s3-WS8048S070C.boot.bin 0x10000 firmware/esp32s3-WS8048S070C.bin

ESP32-S3 display without boot.bin file, example JC3248W535C:

python -m esptool --chip esp32s3 --port /dev/ttyUSB0 --baud 460800 write-flash -z 0x0000 firmware/esp32s3-JC3248W535C.bootloader.bin 0x8000 firmware/esp32s3-JC3248W535C.partitions.bin 0x10000 firmware/esp32s3-JC3248W535C.bin


***** Notes *****

- Use build_firmware.bat only for building.
- Use flash_firmware.bat only for flashing.
- Firmware files must exist in content\firmware before flashing.
- Run build_firmware.bat --install once before the first Arduino CLI build.
- If Arduino CLI cannot find libraries, check C:\ArduinoIDE\Data\Lib and C:\ArduinoIDE\Data\Sketchbook\libraries.
- If Pi-Star SSH support is enabled, the required SSH library must also be available in your Arduino libraries.
- Use at your own risk.
