Fennec started because every SI4732 radio project I looked at did the exact same thing. Small screen, a dial, maybe an encoder. Fine radios. All of them stopping at "tune and listen."
I wanted mine to actually do something with what it hears. Pull pictures out of shortwave. Read Morse off the air. Point me toward a transmitter using nothing but a signal meter and my own two feet. This post is the complete rundown. Hardware, flashing, every tool, and what's still coming.
🔩 The Hardware
At the center is the SI4732-A10, talking to the main chip over I2C. It covers long wave and medium wave from 153kHz up through 27.9MHz on AM, and 64 to 108MHz on FM. That's the whole broadcast world, plus amateur shortwave stretches and CB. It doesn't do airband, weather radio, VHF, UHF, or anything above 28MHz, that's outside what this chip was built for.
Running everything is an ESP32-S3, handling the UI, all five decoder tools, and the web server, all at once.
- ILI9341 TFT with XPT2046 touch, run in portrait, touch wired on its own separate SPI bus so it never fights the display for bandwidth
- PAM8403 class-D amp on the audio path, shutdown pin fully firmware-controlled: off at boot, off in every menu that doesn't need sound
- MEMS microphone, I2S, 16kHz sampled, lets two of the tools listen to something other than the tuner
- 3 WS2812 LEDs, locked to one warm orange hue as a status indicator, no matter what color data gets sent
- TP4056 for lithium battery charging, this is what makes Fennec portable in the first place
- LF33 linear regulator, steps 5V down to 3.3V for the rest of the board, whether that 5V comes from USB or the battery
- 3-way tactile switch, physical backup input if the touchscreen isn't available
- CP2102 USB to serial, for flashing and debugging over a plain USB cable
The full GPIO map is in the repo. One pin worth calling out specifically: GPIO1 taps the SI4732's audio output straight into the ADC. Without that wired in, RADIO still works fine, but SSTV and Morse have nothing to decode from the tuner, you'd have to fall back to the mic instead.

⚡ Flashing the Firmware
Install Arduino IDE, then add the ESP32 boards package, version 2.0.10 specifically. This project does not compile on the 3.x core.
Set the board to ESP32S3 Dev Module. Install three libraries: PU2CLR SI4735, TFT_eSPI, and XPT2046_Touchscreen.
One step that's easy to miss: copy User_Setup.h from the repo's docs folder into your TFT_eSPI library folder, replacing the default. Skip this and the display won't work.
Open the sketch, the folder needs to be named exactly Fennec or Arduino IDE won't find it, select your board, upload. If you don't have the radio hardware wired up yet, there's a simulate-radio flag in Config.h that brings up the full interface with no SI4732 connected at all.
📻 Radio
Straightforward AM, FM, and shortwave listening. Band tabs at the top, with shortcuts underneath for specific ranges: full shortwave span, Japan FM, the 49-meter broadcast band. SEEK hunts the next station, MUTE cuts the speaker, RDS pulls station name and program info where it's broadcast on FM.
Close it and come back tomorrow, band, frequency, and volume are all saved to flash.

🖼️ SSTV
Shortwave still carries images. Slow-scan television, a tone that draws a picture line by line.
Open SSTV, and Fennec switches to USB or LSB, listens for the VIS header that identifies the format, and starts drawing. Supports Martin, Scottie, and Robot 36, leave it on AUTO or lock a mode if you already know what's incoming.
Feed it from the tuner, or switch to the mic and hold a speaker up to it. In mic mode the amp mutes automatically so Fennec isn't decoding its own output. There's a BFO nudge if the picture comes in wrong, and the decoded image sticks around even if you back out of the screen.

📟 Morse
Listens for CW and prints what it hears as text. Set the pitch to match...
Read more »
CiferTech