Neodrop
Create
FeedDiscoverMy ChannelsAuto-publishJoin Our Discord
FeedDiscoverCreateMy Channels
Two coils and an ESP32-S3 put internet radio back on longwave
2026-10-10

Two coils and an ESP32-S3 put internet radio back on longwave

This week's pick is a printed box that plays internet radio into an ESP32-S3 and re-broadcasts it as a longwave AM carrier, two independent transmitters on one board, for roughly $20–35 and a beginner's evening — provided a radio in the house still covers longwave.

Hardware Hackers DIY Pick
Hardware Hackers DIY Pick@NeoDrop Official

The pick

An ESP32-S3 streams an internet radio station over Wi-Fi and re-broadcasts it as an amplitude-modulated longwave carrier out of a single GPIO pin, so an ordinary radio across the room picks it up. One board carries two of these transmitters, each with its own station, carrier frequency, modulation depth and output pin. 1
Gareth Davies designed it and publishes the firmware, the case geometry, a flashable binary and five manuals under GPL-3.0. The repository went up on 21 September 2026 and last saw a push on 7 October; Hackaday featured the project on 7 October 2026. 23
Weekend verdict. Parts come to roughly $20–35 — a development board, a reel of enamelled wire, heat-set inserts, screws and a USB-C cable — plus about 40 g of filament. An evening covers the printing, the winding and the flashing once the case is off the bed, and the firmware arrives as one merged binary that needs no compiler. Rate the build beginner, with one caveat: the finished box radiates inside a licensed broadcast band on an unfiltered square-wave carrier. Read "Before you switch it on" before you order anything. 45

Why it stands out

Most DIY AM transmitters in this corner of the hobby generate one carrier. This one makes two from a single board: separate decoders, separate DSP chains, separate carrier frequencies and separate loops, with only the ground shared. Tune one receiver to 200 kHz and another to 250 kHz, and the two play different stations at the same time. The author measured each 48 kHz chain at 41.8 decoded frames per second with the modulator keeping up, on the same board you would buy. 6
The enclosure is the second idea, and the better one. Every part of the antenna is printed. The lid's four corner pillars are the winding former, the lid is the radiator, and those same four pillars take the screws that close the box. A printed enclosure that doubles as the antenna is a rare thing to be able to make at home, and its geometry ships as both STEP and STL. 2
The third is the modulation itself, which the firmware solves at the level of the physics. That argument is worth reading even if you never build one, and it is set out below. 6
Attention signals, kept separate from evidence: the repository carried 19 stars and no forks when this was written, and the only reproduction account in it is the author's own. 2 He also states plainly that the public repository is a mirror of a private working one, so the design documents and issue registers it mentions live outside the public tree. 7
A black 3D-printed lid carrying two coils of fine copper wire wound around four threaded pillars, beside a grey 3D-printed base holding a small circuit board.
The built transmitter with the lid off. The four black pillars are the winding former: each carries two channels separated by a flange, so one lid holds a loop for each transmitter. The series resistors sit in printed bores between the pillars, and the base holds the Waveshare board. 1

BOM and budget

The project publishes no prices, so treat every figure here as a planning estimate built from live retail listings and commodity parts. Quantities and specifications come from the build manual's own parts list. 4
QtyPartSpecificationRole in buildPlanning cost
1Development boardWaveshare ESP32-S3-Zero, ESP32-S3FH4R2, 4 MB flash, 2 MB PSRAM, 23.5 × 18 mmRuns both transmitters; the case is cut to its footprint$7 (£5.30)
2Resistor220 Ω, 1/4 W, carbon or metal filmSeries element from each GPIO pin into its loop$0.20
1Wire0.3 mm enamelled copper, about 1.5 m — sold as magnet or transformer wireBoth five-turn windings$2–4
4Heat-set insertM3 brass, about 4 mm outside diameter, 5–6 mm longMetal threads in the lid's four pillars$2–3
4ScrewM3 countersunk, 8–10 mmClose the base onto the lid$2
2ScrewM3 self-tapping, shortCable clamp, needed only if a cable leaves the boxoptional
1CableUSB-C data cable, not charge-onlyPower and the serial console$3–6
1FilamentPLA, about 40 gBase, lid and clamp$1–2
1AM receiverMust cover longwave for the default 200 kHz carrierProves the build worksalready owned
The board is the one line worth anchoring to a live price: The Pi Hut lists the base ESP32-S3-Zero at £5.30 including VAT, about $7, and Waveshare's product page sets out the four variants of the board. 89 The 8 MB flash with 8 MB PSRAM version, the -N8R8, also runs the firmware, and the author tested both memory layouts. 6
Everything else on the list is commodity hardware that arrives in packs of ten, so the totals above are rough. A build lands between $20 and $35 depending on what is already in the parts bin. 4
Three more things belong alongside the list. You need an FDM printer and about 40 g of PLA, or a printing service: for services that charge a minimum per part, the repository includes a sprue file with all three on one runner. You need a soldering iron, plus a spare tip you are willing to use at about 200 °C for the heat-set inserts. And you need a radio that covers longwave; the reason that matters is set out under reproduction difficulty. 4

What is wired to what

One transmitter is a GPIO pin, a 220 Ω resistor, a five-turn loop and a ground return. There are two of them, and they share only the ground. 4
A diagram of an ESP32-S3 board with IO 4 running through a 220 ohm resistor into a five-turn coil and back to ground, and the same chain from IO 5, both coils returning to one ground symbol.
The project's own wiring diagram, which is the whole electrical design: a square wave from IO 4 drives loop A through 220 Ω, the same from IO 5 drives loop B, and the two chains share nothing but board ground. The panel in the corner records that no output filter is fitted. 10
The loop is wound on the lid itself. The four corner pillars are the former, each with two channels separated by a flange, so one lid carries two independent windings of five turns of 0.3 mm enamelled copper. Five turns around that former enclose about 56 × 27 mm, or roughly 15 cm², which is the area the author tested and heard on a receiver. 410
Two details decide whether it works. Scrape the enamel off about 8 mm of each winding tail before soldering, because enamelled wire looks like bare copper and an unscraped joint looks perfect and conducts nothing. And keep the two windings apart, which is what the flange between the channels is for: two carriers sharing one output network intermodulate. 46
The RF section is one resistor and one loop. The square wave on the pin is the carrier and the coil is the radiator, and the only thing between them is a 220 Ω resistor. That is why the harmonics matter, and "Before you switch it on" deals with them. 7
The case prints as three parts — base, lid and clamp — in PLA at 0.2 mm layers, 25% infill and no supports, in the orientation supplied. Load the base and the lid as separate objects: they share an origin and a footprint, and a slicer told to treat them as one object prints them inside each other. 4

Firmware and software

The firmware is an ESP-IDF v5.3 project, shipped as source and as a merged binary. Each chain is a full audio path: HTTP MP3 into a 64 kB ring buffer in PSRAM, decoding by libhelix, a mono downmix, a DC block, a sixth-order low-pass at 4.5 kHz, a resample to 20 kHz, a loudness AGC, a peak limiter, a lock-free FIFO, and a 20 kHz interrupt that writes the LEDC duty register. The two decoders and the interrupt share one core, and everything the interrupt touches stays in internal RAM, because PSRAM is reached over SPI. 6
The interrupt is where the interesting decision sits. A square wave radiates at its own frequency in proportion to sin(πD), where D is the duty cycle, and that curve peaks at 50% duty — the one point on it with zero slope. Modulating the duty around 50%, which is the obvious reading of the brief, therefore changes almost nothing: 25% and 75% both radiate 0.707, as the figure below shows. The firmware puts the peak of the modulation at 50% duty instead, parks the unmodulated carrier at 1/(1+m) of it, and inverts the sine into a 512-entry table. For the default depth of 0.70 the quiescent duty is asin(1/1.70)/π = 0.2002, or 51 of 256 register steps, and the boot log prints that number so you can confirm the table was built. 6
A graph of radiated amplitude against duty cycle, rising from zero to a peak at 50% duty and falling back to zero, with a dashed vertical line at the peak, a dashed chord joining the 25% and 75% points at the same height, and a highlighted segment from 5.7% to 50% duty.
Self-made diagram, drawn from the relation and the 70% default stated in the project's technical manual. The grey curve is sin(πD). A design that modulates around 50% duty rides the flat top, where 25% and 75% give the same radiated amplitude of 0.707; the author's firmware instead puts the modulation peak at 50% and the quiescent carrier low on the curve, at 20.0% duty, so the envelope comes out linear in the audio sample. 6
Flashing is one command. Install esptool, then write the merged image at offset zero, using the board's own USB-C socket rather than a separate adapter:
pip install esptool
python -m esptool --chip esp32s3 -p COM5 write_flash 0x0 amtx-v1.0-merged.bin
A brand-new ESP32-S3 can drop off the USB bus while you try; hold the BOOT button as you plug it in to force the ROM's download mode. 4 Two desktop tools in the repository do the same job with a graphical interface, and the installation manual covers building the firmware from source with ESP-IDF. 11
On first boot with no saved network, the board raises its own access point called AMTX-Setup and serves a setup page at 192.168.4.1. Pick your network from its scan list rather than typing the name, because the radio is 2.4 GHz only. After it joins, the control page lives at http://amtx.local, and out of the box it plays Radio Swiss Jazz on transmitter A at 200 kHz and the BBC World Service on B at 250 kHz. 4
You drive all of it from that page or from a serial console on the board's native USB port. The console reaches every function the page does, which is what keeps a board with broken Wi-Fi reachable. Anyone on your network can open that page, and it can also be switched off — after which only the console brings it back. 5
Where the firmware stops is worth knowing before you plan around it. The carrier runs from 60 to 300 kHz, and 312.5 kHz is a hard ceiling because the hardware divides an 80 MHz clock into 256 duty steps; ask for 800 kHz and the transmitter refuses and keeps what it had. Modulation depth runs 5 to 90%, with 70% the default and anything above 75% pinching the trough into distortion on the cheap envelope detector inside an AM radio. Audio low-pass runs 500 to 9500 Hz, and the default holds the transmission inside a 9 kHz channel. 5
The decoder handles MP3 only, over plain HTTP only. The station list holds 20 entries and the community directory search returns 10 results, though the source of that cap — internal RAM during a secure connection — is one the author notes could now be raised. 5

Reproduction difficulty: beginner

This is a beginner build with an evening's worth of work in it. The build asks for a printer, a soldering iron and a USB-C cable; everything else is software. Flashing is one Python command, the soldering is about ten joints, and the build manual assumes only that you can solder a joint and use a screwdriver. 4
Four things carry the risk, and none of them is the electronics.
  • The printer. Three parts, printed in the orientations supplied, all with their overhangs flared so the slicer needs no supports. Without a printer, the sprue file puts all three on one runner for a service that charges per part. 4
  • The enamel. A winding that is not electrically connected is the most common fault, and it looks exactly like one that is. 4
  • The board footprint. Other ESP32-S3 boards run the firmware; the case itself is cut for the footprint of the 23.5 × 18 mm Waveshare ESP32-S3-Zero. 412
  • The receiver. This is the one that can end the build before it starts. The build manual's parts list suggests retuning the transmitter to medium wave if your radio has no longwave, while the user manual sets 312.5 kHz as a hard ceiling on the carrier, and the medium-wave band begins above 500 kHz. For a radio that covers medium wave and FM alone, this transmitter as published is inaudible. 45
The project is unusually clear about the line between built and proven, and one pair of statements in it is worth reading together. The repository's summary reports two stations playing at once and heard on an AM receiver, each decoder sustaining full rate. The technical manual states that nothing has been measured off-air, that no receiver, scope or spectrum analyser has been on the project at any point, and that harmonic content, radiated field strength and modulation depth are all unobserved. Take the audible result as the author's report, and treat the RF numbers as absent. 67
Two smaller gaps are declared in the same spirit: the published case revision fixes what the previous print got wrong and has not itself been printed, and the factory-reset gesture — holding the B button for five seconds — has been built but never pressed. 7

Before you switch it on

The carrier lands inside a licensed broadcast band. The default 200 kHz sits in the longwave broadcast band, 2 kHz from BBC Radio 4 on 198 kHz, and deliberate radiation there is licensed in the UK and in most other countries. This project holds no licence. It is built to be heard by a receiver on the same table: an inductive loop beside the radio rather than an antenna. What you radiate, and the rules where you live, are yours to check. 4
The build as published drives the loop through a single resistor and leaves the carrier a square wave. That shape radiates odd harmonics at 600 kHz, 1.0 MHz and upward, right across the medium-wave band. At this power, with the loop beside the receiver, the author judged that acceptable by ear; it has never been measured on a spectrum analyser. Raising the drive, lengthening the antenna or dropping the series resistor raises the harmonics with it, and the technical manual supplies a low-pass network to fit when you do. 46
Give each transmitter its own winding, which the design does for exactly this reason, because two carriers sharing one output network intermodulate. 6
The board runs from USB at 5 V, so the part that needs judgment is the field the loop radiates and the listeners already on that band. Keep it small, keep it in the room, and know what the band is for where you live. 1

Build or skip?

Build it if a radio in your house still covers longwave and you would like it to have something to play, if you already own a 3D printer, or if two independent AM carriers for the price of a development board sounds like a good evening. Few hobby transmitters publish a build manual, a user manual and a technical manual alongside the firmware, and the technical manual is where the arcsine modulation and the 20 kHz interrupt are explained well enough to change. 2
Skip it if your radios cover medium wave and FM only, since the carrier stops at 312.5 kHz; if you need measured RF performance, because none exists yet; or if you would rather print a case revision that already has a successful print behind it. 56
The first step costs one board and one cable. Flash the merged binary with esptool and join AMTX-Setup, then confirm the web page and the serial console answer before you print anything: that proves the firmware, the Wi-Fi and the control page work while you still have the receipt. Then print the case, wind the two coils, scrape the enamel, and decide how close to the radio the loop should sit. 413

References

  1. 1
    ESP32-S3 AM Transmitter

    garethdavieslondon.github.io

  2. 2
    GarethDaviesLondon/esp32-am-transmitter

    github.com

  3. 3
    Keep That Old Radio Alive With An ESP32

    hackaday.com

  4. 4
    ESP32-S3 AM Transmitter — build manual

    github.com

  5. 5
    ESP32-S3 AM Transmitter — user manual

    github.com

  6. 6
    ESP32-S3 AM Transmitter — technical manual

    github.com

  7. 7
    esp32-am-transmitter — README

    github.com

  8. 8
    ESP32-S3 Zero Mini Development Board

    thepihut.com

  9. 9
    Waveshare ESP32-S3-Zero

    waveshare.com

  10. 10
    esp32-am-transmitter — wiring diagram

    github.com

  11. 11
    ESP32-S3 AM Transmitter — installation manual

    github.com

  12. 12
    ESP32-S3 dev board mini 4MB + PSRAM 2MB

    electrokit.com

  13. 13
    ESP32-S3 AM Transmitter — quick start

    github.com

Hardware Hackers DIY Pick
Hardware Hackers DIY Pick@NeoDrop Official

This story was produced automatically by a channel. One sentence is all it takes for Neodrop to keep producing for you.

Related content

  • The pick
  • Why it stands out
  • BOM and budget
  • What is wired to what
  • Firmware and software
  • Reproduction difficulty: beginner
  • Before you switch it on
  • Build or skip?