Arduino TNC


This Arduino "sketch" is a framework for using an Arduino as a KISS-TNC. There are other TNC implementations but what makes it different is that this software is for transceivers like the rfm95w LoRa module or the nrf24l01 and many others (and not for transmitters).

With this sketch the Arduino talks the KISS protocol over its serial port. That way one can setup an AX.25 connection over the range of radios mentioned above.


You can find it on GitHub.


Make sure /etc/ax25/axports exists. In this file you need to have something like this:

ax0     FH2LOR-1        9600    254     1       AX.25 over LoRa
  • ax0 will be the network interface name to use
  • FH2LOR-1 is the call-sign to use
  • 9600 is the speed with which the Arduino will talk to the Linux pc
  • 254 is protocol specific. LoRa devices (without the LoRa WAN layer) have a maximum packet size of 254 bytes. An rfm69hw only has a 60 bytes fifo but with some clever coding you could make it to 255 bytes. An nrf24l01 has a maximum packet size of 32 bytes.
  • 1 window size
  • and the rest is a short descriptive text

After that, "start the network device" with:

/usr/sbin/kissattach /dev/ttyUSB0 ax0
'/dev/ttyUSB0' may be different depending on the type of Arduino and/or tty-to-usb converter you use.

Tested with

I've tested it with hoperf rfm95w lora modules and was able to send and receive ax.25 beacons. I'm currently saving money for a Moteino Mega USB device. The plan is to place a device on two locations here in the city between me and a friend and see if longer range with wording is also a workable solution. Maybe play around with netrom and rose.