HamMessenger is a portable, battery powered device that runs on a microcontroller and interfaces with an inexpensive ham radio to send and recieve 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!
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 :)
Full instructions on how to operate HamMessenger will go here. For now, just a few notes :)
-HamMessenger will beacon your location and comment according to the 'Beacon Frequency' settings in APRS Settings.
-To send a direct message to a station, select 'Messages' on the home screen and press the right arrow on the keyboard. A message will be sent according to the settings in APRS Settings.
Command | Description | Example |
---|---|---|
? | Displays serial command examples | |
CMD:Settings:Print: | Prints the current settings | |
CMD:Settings:Save: | Saves settings to EEPROM | |
CMD:Modem: | Writes commands directly to the modem. See https://github.com/markqvist/MicroAPRS#serial-commands | CMD:Modem:cNOCALL |
CMD:Settings:APRS:Beacon Frequency:<0 to 4,294,967,295> | Frequency at which position data will be transmitted in milliseconds | 60000 |
CMD:Settings:APRS:Raw Packet:<alphanumeric 99 char max> | !:ZZ5ABC-1 :Hi there!{01 | See https://aprs.fi/?c=raw&call= (login required) |
CMD:Settings:APRS:Comment:<alphanumeric 99 char max> | APRS comment | Testing HamMessenger! |
CMD:Settings:APRS:Message:<alphanumeric 99 char max> | APRS message to recipient | Hi! |
CMD:Settings:APRS:Recipient Callsign:<alphanumeric 6 char max> | Callsign of the recipient | NOCALL |
CMD:Settings:APRS:Recipient SSID:<alphanumeric 1 char max> | SSID of recipient i.e. the number 3 in 'NOCALL-3' | 3 |
CMD:Settings:APRS:My Callsign:<alphanumeric 6 char max> | Callsign of the sender (me) | NOCALL |
CMD:Settings:APRS:Callsign SSID:<alphanumeric 1 char max> | SSID of the sender i.e. the number 4 in 'NOCALL-4' | 4 |
CMD:Settings:APRS:Dest Callsign:<alphanumeric 6 char max> | Callsign of destination when sending | APRS |
CMD:Settings:APRS:Dest SSID:<alphanumeric 1 char max> | SSID if the destination station | 0 |
CMD:Settings:APRS:PATH1 Callsign:<alphanumeric 6 char max> | http://wa8lmf.net/DigiPaths/ | WIDE1 |
CMD:Settings:APRS:PATH1 SSID:<alphanumeric 1 char max> | http://wa8lmf.net/DigiPaths/ | 1 |
CMD:Settings:APRS:PATH2 Callsign:<alphanumeric 6 char max> | http://wa8lmf.net/DigiPaths/ | WIDE2 |
CMD:Settings:APRS:PATH2 SSID:<alphanumeric 1 char max> | http://wa8lmf.net/DigiPaths/ | 2 |
CMD:Settings:APRS:Symbol:<alphanumeric 1 char max> | http://www.aprs.net/vm/DOS/SYMBOLS.HTM | n |
CMD:Settings:APRS:Table:<alphanumeric 1 char max> | http://www.aprs.net/vm/DOS/SYMBOLS.HTM | s |
CMD:Settings:APRS:Automatic ACK:<True/False> | Dictates if the modem will automatically ack messages | True (1) |
CMD:Settings:APRS:Preamble:<0 to 65,535> | Number of milliseconds of grey noise before APRS message | 350 |
CMD:Settings:APRS:Tail:<0 to 65,535> | Number of milliseconds of grey noise after APRS message | 80 |
CMD:Settings:APRS:Retry Count:<0 to 65,535> | How many times HamMessenger will retry a message send | 5 |
CMD:Settings:APRS:Retry Interval:<0 to 65,535> | Number of milliseconds in between message retries | 10000 |
CMD:Settings:GPS:Update Freq:<0 to 4,294,967,295> | Frequency that the GPS location is updated in memory | 10000 |
CMD:Settings:GPS:Pos Tolerance:<0-100%> | GPS position must change this much to register as a change | 1.0 |
CMD:Settings:GPS:Dest Latitude:<-3.4028235E+38 to 3.4028235E+38> | GPS latitude coordinates of destination | 51.508131 |
CMD:Settings:GPS:Dest Longitude:<-3.4028235E+38 to 3.4028235E+38> | GPS longitude coordinates of destination | -0.128002 |
CMD:Settings:Display:Timeout:<0 to 4,294,967,295> | Amount of time before Messages and Live Feed displays timeout and go home | 2000 |
CMD:Settings:Display:Brightness:<0 to 100> | Brightness of Oled (0 is as dim but not off) | 100 |
CMD:Settings:Display:Show Position:<True/False> | Lat and Long position is shown on screen | True (1) |
CMD:Settings:Display:Scroll Messages:<True/False> | Messages are scrolled on Message display | True (1) |
CMD:Settings:Display:Scroll Speed:<0 to 65,535> | Speed in milliseconds that each pixel of messages is scrolled | 4 |
CMD:Settings:Display:Invert:<True/False> | The colors of the display will be inverted | False |
TODO (repo):
- complete schematics (80%)
- add parts list
- add menu layout
- add instructions
TODO (hardware):
- add shielding to components (controller freezes if radio too close during Txing)
- design pcb
- design case
- remove buttons
TODO (software):
- add "quick message" functionality. currently to send a message you highlight 'Messages' on the home screen and press the right key.
- add ability to program the radio for 'plug-n-play' experience (is this possible?)
- add store and recall messages in SD card to save dynamic memory
- add feature to be selective about message acknowledgments. currently any acknowlegment (from a second conversation) will reset the messaging sequencer.
- when scroll message off then the right and left key should manually scroll
- only automatically display incoming message when in home screen (or screen sleeping)
Arduino:
https://www.arduino.cc/en/pmwiki.php?n=Main/ArduinoBoardProMini\
https://store.arduino.cc/usa/mega-2560-r3\
https://gallery.autodesk.com/fusion360/projects/arduino-mega-2560-r3
Keyboard:
https://github.com/m5stack/M5-ProductExampleCodes/tree/master/Unit/CARDKB\
https://www.ebay.com/itm/124774337790?hash=item1d0d214cfe:g:kEkAAOSwEZlg0302
OLED Display:
https://github.com/wonho-maker/Adafruit_SH1106\
https://www.ebay.com/itm/391731053045\
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://github.com/mikalhart/TinyGPSPlus\
https://www.ebay.com/sch/i.html?_id=221791352715&_nkw=Ublox+NEO-6M+GPS+Module+Aircraft+Flight+Controller+For+Arduino+MWC+IMU+APM2\
https://grabcad.com/library/gps-module-ublox_neo6mv2-1\
https://grabcad.com/library/ecran-oled-1-3-1
Case:
https://www.duinocases.com/store/arduino-enclosures/duinocase-mega-arduino-mega-2560/