Supercon 2022: Mooneer Salem Goes Ham With An ESP32

After being licensed as a ham radio operator since the early 2000s, you tend to start thinking about combining your love for the radio with other talents. In a 20-minute talk at Hackaday Supercon 2022, [Mooneer Salem] tells the story of one such passion project that combined software and radio to miniaturize a digital ham radio modulator.

[Mooneer] works as a software developer and contributes to a project called FreeDV (free digital voice), a digital voice mode for HF radio. FreeDV first compresses the digital audio stream, then converts it into a modulation scheme sent out over a radio. The appeal is that this can be understandable down to very low signal-to-noise ratios and includes metadata and all the other niceties that digital signals bring.

Traditionally, this has required a computer to compress the audio and modulate the signal in addition to two sound cards. One card processes the audio in and out of your headset, and another for the audio coming in and out of the radio. [David Rowe] and [Rick Barnich] developed the SM1000, a portable FreeDV adapter based around the STM32F4 microcontroller. However, flash space was running low, and the cost was more than they wanted.

[Mooneer] loved the open firmware and open hardware model of the SM1000 and wanted to revisit the idea. Make it easier to use, add newer features, and, most importantly, reduce costs. The ESP32 was an obvious choice as it was cheap and ticked all his boxes. He ultimately settled on an ESP32-S3 as the standard ESP32 didn’t quite have the performance needed to run in real-time. A TLV320 dev board was expensive, so he rolled his own for the experience, an attitude many of us can relate to.

After days of dealing with I2S woes, he respun the board to try and address an audio issue where only 60 Hz noise could be heard. Assuming it was EMI problems, he rerouted traces, tuned components, and added more vias. However, even after the respin, the issue was still there, and he realized the TLV320 had a loopback mode, making it a software problem after all.

The result is the ezDV which has all its code and board files on GitHub under a TAPR Open Hardware License and the GNUv3 license. It supports three of the five modes of FreeDV (it doesn’t support 2020 or 700C). Not supporting 2020 makes sense as 2020 uses an LPCNet neural network to turn 8 kHz of audio into just 1600 Hz. This requires a rather beefy computer that has AVX support.

[Mooneer] presents a beautiful story about the journey to create something well-documented and reproducible. If you’re looking into digital radio, maybe this is an excellent place to start.

(Editors note: corrected the spelling of David Rowe and FreeDB, thank you [Drone]).

 

10 thoughts on “Supercon 2022: Mooneer Salem Goes Ham With An ESP32

  1. @Matthew Carlson, two small but significant typos in paragraph-3. Excerpting the original: “[David Roew] and [Rick Barnich] developed the SM1000, a portable FreeDB adapter based around the STM32F4 microcontroller.”

    A. I believe [David Roew] should be spelled [David Rowe]; or precisely [David Grant Rowe], one of the developers of Codec 2 [1][2] and FreeDV [3] at Rowetel [4].

    B. FreeDB should be spelled FreeDV.[3]

    * References:

    1. Codec 2 – Overview

    https://en.wikipedia.org/wiki/Codec_2#Overview

    2. Codec 2 – Rowetel

    https://www.rowetel.com/?page_id=452

    3. FreeDV

    https://freedv.org/

    4. Rowetel

    https://www.rowetel.com/

  2. I used the SGTL5000 codec with CODEC2 (https://github.com/LieBtrau/digital-walkie-talkie/tree/master/firmware/tests/audio/sgtl5000-codec2-decoding_newI2S).
    The SGTL5000 IC is slightly more expensive than the TLV320, but there’s a cheap (€16) breakout board (Teensy Audio Adaptor board : DEV-15421) and Paul Stoffregen’s accompanying library works out of the box.
    Anyway, in the future I would use the ESP32-A1S module, which has a built-in audio codec and is even cheaper. There’s also a cheap development board for it.
    I have no issues with running Codec2-1200bps real-time on ESP32 (https://github.com/LieBtrau/digital-walkie-talkie/tree/master/firmware/tests/audio/esp32-codec2/lib/Codec2) : 40ms of audio takes 16.8ms to encode and 15.2ms to decode.
    I haven’t focused on more computationally expensive lower bitrate modes (e.g. 700bps) because I found out (during tests running codec2 on my linux pc) that the produced audio is nearly unintelligible, so useless for a practical application.

Leave a Reply

Please be kind and respectful to help make the comments section excellent. (Comment Policy)

This site uses Akismet to reduce spam. Learn how your comment data is processed.