Projekty

APRS iGate RX z RTLSDR na Raspberry Pi 4

W tym wpisie chciałbym wam zaprezentować iGate APRS postawiony na Raspberry Pi 4. Na samym wstępie chciałbym zaznaczyć, że znajdzie się dużo sceptyków takiego rozwiązania ponieważ, sieć APRS ma się opierać na tym, aby ramki z danymi wędrowały dalej drogą radiową pomiędzy użytkownikami sieci. Budując iGate RX (czyli tylko z odbiorem) tworzymy jednokierunkową sieć radiową skierowaną na część internetową. Taka infrastruktura nie wspomaga pracy sieci radiowej.

Całą zabawę zaczynamy od instalacji Ubuntu na karcie SD. Ja instalowałem najnowszą wersję Ubuntu Desktop 22.04 LTS, ale nie była to zbyt dobra decyzja. System jest zbyt “ciężki”. Od czasu do czasu się wieszał. Najbardziej przy starcie systemu, zapomnieć można o otwarciu firefoxa… odpalając terminal nie było jednak większego problemu. Ja zainstalować system chyba tłumaczyć nie trzeba, ponieważ jest wiele poradników na ten temat. Jednak w razie problemów odsyłam do kursu forbot “Raspberry Pi kurs od podstaw”

Instalację iGate zaczynamy od aktualizacji systemu i instalacji potrzebnych bibliotek:

sudo apt-get update

sudo apt-get -y install git cmake build-essential libusb-1.0 libusb-1.0-0-dev libpulse-dev libx11-dev libpulse-dev libx11-dev python-pkg-resources qtcreator libtool autoconf automake libfftw3-dev

Następnie instalujemy RTLSDR:

sudo apt-get install rtl-sdr

Następnie będziemy kompilować program do dekodowania różnych rodzajów transmisji danych – w naszym przypadku będzie nas interesowało AFSK 1200bps. Program ten to multimon-ng, który w odróżnieniu od multimon, może przyjmować dane z innych programów bezpośrednio – czyli urządzenie, na którym jest uruchomione nie musi być wyposażone w kartę muzyczną.

Kolejny krok to kompilacja programu do dekodowania interesującej nas transmisji danych. Co prawda program dekoduje o wiele więcej, ale nas interesuje AFSK 1200bps. Programem tym będzie multimon-ng. Jest on na tyle świetny, że gdybyśmy chcieli popełnić ten projekt na innym urządzeniu bez karty dźwiękowej to będzie on bez problemu działał.

W konsoli wpisujemy kolejno:

cd ~/
git clone https://github.com/EliasOenal/multimonNG.git
cd multimonNG
mkdir build
cd build
qmake ../multimon-ng.pro
make
sudo make install

Żeby sprawdzić, czy działa to poprawnie wpisujemy:

rtl_fm -f 144.800M -s 22050 | multimon-ng -t raw -a AFSK1200 -f alpha /dev/stdin
(oczywiście musimy pamiętać o podpiętym już RTLSDR)

Aby być pewnym, że wszystko będzie dobrze działać powinniśmy skalibrować nasz odbiornik, a dokładnie dowiedzieć się, jakie ma “odchylenia”. W tym celu zainstalujemy program kalibrate-rtl.

cd ~/
git clone https://github.com/asdil12/kalibrate-rtl.git
cd kalibrate-rtl
git checkout arm_memory
./bootstrap
./configure
make
sudo make install

Następnie przystępujemy do kalibracji poprzez wyszukanie częstotliwości GSM w naszej okolicy. Tutaj ważne jest, aby mieć podpiętą antenę. Najlepiej tą której będziemy używali.

W konsoli wpisujemy:
kal -s GSM900

Cała procedura trochę trwa więc czekamy na jej zakończenie i wybieramy najmocniejszy sygnał.

U mnie jest to kanał nr 124.
następnie wpisujemy:
kal -c 124 (ponieważ ten był najsilniejszy w okolicy) i patrzymy na podaną wartość ppm.

W moim przypadku to -0.478 ppm.
Wartość tą zapisujemy na później, aby skonfigurować program PyMultimonAPRS.
Instalujemy go następującymi poleceniami:

cd ~/
git clone https://github.com/asdil12/pymultimonaprs.git
cd pymultimonaprs
chmod a+x setup.py
./setup.py build
sudo ./setup.py install

Następnie przechodzimy do jego konfiguracji:

sudo nano /etc/pymultimonaprs.json

{
"callsign": "SP6OOL-10",
"passcode": "*****",
"gateway": ["poland.aprs2.net:14580"],
"preferred_protocol": "any",
"append_callsign": true,
"source": "rtl",
"rtl": {
"freq": 144.800,
"ppm": 0,478,
"gain": 0,
"offset_tuning": false,
"device_index": 0
},
"alsa": {
"device": "default"
},
"beacon": {
"lat": 50.86493,
"lng": 18.56344,
"table": "R",
"symbol": "&",
"comment": "RaspberryPi iGate",
"status": {
"text": "Running on Raspberry Pi with RTL dongle",
"file": false
},
"weather": false,
"send_every": 300,
"ambiguity": 0
}
}

Czerwonym drukiem wyróżnione są pozycje, które trzeba edytować. Nasz znak, pod którym działamy oraz hasło. Hasło do sieci APRS możemy zdobyć generatorem np. na stronie:

https://apps.magicbug.co.uk/passcode/

Warunkiem jest, że wcześniej zarejestrowaliśmy już nasz znak w APRS -IS.

Jak wszystko poprawnie skonfigurujemy to nasza stacja powinna być widoczna na http://aprs.fi.

Żeby to zobaczyć uruchamiamy testowo naszą stację poprzez polecenie: pymultimonaprs -v


Aby w jakimś stopniu zautomatyzować włączanie iGate musimy zrobić jeszcze jedną rzecz.

W wiersz polecenia wpisujemy:
sudo nano /etc/init.d/pymultimonaprs

I wklejamy:

#!/bin/sh
### BEGIN INIT INFO
# Provides: pymultimonaprs
# Required-Start: $all
# Required-Stop: $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: start/stop of pymultimonaprs
### END INIT INFO

case "$1" in
 start)
   sudo pymultimonaprs --syslog &
   ;;
 stop)
   sudo killall pymultimonaprs
   ;;
 *)
   echo "Usage: /etc/init.d/pymultimonaprs {start|stop}"
   exit 1
   ;;
esac

exit 0


Zapisujemy zmiany i wychodzimy. Następnie ustawiamy nasz skrypt jako wykonywalny poleceniem:
sudo chmod +x /etc/init.d/pymultimonaprs

i następnie robimy go automatycznie uruchamianego razem ze startem:
sudo update-rc.d pymultimonaprs defaults

sudo reboot

Po restarcie naszego urządzenia, powinniśmy być widoczni jako na http://aprs.fi.

Gdyby stacja nie była widoczna możemy ją uruchomić za pomocą terminala. Jednak wcześniej musimy skonfigurować kanał SSH na Raspberry Pi. Cała procedura jest równiez opisana w kursie na stronie forbot.

Po podłączeniu się do Raspberry Pi wpisujemy nazwę użytkownika oraz ustawione hasło. Następnie wpisujemy:

sudo /etc/init.d/pymultimonaprs start

Analogicznie postępujemy, jeśli chcemy wyłączyć stacje:

sudo /etc/init.d/pymultimonaprs stop

U mnie wyglądało to właśnie w ten sposób. Czasami mogą pojawić się jakieś błędy, dlatego warto wczytać się np. jakie biblioteki musimy doinstalować.

73! SP6OOL