WIFILTWeb interface for Icom LAN Transceivers

Firmware installer — version 20260913  •  GitHub


The whole road, before you start

Installing is step zero, and it is the only step that differs between the three platforms below. Everything after it happens on the device's own SETUP page, in this order — each step only needs what the device cannot work out for itself.

  1. 0 Install WIFILT
  2. 1 Network
  3. 2 Identity
  4. 3 Radio
  5. 4 Transmit check
  6. 5 This browser

Where will it run?

One source, several forms. Open the one that is yours — the others stay folded away.

A radio already on your network — an IC-705, IC-7610 or IC-7300 MK2 with Network Control switched on — needs no hardware at all. The program on your computer reaches it over IP, and it is the same software as the firmware, version 20260913.

The interface board adds what a computer cannot do: the CI-V serial bus, for radios that have no network port; FSK/RTTY keying and the band decoder on its GPIO pins; the switched 13.8 V output and the status LED. And it runs on its own, day and night, with no computer switched on.

ESP32 interface board flash over USB • runs on its own 24/7 • CI-V, keying, band decoder

Required hardware

Processor
Original Espressif ESP32 (Xtensa LX6), compatible with the ESP32 Dev Module target.
Flash memory
4 MB minimum, configured for DIO mode at 80 MHz.
RAM
Standard ESP32 internal SRAM (520 KB). External PSRAM is not required.
Flash layout
No OTA: 1.375 MB application and 2.56 MB LittleFS web assets, plus a separate 128 kB configuration partition the installer never writes.

This firmware image targets the original ESP32. It is not compatible with ESP32-C3, ESP32-S2, ESP32-S3, or other ESP32 chip families.

Flash firmware via USB

Open this page in Google Chrome or Microsoft Edge (Web Serial is not supported in Firefox or Safari). Connect the ESP32 to your computer via USB.

Is this a new device, or one that is already working? This page cannot tell, and the answer decides one checkbox further on.

Answer the question above to continue.

Reach the board after flashing

Updated a working device without erasing it? It keeps its WiFi credentials, rejoins your network on its own and is back at the same address as before. Nothing below applies — the steps are for a device that has no WiFi yet: brand new, or just erased.

  1. Join the device's own WiFi. On its first boot it creates the network WIFILT-AP, password remoteqth. Scan this with a phone to join without typing either:

    If the camera app does not offer to join, pick WIFILT-AP from the WiFi list and type the password.

  2. Open http://192.168.4.1. The setup page appears; some phones open it by themselves.
  3. Enter your WiFi network and password, then save. The device joins your network while its hotspot is still running and shows the address it was given, with a QR code. Scan or write it down: the hotspot closes when it restarts.
  4. Reconnect your phone or computer to your normal WiFi and open that address. From there, connecting the radio is the same on every platform.

Lost the address? Try http://wifilt.local/, look in your router's DHCP client list, or open the serial console above at 9600 baud and press Reset Device to read it from the boot log.

The button above flashes: bootloader, partition table, boot_app0, firmware, web assets. It does not write the configuration partition at 0x170000, which is what lets your settings survive an update.

For manual flashing there is wifilt-20260913-full.bin at offset 0x0 with esptool.py. That one erases everything — it is a whole-chip image, so it overwrites the WiFi credentials in NVS and the configuration partition as well. Use it to recover a board that will not boot, not to update a working one.

M5Stack Atom Lite flash over USB-C • runs on its own 24/7 • bare module, same web UI

Required hardware

Board
M5Stack Atom Lite (ESP32-PICO-D4).
Flash memory
4 MB, built into the PICO-D4 module — nothing to configure.
RAM
Standard ESP32 internal SRAM (520 KB). External PSRAM is not required.
Flash layout
Identical to the box: No OTA, 1.375 MB application and 2.56 MB LittleFS web assets, plus a separate 128 kB configuration partition the installer never writes.

This image targets the M5Stack Atom Lite (ESP32-PICO-D4) specifically — the only Atom variant this project has tested. The Atom S3 family (AtomS3, AtomS3 Lite/U) uses a different chip (ESP32-S3) and cannot run it; other classic Atom boards (Matrix, Echo, U) share the same PICO-D4 but have not been tried. It runs as a bare module: no CI-V serial port, FSK/RTTY keying, band decoder outputs or switched 13.8 V — only the built-in SK6812 RGB status LED.

Flash firmware via USB

Open this page in Google Chrome or Microsoft Edge (Web Serial is not supported in Firefox or Safari). Connect the Atom Lite to your computer via its USB-C socket.

Is this a new device, or one that is already working? This page cannot tell, and the answer decides one checkbox further on.

Answer the question above to continue.

Reach the board after flashing

Updated a working device without erasing it? It keeps its WiFi credentials, rejoins your network on its own and is back at the same address as before. Nothing below applies — the steps are for a device that has no WiFi yet: brand new, or just erased.

  1. Join the device's own WiFi. On its first boot it creates the network WIFILT-AP, password remoteqth. Scan this with a phone to join without typing either:

    If the camera app does not offer to join, pick WIFILT-AP from the WiFi list and type the password.

  2. Open http://192.168.4.1. The setup page appears; some phones open it by themselves.
  3. Enter your WiFi network and password, then save. The device joins your network while its hotspot is still running and shows the address it was given, with a QR code. Scan or write it down: the hotspot closes when it restarts.
  4. Reconnect your phone or computer to your normal WiFi and open that address. From there, connecting the radio is the same on every platform.

Lost the address? Try http://wifilt.local/, look in your router's DHCP client list, or open the serial console above at 9600 baud and press Reset Device to read it from the boot log.

The button above flashes: bootloader, partition table, boot_app0, firmware, web assets. It does not write the configuration partition at 0x170000, which is what lets your settings survive an update.

For manual flashing there is wifilt-20260913-m5atom-full.bin at offset 0x0 with esptool.py. That one erases everything — it is a whole-chip image, so it overwrites the WiFi credentials in NVS and the configuration partition as well. Use it to recover a board that will not boot, not to update a working one.

Linux PC radio on the network • no hardware • tar.gz, 3.3 MB

wifilt-20260913-linux-x86_64.tar.gz  •  Linux x86-64, 3.3 MB  •  SHA256SUMS

tar xzf wifilt-20260913-linux-x86_64.tar.gz
cd wifilt-linux-x86_64
sudo ./install.sh

The installer copies the program to /opt/wifilt and grants it permission to use port 80. That permission is not optional: ports 80, 82 and 83 are all privileged, and port 83 carries the audio, so without it JS8, RTTY, WSPR and Mercury cannot work. It installs a service but deliberately does not enable it — starting a transmitter's control interface at boot should be your decision.

Then start it, as yourself — not with sudo:

/opt/wifilt/start-wifilt.sh

That opens the browser for you. If you would rather have the service: sudo systemctl start wifilt for this boot, or sudo systemctl enable --now wifilt for every boot. To run it without installing at all: sudo ./wifilt from the unpacked folder.

This download also carries local-trx — the bridge that lets WIFILT run a transceiver which is not a networked Icom (a Kenwood, a Yaesu, an older Icom) from this computer's sound card and two USB serial adapters. It is installed alongside and starts switched off, doing nothing at all until its own setup page is used. See Not a networked Icom? below.

Raspberry Pi (64-bit) radio on the network • no hardware • tar.gz, 7.6 MB

wifilt-20260913-linux-arm64.tar.gz  •  Linux ARM64 (aarch64), 7.6 MB  •  SHA256SUMS

Needs a 64-bit Raspberry Pi OS (aarch64) — Pi 3, 4, 5 or newer. The 32-bit (armhf) Raspberry Pi OS cannot run this build.

tar xzf wifilt-20260913-linux-arm64.tar.gz
cd wifilt-linux-arm64
sudo ./install.sh

The installer copies the program to /opt/wifilt and grants it permission to use port 80. That permission is not optional: ports 80, 82 and 83 are all privileged, and port 83 carries the audio, so without it JS8, RTTY, WSPR and Mercury cannot work. It installs a service but deliberately does not enable it — starting a transmitter's control interface at boot should be your decision.

Then start it, as yourself — not with sudo:

/opt/wifilt/start-wifilt.sh

That opens the browser for you. If you would rather have the service: sudo systemctl start wifilt for this boot, or sudo systemctl enable --now wifilt for every boot. A Pi left running headless is exactly the case the service is for.

This download also carries local-trx — the bridge that lets WIFILT run a transceiver which is not a networked Icom (a Kenwood, a Yaesu, an older Icom) from this computer's sound card and two USB serial adapters. It is installed alongside and starts switched off, doing nothing at all until its own setup page is used. See Not a networked Icom? below.

Windows PC radio on the network • no hardware • zip, 8.5 MB

wifilt-20260913-windows-x64.zip  •  Windows x64, 8.5 MB  •  SHA256SUMS

Unpack the ZIP anywhere and run start-wifilt.bat — it starts the program and opens the browser. (wifilt.exe on its own works too.) There is nothing to install and no runtime to add. Windows will ask once whether to allow it through the firewall — say yes, or other devices on your network will not reach it. Because the file is not code-signed, SmartScreen may warn on first run; choose More infoRun anyway. Verify the download against SHA256SUMS if you would rather not take that on trust.

This download also carries local-trx — the bridge that lets WIFILT run a transceiver which is not a networked Icom (a Kenwood, a Yaesu, an older Icom) from this computer's sound card and two USB serial adapters. It is installed alongside and starts switched off, doing nothing at all until its own setup page is used. See Not a networked Icom? below.


Connect your radio

Whichever of the four you installed, this part is the same — including the address: http://wifilt.local. That the board and the computer answer to the same name is not a coincidence: your browser stores the QSO log per address, so keeping the name identical is what lets a log started on the board carry on unchanged on a computer.

  1. Switch on Network Control in the radio. In the radio's own menu, set Network Control to ON and invent a network user name and password there.
  2. Open SETUP → Radio and set TRX1 to ICOM-LAN, then enter the radio's address and the user name and password you just invented.
  3. Press Test & identify radio. The radio reports its own model back, and from then on power limits, menu paths and setup guidance follow whichever transceiver actually answered.

The rest of the road above — identity, the transmit check, this browser's own settings — the SETUP page walks you through step by step. It works out on its own what is already done and asks only for what is missing.


Not a networked Icom?

The three steps above assume a transceiver with Network Control of its own. If yours has none — a Kenwood, a Yaesu, an Icom older than the networked models, anything hamlib knows — the desktop downloads carry a second program that stands in for one. local-trx pretends to be a networked Icom and translates each request into whatever this computer is actually wired to. Nothing in WIFILT itself changes; you point it at the bridge exactly as you would at a radio.

You need three connections, and the last two are separate adapters:

  • the computer's sound card, to the rig's audio in and out;
  • a CAT adapter on the rig's control port — frequency, mode, meters;
  • a second serial adapter, its DTR and RTS lines to the rig's KEY and PTT jacks. CW, RTTY and PTT always go this way, never over CAT: not every CAT dialect can send Morse, and a key jack works on every rig.
  1. Start both programs. /opt/wifilt/start-wifilt.sh on Linux and Raspberry Pi, start-wifilt.bat on Windows. Both pages open by themselves.
  2. Set up local-trx on http://localhost:8765. It ships opening no port, no serial adapter and no audio device at all. The page asks for the audio devices, the CAT port and rig model, and the keying port with its DTR/RTS assignment — each with a test button beside it, so you can prove the wiring before going on the air. Switch it from Configure to Run and press Save; saving restarts local-trx itself, because nothing is applied while it runs.
  3. Point WIFILT at it. In SETUP → Radio, set TRX1 to ICOM-LAN and tick LOCAL-TRX. On this same computer that fills in the address and the rest for you; if WIFILT is on the ESP32 box instead, type this computer's LAN address by hand.

What you give up is only what is reached by model-specific Icom commands — the network MOD-level gain calibration, GPS position, the radio's own waterfall. The logbook, the DX cluster, JS8, RTTY, WSPR, Mercury and the ordinary transmit-gain calibration all work. The full description is SOFTWARE.md § 1.6.