You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
278 lines
12 KiB
278 lines
12 KiB
10 months ago
|
<!DOCTYPE html>
|
||
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
|
||
|
<head>
|
||
|
<meta charset="utf-8" />
|
||
|
<meta name="generator" content="pandoc" />
|
||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
|
||
|
<meta name="author" content="M.T. Konstapel" />
|
||
|
<meta name="dcterms.date" content="2024-02-14" />
|
||
|
<title>APRS digipeater</title>
|
||
|
<link rel="stylesheet" href="./css/mvp.css" />
|
||
|
<style type="text/css">
|
||
|
:root {
|
||
|
--width-content: 1080px;
|
||
|
}
|
||
|
|
||
|
nav {
|
||
|
justify-content: space-around;
|
||
|
}
|
||
|
|
||
|
</style>
|
||
|
</head>
|
||
|
<body>
|
||
|
<header id="title-block-header">
|
||
|
<nav id="TOC">
|
||
|
<ul>
|
||
|
<li>
|
||
|
<a href="#">Index</a>
|
||
|
<ul>
|
||
|
<li><a href="#the-story" id="toc-the-story">The
|
||
|
story</a></li>
|
||
|
<li><a href="#the-design" id="toc-the-design">The
|
||
|
design</a></li>
|
||
|
<li><a href="#the-build" id="toc-the-build">The
|
||
|
build</a></li>
|
||
|
<li><a href="#the-specifications"
|
||
|
id="toc-the-specifications">The specifications</a></li>
|
||
|
<li><a href="#license" id="toc-license">License</a></li>
|
||
|
</ul>
|
||
|
</li>
|
||
|
<li>
|
||
|
<a href="./aprs_digipeater.pdf">PDF version</a>
|
||
|
</li>
|
||
|
<li>
|
||
|
<a href="https://git.meezenest.nl/marcel/aprs_digipeater">Git repo</a>
|
||
|
</li>
|
||
|
<li>
|
||
|
<a href="https://meezenest.nl/mees/aprs_digipeater.html">Back</a>
|
||
|
</li>
|
||
|
</ul>
|
||
|
|
||
|
<a href="https://www.meezenest.nl/mees/"><img alt="Logo" src="./images/mees_logo.svg" height="70"></a>
|
||
|
</nav>
|
||
|
<h1 class="title">APRS digipeater</h1>
|
||
|
<p class="subtitle">with weather and PE1RXF telemetry server</p>
|
||
|
<p class="author">M.T. Konstapel</p>
|
||
|
<p class="date">2024-02-14</p>
|
||
|
<p><a href="./aprs_digipeater.pdf"><i>PDF version</i></a></p>
|
||
|
</header>
|
||
|
<main>
|
||
|
<article>
|
||
|
<p><b>Abstract </b><p>This project is a collection of former (and some
|
||
|
new) projects connected together to make an APRS digipeater, which
|
||
|
doubles as an APRS weather station, with PE1RXF telemetry server
|
||
|
capabilities.</p></p>
|
||
|
<figure>
|
||
|
<img src="./images/block_diagram_overview.svg"
|
||
|
title="Block diagram ofdigipeater" alt="Block diagram of digipeater" />
|
||
|
<figcaption aria-hidden="true">Block diagram of digipeater</figcaption>
|
||
|
</figure>
|
||
|
<h1 id="the-story">The story</h1>
|
||
|
<p>For several years I operate an APRS iGate on both 2 meter and 70 cm
|
||
|
LoRa. I added my own PE1RXF telemetry support (see: <a
|
||
|
href="https://www.meezenest.nl/mees-elektronica/aprs_telemetry.html">https://www.meezenest.nl/mees-elektronica/aprs_telemetry.html</a>).
|
||
|
This worked fine, but I already had designed an updated version of the
|
||
|
iGate. The prototype worked, but had some issues. So I kept using the
|
||
|
old iGate and forgot all about the new version.</p>
|
||
|
<p>Some time ago I started to design a weather station (<a
|
||
|
href="https://www.meezenest.nl/mees-elektronica/weather_station.html">https://www.meezenest.nl/mees-elektronica/weather_station.html</a>)
|
||
|
which I located in the back garden. Because it was out of reach of my
|
||
|
wifi network, I used the APRS iGate prototype to send the weather data
|
||
|
via its build in LoRa modem to my PE1RXF telemetry server.</p>
|
||
|
<p>Than the idea of relocating my existing iGate to the location of my
|
||
|
weather station emerged. The weather station had all the hardware I
|
||
|
needed build in. And it made sense to combine the two systems, as both
|
||
|
handle APRS traffic. Besides, both systems use energy so shutting one
|
||
|
down seems sensible.</p>
|
||
|
<p>But the reason I used the APRS iGate prototype in the first place,
|
||
|
namely the absence of wifi, became a problem again. An APRS iGate has to
|
||
|
have access to the internet, that’s the whole point! But the amount of
|
||
|
data it sends is small, so I didn’t need lots of bandwidth. And at that
|
||
|
point another dormant project woke up: I always wanted to experiment
|
||
|
with TCP/IP over the air. In the past I did some experiments with TCP/IP
|
||
|
over AX.25 (packet radio), but the 1200 baud modems were simply too
|
||
|
slow. I also had build a 5GHz HamNet link, but 350 Mbit/s is quite the
|
||
|
overkill. I needed a link speed between 15kB/s to 500kB/s. The Rnode
|
||
|
project from <a
|
||
|
href="https://unsigned.io/hardware/RNode.html">https://unsigned.io/hardware/RNode.html</a>
|
||
|
seemed perfect.</p>
|
||
|
<h1 id="the-design">The design</h1>
|
||
|
<h2 id="weather-station">Weather station</h2>
|
||
|
<p>This project started with a weather station. I designed it as a stand
|
||
|
alone weather station with an RS-484 ModBus interface. It can measure
|
||
|
wind speed, wind direction, rain fall, humidity, air pressure and
|
||
|
temperature. The complete build document of the weather station can be
|
||
|
found here: <a
|
||
|
href="https://www.meezenest.nl/mees-elektronica/projects/weather_station/build_doc/weather_station.html">https://www.meezenest.nl/mees-elektronica/projects/weather_station/build_doc/weather_station.html</a></p>
|
||
|
<figure>
|
||
|
<img src="./images/weather_station_sensors_small.jpg"
|
||
|
title="Weather station" alt="Weather station" />
|
||
|
<figcaption aria-hidden="true">Weather station</figcaption>
|
||
|
</figure>
|
||
|
<h2 id="brains">Brains</h2>
|
||
|
<p>Although stand alone in operation, to read the measurements the
|
||
|
weather station must be connected to a host via RS-485. This host is a
|
||
|
Raspberry Pi LoRa shield I designed to be the successor of my first APRS
|
||
|
iGate. It is a simple PCB with room for a Raspberry Pi Zero 2 W, a LoRa
|
||
|
transceiver, a real time clock and a power supply.</p>
|
||
|
<figure>
|
||
|
<img src="./images/RPi-LoRa-shield_prototype.jpg"
|
||
|
title="Raspberry Pi LoRa shield prototype"
|
||
|
alt="Raspberry Pi LoRa shield prototype" />
|
||
|
<figcaption aria-hidden="true">Raspberry Pi LoRa shield
|
||
|
prototype</figcaption>
|
||
|
</figure>
|
||
|
<figure>
|
||
|
<img src="./images/RPi-LoRa-shield_schematic.png"
|
||
|
title="Raspberry Pi LoRa shield schematic"
|
||
|
alt="Raspberry Pi LoRa shield schematic" />
|
||
|
<figcaption aria-hidden="true">Raspberry Pi LoRa shield
|
||
|
schematic</figcaption>
|
||
|
</figure>
|
||
|
<p><a href="./images/RPi-LoRa-shield_schematic.pdf">PDF version of
|
||
|
schematic</a></p>
|
||
|
<h2 id="peripherals">Peripherals</h2>
|
||
|
<p>The Raspberry Pi need some extra hardware for interfacing the various
|
||
|
peripherals, like the transceiver, the ModBus and the Rnode modem.</p>
|
||
|
<h3 id="usb-hub">USB hub</h3>
|
||
|
<p>As the Raspberry Pi only has one USB port, a hub is essential. I used
|
||
|
an old one I had laying around. Taken out of its case, it fits
|
||
|
perfectly.</p>
|
||
|
<h3 id="rs-485-dongle">RS-485 dongle</h3>
|
||
|
<p>To interface with the weather station a USB to RS-485 dongle is
|
||
|
needed. A cheap one from Joy-IT (<a
|
||
|
href="https://joy-it.net/en/products/SBC-TTL-RS485">https://joy-it.net/en/products/SBC-TTL-RS485</a>)
|
||
|
is fine.</p>
|
||
|
<figure>
|
||
|
<img src="./images/rs-485_dongle.webp" title="RS-485 dongle"
|
||
|
alt="RS-485 dongle" />
|
||
|
<figcaption aria-hidden="true">RS-485 dongle</figcaption>
|
||
|
</figure>
|
||
|
<h3 id="baud-aprs-modem">1200 baud APRS modem</h3>
|
||
|
<p>This modem I also had laying around. It is called “Packet modem nano
|
||
|
2” and it is based on the Micromodem from unsigned.io (<a
|
||
|
href="https://unsigned.io/hardware/MicroModem.html">https://unsigned.io/hardware/MicroModem.html</a>).
|
||
|
The design files for this modem are part of this project and can be
|
||
|
found in the git repository.</p>
|
||
|
<figure>
|
||
|
<img src="./images/packetmodem_nano2_pcb_small.jpg"
|
||
|
title="Packet modem nano 2" alt="Packet modem nano 2" />
|
||
|
<figcaption aria-hidden="true">Packet modem nano 2</figcaption>
|
||
|
</figure>
|
||
|
<figure>
|
||
|
<img src="./images/packetmodem_nano2_rev2.png"
|
||
|
title="Packet modem nano 2 schematic"
|
||
|
alt="Packet modem nano 2 schamatic" />
|
||
|
<figcaption aria-hidden="true">Packet modem nano 2
|
||
|
schamatic</figcaption>
|
||
|
</figure>
|
||
|
<p><a href="./images/packetmodem_nano2_rev2.pdf">PDF version of
|
||
|
schematic</a></p>
|
||
|
<h3 id="rnode-modem">Rnode modem</h3>
|
||
|
<p>For the low speed network link I use the Rnode project from <a
|
||
|
href="https://unsigned.io/hardware/RNode.html">https://unsigned.io/hardware/RNode.html</a>.
|
||
|
This is an amazing project and I only use a small part of the features
|
||
|
available. In my ow project is works as a KISS compatible LoRa modem.
|
||
|
Together with the tncattach program (<a
|
||
|
href="https://unsigned.io/software/tncattach.html">https://unsigned.io/software/tncattach.html</a>)
|
||
|
it forms a Linux network adapter over which I can route all the network
|
||
|
traffic. The maximum speed is just above 20 KB/s, which is enough for
|
||
|
APRS-IS traffic. For archival reasons, I included the source code of
|
||
|
tncattach as well as rns (the firmware and configuration utility) in the
|
||
|
git repository.</p>
|
||
|
<p>The hardware on which the Rnode firmware is flashed is a LilyGO
|
||
|
LoRa32 v2.1 (also known as TTGO T3 v1.6.1). Of course you need at least
|
||
|
two boards to form a network. With a good antenna, the range is easily
|
||
|
100 meters (and probably more than 1 km), which is plenty enough for
|
||
|
what I need.</p>
|
||
|
<figure>
|
||
|
<img src="./images/lilygo-ttgo-lora32.jpg" title="LilyGO LoRa32"
|
||
|
alt="LilyGO LoRa32" />
|
||
|
<figcaption aria-hidden="true">LilyGO LoRa32</figcaption>
|
||
|
</figure>
|
||
|
<h2 id="more-than-brains-alone">More than brains alone</h2>
|
||
|
<p>The Raspberry Pi with all the extra hardware is housed in a small
|
||
|
plastic housing. On the back panel behind the SMA connectors and the
|
||
|
power jack, I placed a copper strip. This acts as the start grounding
|
||
|
strip on which all other ground wires are connected. This prevents a lot
|
||
|
of RF and EMC problems.</p>
|
||
|
<figure>
|
||
|
<img src="./images/raspberry_pi_proto_small.jpg"
|
||
|
title="Inside the brains" alt="Inside the brains" />
|
||
|
<figcaption aria-hidden="true">Inside the brains</figcaption>
|
||
|
</figure>
|
||
|
<p><a href="./images/raspberry_pi_proto.jpg">Large version of
|
||
|
photo</a></p>
|
||
|
<figure>
|
||
|
<img src="./images/raspberry_pi_proto_backside.jpg" title="Back side"
|
||
|
alt="Back side" />
|
||
|
<figcaption aria-hidden="true">Back side</figcaption>
|
||
|
</figure>
|
||
|
<h2 id="external-hardware">External hardware</h2>
|
||
|
<h3 id="meter-transceiver">2 meter transceiver</h3>
|
||
|
<p>The 2 meter transceiver is an old Alinco DJ-580 hand held radio with
|
||
|
an output power of 5 Watt. It is connected to both the 5 pin DIN
|
||
|
connector and the 12 Volt barrel jack on the Raspberry Pi.</p>
|
||
|
<figure>
|
||
|
<img src="./images/alinco_dj580t.jpg" title="Alinco DJ-580"
|
||
|
alt="Alinco DJ-580" />
|
||
|
<figcaption aria-hidden="true">Alinco DJ-580</figcaption>
|
||
|
</figure>
|
||
|
<h3 id="diplexer">Diplexer</h3>
|
||
|
<p>The LoRa APRS transceiver (70cm) and the APRS transceiver (2m) are
|
||
|
connected to a triplexer, making it possible to use one dual band
|
||
|
antenna for both radios. Why a triplexer? Well, I had one laying around.
|
||
|
I terminated the unused 1200MHz connector with a 50 Ohm load. But a
|
||
|
diplexer would have been sufficient, of course.</p>
|
||
|
<figure>
|
||
|
<img src="./images/triplexer.png" title="Triplexer" alt="Triplexer" />
|
||
|
<figcaption aria-hidden="true">Triplexer</figcaption>
|
||
|
</figure>
|
||
|
<h3 id="antenna">Antenna</h3>
|
||
|
<p>This is a simple 2m/70cm dual band antenna from Diamond, the X30.</p>
|
||
|
<figure>
|
||
|
<img src="./images/diamond-x30.jpg" title="Antenna" alt="Antenna" />
|
||
|
<figcaption aria-hidden="true">Antenna</figcaption>
|
||
|
</figure>
|
||
|
<h1 id="the-build">The build</h1>
|
||
|
<h2 id="software">Software</h2>
|
||
|
<p>The instalation of all the needed software on the Raspberry Pi is
|
||
|
complicated, so I wrote a separate document: <a
|
||
|
href="./installation_pe1rxf_aprs_weather_server.html">installation_pe1rxf_aprs_weather_server.html</a></p>
|
||
|
<h1 id="the-specifications">The specifications</h1>
|
||
|
<ul>
|
||
|
<li>2 meter transceiver with 5 Watt output power</li>
|
||
|
<li>70 cm LoRa transceiver with 20 dBm output power</li>
|
||
|
<li>Raspberry Pi Zero 2 W</li>
|
||
|
<li>APRS cross band digipeater software</li>
|
||
|
<li>Weather station via ModBus</li>
|
||
|
<li>Rnode TCP/IP over 70 cm LoRa for internet</li>
|
||
|
</ul>
|
||
|
<h1 id="license">License</h1>
|
||
|
<p>Copyright (C) 2023, 2024 M.T. Konstapel</p>
|
||
|
<p><a
|
||
|
href="https://meezenest.nl/mees/">https://meezenest.nl/mees/</a></p>
|
||
|
<p>The software is published as open-source software (GPL). The hardware
|
||
|
is published as open-source hardware (OSH).</p>
|
||
|
<h2 id="software-1">Software</h2>
|
||
|
<p>This program is free software: you can redistribute it and/or modify
|
||
|
it under the terms of the GNU General Public License as published by the
|
||
|
Free Software Foundation, either version 3 of the License, or (at your
|
||
|
option) any later version.</p>
|
||
|
<h2 id="hardware-and-documentation">Hardware and documentation</h2>
|
||
|
<p>This work is licensed under a Creative Commons Attribution-ShareAlike
|
||
|
4.0 International License.</p>
|
||
|
<hr>
|
||
|
</article>
|
||
|
</main>
|
||
|
<footer>
|
||
|
<p>©
|
||
|
2024-02-14
|
||
|
M.T. Konstapel
|
||
|
<a href="https://meezenest.nl/mees/">https://meezenest.nl/mees/</a>
|
||
|
</p><p>This work is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a>.
|
||
|
</p>
|
||
|
</footer>
|
||
|
</body>
|
||
|
</html>
|