SkillAgentSearch skills...

HamMessenger

HamMessenger is a portable device that uses a ham radio and the APRS protocol as a medium to send and receive text messages.

Install / Use

/learn @dalethomas81/HamMessenger
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

HamMessenger

Tests
Release Build

Hands on article about HamMessenger in IEEE Spectrum magazine here
Arduino blog post on HamMessenger here
Hackaday blog post on HamMessenger here

HamMessenger is a portable, battery powered device that runs on a microcontroller and interfaces with an inexpensive ham radio to send and receive text messages and provide position updates using the APRS protocol. Messages and position updates sent via HamMessenger can be viewed on sites such as aprs.fi. HamMessenger messages are NOT encrypted!

HamMessenger is intended to be used by licensed ham radio operators. For more information you can check out the ARRL website.

The goal of the HamMessenger project is to create a device that uses ham radio as a medium for sending and receiving text messages. HamMessenger exists also to promote amateur radio, electronics, and programming. The project is currently in a beta prototyping stage but does function quite well.

At the core of the the project is the MicroAPRS modem created by markqvist. The primary controller is an Arduino Mega 2560 with the MicroAPRS Modem running on an Arduino Pro Mini. HamMessenger includes GPS functionality supplied by a Neo-6M GPS radio. For peripherals, an M5Stack CardKB keyboard is used for input and an SSD1106 Oled display for output.

I will add some videos and pictures of the device in action asap. Please feel free to contribute to the project. I am very busy outside of this project so any help is greatly appreciated :)

<table> <tr> <td align="center"> <img src="Media/Screenshots/GUI/log-macos-dark.png" alt="Screenshot 1" width="300px" style="border:1px solid #ccc; border-radius:8px;" /><br/> <sub>MacOS Log Screen</sub> </td> <td align="center"> <img src="Media/Screenshots/GUI/map-macos-dark.png" alt="Screenshot 2" width="300px" style="border:1px solid #ccc; border-radius:8px;" /><br/> <sub>MacOS Map Screen</sub> </td> </tr> </table> <table> <tr> <td align="center"> <img src="Media/Screenshots/GUI/msg-macos-dark.png" alt="Screenshot 1" width="300px" style="border:1px solid #ccc; border-radius:8px;" /><br/> <sub>MacOS Message Screen</sub> </td> <td align="center"> <img src="Media/Screenshots/GUI/cmd-macos-dark.png" alt="Screenshot 2" width="300px" style="border:1px solid #ccc; border-radius:8px;" /><br/> <sub>MacOS Commands Example</sub> </td> </tr> </table> <table> <tr> <td align="center"> <img src="https://github.com/dalethomas81/HamMessenger/blob/master/Media/Table-colors.jpg" alt="Screenshot 1" width="300px" style="border:1px solid #ccc; border-radius:8px;" /><br/> <sub>Full Enclosure</sub> </td> <td align="center"> <img src="https://github.com/dalethomas81/HamMessenger/blob/master/Media/Board-v1/all-together-layout.jpeg" alt="Screenshot 2" width="300px" style="border:1px solid #ccc; border-radius:8px;" /><br/> <sub>Component Layout</sub> </td> <td align="center"> <img src="https://github.com/dalethomas81/HamMessenger/blob/master/Media/CAD/Enclosure2.jpeg" alt="Screenshot 2" width="300px" style="border:1px solid #ccc; border-radius:8px;" /><br/> <sub>CAD Isometric</sub> </td> </tr> </table>

Operation

Full instructions on how to operate HamMessenger will go here. For now, just a couple notes :)

HamMessenger will beacon your location and comment according to the 'Beacon' settings in APRS Settings.

  • Beacon Distance is the distance in miles that will trigger a beacon.
  • Beacon Idle Time is the time in milliseconds that the station must be in the same location after having moved from the last beacon location before a beacon will be sent.
  • Position Tolerance under GPS settings is the +/- value that will trigger a location update.

To send a direct message to a station, select Messages on the HOME screen and press Enter on the keyboard. This will open the NEW MESSAGE screen.

  • Message Text is the message that will be sent.
  • Recipient Callsign is the callsign of the station that will recieve the message. Example 'NOCALL-ID'
  • Recipient SSID is the ID of the station that will recieve the message. Example 'NOCALL-ID'

Screen navigation information can be found here.

Radio setup instructions can be found here.

Serial interface information can be found here.

TODO

hardware:

  • improve enclosure design

software:

  • add ability to program the radio once connected for 'plug-n-play' experience (is this possible?)
  • add feature to be selective about message acknowledgments. currently any acknowlegment (from a second conversation) will reset the messaging sequencer.

Libraries

Here are links to the non-standard libraries that I am using for this project. All other libraries are standard and can be installed using the library manager built into the Arduino IDE.

  • https://github.com/wonho-maker/Adafruit_SH1106
  • https://github.com/mikalhart/TinyGPSPlus
  • https://github.com/adafruit/Adafruit-GFX-Library
  • https://github.com/Xander-Electronics/Base64

Compilation

The easiest way to compile HamMessenger is to use the Ardunio IDE. After all libraries are installed you can use the Verify button to compile or the Upload button to compile and write the binary to the main controller M1.

The Arduino source code for HamMessenger can be found here.

The modem controller does not need to be compiled as the binary files are already made available here.

You can use AVRDude to write the binary to the modem controller. Instructions on how to do that will be coming soon. In the meantime, if you already know how to install and use AVRDude then feel free to make use of the batch file I created and an FTDI serial cable to write to the modem.

Parts

Find BOM information on parts here
Find Drawing information on parts here
Find Vendor information on parts here

Part Specs

Arduino:
https://gallery.autodesk.com/fusion360/projects/arduino-mega-2560-r3

Keyboard:
https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/CARDKB

OLED Display:
https://grabcad.com/library/0-96-oled-display-4-pin-1
https://grabcad.com/library/ecran-oled-1-3-1

Modem:
https://github.com/markqvist/MicroAPRS
https://github.com/markqvist/MicroAPRS/blob/master/precompiled/microaprs-5v-ss-latest.hex
https://github.com/markqvist/MicroAPRS/blob/master/documentation/Hardware%20Schematic.pdf
https://unsigned.io/shop
https://unsigned.io/product/micromodem-r23b

GPS:
https://grabcad.com/library/gps-module-ublox_neo6mv2-1
https://grabcad.com/library/ecran-oled-1-3-1

Grove Connector:
https://grabcad.com/library/grove-connectors-stand-and-flat-male-plugs-1/details?folder_id=2820551

Battery:
Panasonic 18650 - don't have a link but you can get them on eBay or Amazon

Updates

31-MAY-2025: Major updates!

I have made some major updates to the board (RF filtering for the PTT), to the enclosure, and to the firmware (many improvements to the display including a dedicated "New Message" display). Additionally, I have created a companion GUI app that you can use to connect HamMessenger to your PC.

I have ordered parts to begin building 3 new HamMessengers and will begin building them next week. The purpose is to create some instructional videos and documentation to help support anyone that wants to build one themselves. I also plan to donate these builds to my local Ham club.

There is now a new Build Instructions folder that I will use to put the tutorial references and documentation.

08-SEP-2021: Troubleshooting freezing

There is an issue where during transmit the unit will freeze or restart. I did some experimenting and found out that its the cable that connects to the radio. It is not shielded at all. I thought the small ferrites would be enough to combat this but obviously not. I did some experimenting and found that if I use larger ferrites and wrap them once that the issue goes away. Here is a picture of the installation. I will now look at sourcing a shielded cable for this application.

05-SEP-2021: First version of the enclosure

So I started learning 3D modeling so that I can create an enclosure for HamMessenger. Its been a bit of a learning curve but I'm getting the hang of it. I decided that for the first iteration I would go with an open unibody frame. I chose this style for the first version because it is easy and I'd like to have something working while I learn more about 3D modeling.

You can find the Fusion 360 archive file and the stl [here](/Document

View on GitHub
GitHub Stars351
CategoryDevelopment
Updated14d ago
Forks24

Languages

C++

Security Score

100/100

Audited on Mar 21, 2026

No findings