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/HamMessengerREADME
HamMessenger
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 Distanceis the distance in miles that will trigger a beacon.Beacon Idle Timeis 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 ToleranceunderGPSsettings 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 Textis the message that will be sent.Recipient Callsignis the callsign of the station that will recieve the message. Example 'NOCALL-ID'Recipient SSIDis 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
