Monday 17 October 2022

APRS with Mac Mini M1 and Icom IC-7300

Hi everyone,

This is a technical post.  The topic is using the amateur (Ham) radio Automatic Packet Reporting System (APRS).  For bluewater sailors who are also licensed Amateur Operators this provides a means of reporting position and weather, and also directly messaging/chatting with other stations.

VK6HSR MM on APRS.FI

Previously we had been using an Iridium Go! to report our position at sea.  We had kept HF/SSB email as a backup, running Winlink Express in a Parallels VM.  We recently sold the Go! to fund a Starlink system, and also replaced our Intel-based Macbook laptop with a M1-based Mac Mini.  The Mini uses so little power we could replace the BeagleBone Black computer we were using to run SignalK.  However we discovered that Parallels only supports 'Windows 11 for ARM64' on M1, and that OS has no driver for our IC-7300's USB-Serial Bridge.

This impasse led me to research HF/SSB email for the first time in years. I discovered there are now open-source apps such as 'pat' to access Winlink.  Sadly however I could not find a M1-compatible version of ARDOP,  the TNC protocol which encodes/decodes between Winlink's digital data and the audio tones sent over HF/SSB.

This further impasse led me to research HF/SSB packet communication more generally.  I discovered APRS, a licensed amateur operator-only system providing global communication via HF and VHF radios and the internet.  Take a look at VK6HSR-8 on aprs.fi.  That's us.

Setting up APRS on the Mac Mini M1 proved easy.  We already had serial and audio communication between the Mini and the IC-7300.  What was needed was software.  I chose direwolf and YAAC.  Direwolf is a software modem/TNC for the AX.25 packets used by APRS.  YAAC is 'yet another APRS client' which provides the APRS GUI.

Here's the process I used:

  • direwolf
    • Preparation
    • Install dependencies in a Terminal window using MacPorts
      • run ‘sudo port install coreutils portaudio cmake +universal’
    • Install in a Terminal window
      • 'cd ~'
      • Download direwolf with ‘git clone https://github.com/wb2osz/direwolf’
      • Build direwolf with ‘cd direwolf’ and...
      • ‘mkdir build && cd build'
      • ‘cmake ..’
      • ‘make -j4’
      • ‘sudo make install’
      • ‘make install-conf’
      • Check executable using ‘which direwolf’
    • Setup direwolf audio channels
      • Connect computer to IC-7300
      • Edit ~/direwolf.conf
        • set MYCALL to your callsign
        • set ADEVICE "USB Audio CODEC :2" "USB Audio CODEC :1"
        • save the file
      • In a Terminal window run ‘direwolf’ and confirm output…
        • Channel 0: 300 baud, AFSK 1600 & 1800 Hz, D, 44100 sample rate / 3.
        • Note: PTT not configured for channel 0. (Ignore this if using VOX.)
        • Ready to accept AGW client application 0 on port 8000 ...
        • Ready to accept KISS TCP client application 0 on port 8001 ...
      • <ctrl>c to quit”
    • Setup direwolf PTT (still connected to IC-7300 of course)
      • Edit ~/direwolf.conf
        • Find PTT line and change to ‘PTT /dev/cu.SLAB_USBtoUART RTS’
        • save the file
      • In a Terminal window run ‘direwolf’ and check the note about PTT has gone.
      • <ctrl>c to quit

Happy direwolf

    • Setup IC-7300 via front-panel (you may prefer different level settings)
      • Menu => Set => Connectors
        • ACC/USB Output Select = AF
        • ACC/USB AF Output Level = 80%
        • ACC/USB AF SQL = OFF (Open)
        • ACC/USB AF Beep/Speech... Output = Off
        • ACC/USB IF Output Level = 50%
        • ACC MOD Level = 50%
        • USB MOD Level = 50%
        • DATA OFF MOD = MIC
        • DATA MOD = USB
        • CI-V => CI-V USB Port = Unlink from [REMOTE]
        • USB Serial Function = CI-V
        • USB SEND/Keying => USB SEND = RTS
      • Use MULTI key to set RF POWER to a low power (eg 1W) and MONITOR to 25%
      • Menu => Scope, then click SPAN until you have +/-10kHz bandwidth
      • Set frequency to 10,147.60
      • Set mode to USB-D
      • TUNE!
      • Set AF volume

IC-7300 ready for APRS

    • Use direwolf's kissutil utility program to try sending a packet
      • In one Terminal window run direwolf
        • 'cd direwolf'
        • 'direwolf'
        • leave it running and visible
      • In a second Terminal window run kissutil
        • 'cd direwolf'
        • 'kissutil'
        • 'VK6HSR-8>CQ:>Hello World', replacing 'VK6HSR' with your callsign
        • If your rig transmitted you got it right!
        • <ctrl>c to quit
    • Leave the IC-7300 and direwolf running for a few hours (afternoon/evening is best)
    • Check direwolf window for packets received.

kissutil (top) and direwolf (bottom) sending and monitoring packets


Hopefully you see packets arriving and decoded by direwolf.  Now let's continue with YAAC...
  • YAAC
    • Preparation
    • Download
    • Install from a Terminal window
      • 'cd ~/Downloads'
      • 'mv YAAC ~'
      • 'cd ~/YAAC'
      • ‘java -jar YAAC.jar’
    • Configure YAAC using the Wizard, with help from '~/direwolf/doc/User Guide.pdf' p15
      • Here are my configuration pages, from File => Configure => Expert Mode...









My configuration connects to direwolf using the AGWPE protocol on IP port 8001.  Here is its setup...



The other port connects to serial port carrying NMEA0183 GPS data.  Without this you need to manually enter you postion in YAAC for postion reports to be transmitted.

My configuration enables beaconing, which transmits your position over HF.  With your RF power turned up to say 40W you should be received by multiple stations up to a few thousands of nautical miles away.  These stations forward your packet to the APRS-IS internet service, from where aprs.fi collects, records and displays them.

Pushing on with YAAC setup, with your configuration established you can try to send a packet...
  • Send a status packet
    • Set your IC-7300 RF Power to 40W
    • In the direwolf Terminal window check direwolf is running
    • In YAAC
      • Open the Map View (View => Map) if not already open
      • Click on the small green box to enable decoding
      • Check that you have a black RF box (which indicates you have an RF interface)
      • If you've enabled a GPS port check the black GPS box is flashing green
      • In the menu bar click Message => Station and put 'test' in the text line.  Click OK.
      • Does the radio transmit?  If so take a look at the direwolf transcript to see the packet sent.
      • If all's well in your YAAC setup you may find it transmitting packets at intervals.  This is your position reports.  Take a look at their content in the direwolf transcript too.


Hopefully YAAC is showing your position too...

Position on YAAC Map

So we now have direwolf and YAAC up and running, and we've transmitted at least one packet.  Did anybody hear?

In a browser go to https://aprs.fi and enter your callsign in the Track Callsign search box on the right.  If you were found then tick the box and click on Show Selected.  Hopefully you get something like this, showing your location...

APRS Callsign Search Result

We can examine a lot of information gathered by aprs.fi.  For example click on Station Info on the right...

Station Info

And if you send weather data...

Weather Data

I hope the above is helpful!  I'll be using APRS to send position and weather reports when we're on passage.  And with a little luck I'll also be able to send short Winlink emails via YAAC too.


No comments:

Post a Comment