Cary - VA7MXY - Benson

Adventures in Amateur (HAM) Radio

DireWolf Software TNC

I’ve always had a fascination with mapping and GPS. Once I had my Amateur Radio License, I quickly started diving into APRS. Added with my addition interest in what can be done digitally over the air, I quickly realized one is going to need a TNC (Terminal Node Controller). Off to the interweb I go.

It didn’t take long for me to figure out that a TNC isn’t going to be obtained with loose change lying around. Having already invested more then I care to share getting into the hobby I looked for alternate options. Off to the interweb I go again.

Multiple cups of coffee later, I landed on DireWolf. 

Hardware

Software

The Build

As of the writing of the this information (Mar 2023), there are 2 flavours of DireWolf available. Release version 1.6 and Dev branch 1.7. I have chosen to go with the development branch as it advertises itself on the network and 1.6 does not. This feature became important as some of the applications that can utilize a TNC via network do not allow for manually setting such information and require an advertisement of said service. With that said, lets get into the build

As mentioned, I’m using a Raspberry Model 3 B+ for my core hardware. Model 4 would be nice but they are currently rather hard to get ones hands on. The other key piece of hardware is an USB audio dongle. Simple is best here. No need for fancy 5.1 or all that. Stereo out, mono in is perfect.

USB Audio Dongle
Raspberry Pi 3 B+

As you can see, the hardware requirements are not much. The software requirements are not much more complicated. DireWolf states that it will run on Windows, Mac, and Linux. However, for this story, I’ll be focusing on Linux and the Raspberry PI. There are many flavours of OS for the Pi and for this install I chose DragonOS. I picked this variation as it is basically Unbuntu but with a whole host of ready to run Ham Software packages. I will not dive into DragonOS here.

First we will need to install the nesseccary development libraries. Depending on the OS chosen, these may already be installed. In a terminal, type the following commands.

sudo apt-get install git
sudo apt-get install gcc
sudo apt-get install g++
sudo apt-get install make
sudo apt-get install cmake
sudo apt-get install libasound2-dev
sudo apt-get install libudev-dev
sudo apt-get install libgps-dev
sudo apt-get install libhamlib-dev

Once that has completed, lets build and install DireWolf. That is accomplished with the following commands.

cd ~
git clone https://www.github.com/wb2osz/direwolf
cd direwolf
git checkout dev
mkdir build && cd build
cmake ..
make -j4
sudo make install
make install-conf

We should now almost be ready to roll. We can test the install by simply typing ‘direwolf’ in the terminal window. With that, final step before we set this beast loose is to create a config file. This will tailor DireWolf to its specific use in whatever environment you plan to use it. We could go on all day on this topic; given there is extensive documentation within the GitHub repo, I’ll leave you to RTFM. 

For reference, I’ll included my config file. It is specific to my situation. I cover that more in my APRS iGate Digipeater project.

				
					#############################################################
#                                                           #
#               Configuration file for Dire Wolf            #
#                                                           #
#                   Linux version                           #
#                                                           #
#############################################################
#
# Extensive documentation can be found here:
# Stable release -       https://github.com/wb2osz/direwolf/tree/master/doc
# Latest development -   https://github.com/wb2osz/direwolf/tree/dev/doc
#
# The complete documentation set can also be found in
# /usr/local/share/doc/direwolf/ or /usr/share/doc/direwolf/
# Concise "man" pages are also available for Linux.
#
# This sample file does not have examples for all of the possibilities.
# Consult the User Guide for more details on configuration options.%C%#
#
# These are the most likely settings you might change:
#
#	(1)   	MYCALL 	-  call sign and SSID for your station.
#
#			Look for lines starting with MYCALL and
#			change NOCALL to your own.
#
#	(2)	PBEACON	-  enable position beaconing.
#
#			Look for lines starting with PBEACON and
#			modify for your call, location, etc.
#
#	(3)	DIGIPEATER  -  configure digipeating rules.
#
#			Look for lines starting with DIGIPEATER.
#			Most people will probably use the given example.
#			Just remove the "#" from the start of the line
#			to enable it.
#
#	(4)	IGSERVER, IGLOGIN  - IGate server and login
#
#			Configure an IGate client to relay messages between
#			radio and internet servers.
#
#
# The default location is "direwolf.conf" in the current working directory.
# On Linux, the user's home directory will also be searched.
# An alternate configuration file location can be specified with the "-c" command line option.
#
# As you probably guessed by now, # indicates a comment line.
#
# Remove the # at the beginning of a line if you want to use a sample
# configuration that is currently commented out.
#
# Commands are a keyword followed by parameters.
#
# Command key words are case insensitive.  i.e. upper and lower case are equivalent.
#
# Command parameters are generally case sensitive.  i.e. upper and lower case are different.
#


#############################################################
#                                                           #
#               FIRST AUDIO DEVICE PROPERTIES               #
#               (Channel 0 + 1 if in stereo)                #
#                                                           #
#############################################################

#
# Many people will simply use the default sound device.
# Some might want to use an alternative device by choosing it here.
#
# Linux ALSA is complicated.  See User Guide for discussion.
# To use something other than the default, generally use plughw
# and a card number reported by "arecord -l" command.  Example:

ADEVICE  plughw:1,0

# You can also use "-" or "stdin" to pipe stdout from
# some other application such as a software defined radio.
# "stdin" is not an audio device.  Don't use this unless you
# understand what this means.  Read the User Guide.
# You can also specify "UDP:" and an optional port for input.
# Something different must be specified for output.

# ADEVICE stdin plughw:1,0
# ADEVICE UDP:7355 default


#
# Number of audio channels for this souncard:  1 (mono) or 2 (stereo).
# 1 is the default so there is no need to specify it.
#

ACHANNELS 1


#############################################################
#                                                           #
#               SECOND AUDIO DEVICE PROPERTIES              #
#               (Channel 2 + 3 if in stereo)                #
#                                                           #
#############################################################

#ADEVICE1  ...


#############################################################
#                                                           #
#               THIRD AUDIO DEVICE PROPERTIES               #
#               (Channel 4 + 5 if in stereo)                #
#                                                           #
#############################################################

#ADEVICE2  ...


#############################################################
#                                                           #
#               CHANNEL 0 PROPERTIES                        #
#                                                           #
#############################################################

CHANNEL 0

#
# The following MYCALL, MODEM, PTT, etc. configuration items
# apply to the most recent CHANNEL.
#

#
# Station identifier for this channel.
# Multiple channels can have the same or different names.
#
# It can be up to 6 letters and digits with an optional ssid.
# The APRS specification requires that it be upper case.
#
# Example (don't use this unless you are me):  MYCALL	WB2OSZ-5
#

MYCALL VA7XXX

#
# Pick a suitable modem speed based on your situation.
#	1200 	Most common for VHF/UHF.  Default if not specified.
#	2400	QPSK compatible with MFJ-2400, and probably PK232-2400 & KPC-2400.
#	300	Low speed for HF SSB.  Default tones 1600 & 1800.
#	EAS	Emergency Alert System (EAS) Specific Area Message Encoding (SAME).
#	9600	G3RUH style - Can't use Microphone and Speaker connections.
#	AIS	International system for tracking ships on VHF.
#			Also uses 9600 bps so Speaker connection won't work.
#
# In most cases you can just specify the speed.  Examples:
#

MODEM 1200
#MODEM 9600

#
# Many options are available for great flexibility.
# See User Guide for details.
#

FIX_BITS 0
#
# Uncomment line below to enable the DTMF decoder for this channel.
#

DTMF

#
# If not using a VOX circuit, the transmitter Push to Talk (PTT)
# control is usually wired to a serial port with a suitable interface circuit.
# DON'T connect it directly!
#
# For the PTT command, specify the device and either RTS or DTR.
# RTS or DTR may be preceded by "-" to invert the signal.
# Both can be used for interfaces that want them driven with opposite polarity.
#
# COM1 can be used instead of /dev/ttyS0, COM2 for /dev/ttyS1, and so on.
#

#PTT COM1 RTS
#PTT COM1 RTS -DTR
#PTT /dev/ttyUSB0 RTS

#
# On Linux, you can also use general purpose I/O pins if
# your system is configured for user access to them.
# This would apply mostly to microprocessor boards, not a regular PC.
# See separate Raspberry Pi document for more details.
# The number may be preceded by "-" to invert the signal.
#

PTT GPIO -22

# The Data Carrier Detect (DCD) signal can be sent to the same places
# as the PTT signal.  This could be used to light up an LED like a normal TNC.

#DCD COM1 -DTR
DCD GPIO 23
CON GPIO 24

TXDELAY 30
TXTAIL 10
FULLDUP OFF


#############################################################
#                                                           #
#               CHANNEL 1 PROPERTIES                        #
#                                                           #
#############################################################

#CHANNEL 1
#MODEM 1200
#DTMF

#
# Specify MYCALL, MODEM, PTT, etc. configuration items for
# CHANNEL 1.   Repeat for any other channels.


#############################################################
#                                                           #
#               TEXT TO SPEECH COMMAND FILE                 #
#                                                           #
#############################################################

SPEECH /usr/local/bin/dwespeak.sh


#############################################################
#                                                           #
#               VIRTUAL TNC SERVER PROPERTIES               #
#                                                           #
#############################################################

#
# Dire Wolf acts as a virtual TNC and can communicate with
# client applications by different protocols:
#
#	- the "AGW TCPIP Socket Interface" - default port 8000
#	- KISS protocol over TCP socket - default port 8001
#	- KISS TNC via pseudo terminal   (-p command line option)
#

AGWPORT 8000
KISSPORT 8001

#
# It is sometimes possible to recover frames with a bad FCS.
# This applies to all channels.
#
#	0  [NONE] - Don't try to repair.
#	1  [SINGLE] - Attempt to fix single bit error.  (default)
#	... see User Guide for more values and in-depth discussion.
#

#FIX_BITS 0

# SERIALKISS /dev/ttyUSB0 1200
# SERIALKISSPOLL /dev/rfcomm 1200

LOGDIR /home/ubuntu/working/direwolf_log
#
#############################################################
#                                                           #
#           FIXED POSIION BEACONING PROPERTIES              #
#                                                           #
#############################################################


#
# Beaconing is configured with these two commands:
#
#	PBEACON		- for a position report (usually yourself)
#	OBEACON		- for an object report (usually some other entity)
#
# Each has a series of keywords and values for options.
# See User Guide for details.
#
# Example:
#
# This results in a broadcast once every 10 minutes.
# Every half hour, it can travel via two digipeater hops.
# The others are kept local.
#

#PBEACON delay=1  every=30 overlay=S symbol="digi" lat=42^37.14N long=071^20.83W power=50 height=20 gain=4 comment="Chelmsford MA" via=WIDE1-1,WIDE2-1
#PBEACON delay=11 every=30 overlay=S symbol="digi" lat=42^37.14N long=071^20.83W power=50 height=20 gain=4 comment="Chelmsford MA"
#PBEACON delay=21 every=30 overlay=S symbol="digi" lat=42^37.14N long=071^20.83W power=50 height=20 gain=4 comment="Chelmsford MA"


# With UTM coordinates instead of latitude and longitude.

#PBEACON delay=1 every=10 overlay=S symbol="digi" zone=19T easting=307477 northing=4720178


#
# When the destination field is set to "SPEECH" the information part is
# converted to speech rather than transmitted as a data frame.
#

#CBEACON dest="SPEECH" info="Club meeting tonight at 7 pm."

# Similar for Morse code.  If SSID is specified, it is multiplied
# by 2 to get speed in words per minute (WPM).

#CBEACON dest="MORSE-6" info="de MYCALL"


#
# Modify for your particular situation before removing
# the # comment character from the beginning of appropriate lines above.
#


#############################################################
#                                                           #
#             APRS DIGIPEATER PROPERTIES                    #
#                                                           #
#############################################################

#
# For most common situations, use something like this by removing
# the "#" from the beginning of the line below.
#

DIGIPEAT 0 0 ^WIDE[3-7]-[1-7]$|^TEST$ ^WIDE[12]-[12]$ TRACE

# See User Guide for more explanation of what this means and how
# it can be customized for your particular needs.

# Filtering can be used to limit was is digipeated.
# For example, only weather weather reports, received on channel 0,
# will be retransmitted on channel 1.
#

#FILTER 0 1 t/wn

# Traditional connected mode packet radio uses a different
# type of digipeating.  See User Guide for details.

#############################################################
#                                                           #
#               INTERNET GATEWAY                            #
#                                                           #
#############################################################

# First you need to specify the name of a Tier 2 server.
# The current preferred way is to use one of these regional rotate addresses:

#	noam.aprs2.net 		- for North America
#	soam.aprs2.net		- for South America
#	euro.aprs2.net		- for Europe and Africa
#	asia.aprs2.net 		- for Asia
#	aunz.aprs2.net		- for Oceania

IGSERVER noam.aprs2.net

# You also need to specify your login name and passcode.
# Contact the author if you can't figure out how to generate the passcode.

IGLOGIN VA7XXX	12345

# That's all you need for a receive only IGate which relays
# messages from the local radio channel to the global servers.

# Some might want to send an IGate client position directly to a server
# without sending it over the air and relying on someone else to
# forward it to an IGate server.  This is done by using sendto=IG rather
# than a radio channel number. Overlay R for receive only, T for two way.

#PBEACON sendto=IG delay=0:30 every=60:00 symbol="igate" overlay=R lat=42^37.14N long=071^20.83W
#PBEACON sendto=IG delay=0:30 every=60:00 symbol="igate" overlay=T lat=42^37.14N long=071^20.83W
PBEACON slot=1 every=60:00 symbol=I lat=XX.XXX long=-XXX.XXX alt=400 
PBEACON slot=10 every=60:00 via=WIDE2-2 symbol=I lat=XX.XXX long=-XXX.XXX alt=400
PBEACON slot=20 every=60:00 sendto=IG symbol=I lat=XX.XXX long=-XXX.XX alt=400

OBEACON objname=SundayNet symbol=/r freq=146.880 offset=-0.600 comment="See website.ca for more info." #lat=XX.XXX lon=-XXX.XX 

IBEACON slot=30 every=60:00 sendto=IG

# To relay messages from the Internet to radio, you need to add
# one more option with the transmit channel number and a VIA path.

IGTXVIA 0 WIDE1-1


# Finally, we don't want to flood the radio channel.
# The IGate function will limit the number of packets transmitted
# during 1 minute and 5 minute intervals.   If a limit would
# be exceeded, the packet is dropped and message is displayed in red.

IGTXLIMIT 6 10


#############################################################
#                                                           #
#               APRStt GATEWAY                              #
#                                                           #
#############################################################

#
# Dire Wolf can receive DTMF (commonly known as Touch Tone)
# messages and convert them to packet objects.
#
# See separate "APRStt-Implementation-Notes" document for details.
#

#
# Sample gateway configuration based on:
#
#	http://www.aprs.org/aprstt/aprstt-coding24.txt
#	http://www.aprs.org/aprs-jamboree-2013.html
#

# Define specific points.

#TTPOINT  B01  37^55.37N  81^7.86W
#TTPOINT  B7495088  42.605237  -71.34456
#TTPOINT  B934  42.605237  -71.34456

#TTPOINT B901  42.661279  -71.364452
#TTPOINT B902  42.660411  -71.364419
#TTPOINT B903  42.659046  -71.364452
#TTPOINT B904  42.657578  -71.364602


# For location at given bearing and distance from starting point.

#TTVECTOR  B5bbbddd  37^55.37N  81^7.86W  0.01  mi

# For location specified by x, y coordinates.

#TTGRID   Byyyxxx    37^50.00N  81^00.00W  37^59.99N  81^09.99W

# UTM location for Lowell-Dracut-Tyngsborough State Forest.

#TTUTM  B6xxxyyy  19T  10  300000  4720000



# Location for the corral.

#TTCORRAL   37^55.50N  81^7.00W  0^0.02N

# Compact messages - Fixed locations xx and object yyy where
#   	Object numbers 100 - 199	= bicycle
#	Object numbers 200 - 299	= fire truck
#	Others				= dog

#TTMACRO  xx1yy  B9xx*AB166*AA2B4C5B3B0A1yy
#TTMACRO  xx2yy  B9xx*AB170*AA3C4C7C3B0A2yy
#TTMACRO  xxyyy  B9xx*AB180*AA3A6C4A0Ayyy

#TTMACRO  z  Cz

# Receive on channel 0, Transmit object reports on channel 1 with optional via path.
# You probably want to put in a transmit delay on the APRStt channel so it
# it doesn't start sending a response before the user releases PTT.
# This is in 10 ms units so 100 means 1000 ms = 1 second.

#TTOBJ 0 1 WIDE1-1
#CHANNEL 0
#DWAIT 100

# Advertise gateway position with beacon.

# OBEACON DELAY=0:15 EVERY=10:00 VIA=WIDE1-1 OBJNAME=WB2OSZ-tt SYMBOL=APRStt LAT=42^37.14N LONG=71^20.83W COMMENT="APRStt Gateway"


# Sample speech responses.
# Default is Morse code "R" for received OK and "?" for all errors.

#TTERR  OK               SPEECH  Message Received.
#TTERR  D_MSG            SPEECH  D not implemented.
#TTERR  INTERNAL         SPEECH  Internal error.
#TTERR  MACRO_NOMATCH    SPEECH  No definition for digit sequence.
#TTERR  BAD_CHECKSUM     SPEECH  Bad checksum on call.
#TTERR  INVALID_CALL     SPEECH  Invalid callsign.
#TTERR  INVALID_OBJNAME  SPEECH  Invalid object name.
#TTERR  INVALID_SYMBOL   SPEECH  Invalid symbol.
#TTERR  INVALID_LOC      SPEECH  Invalid location.
#TTERR  NO_CALL          SPEECH  No call or object name.
#TTERR  SATSQ            SPEECH  Satellite square must be 4 digits.
#TTERR  SUFFIX_NO_CALL   SPEECH  Send full call before using suffix.

				
			

Contact

Address : B.C., Canada

Email : va7mxy@gmail.com