Hotspot FM Orange PI Zero


Poniżej opis jak zbudować hotspot FM na bazie małego komputera Orange PI Zero i modułu radiowego SA818.
Moduł radiowy SA818 jest dostępny w 2 wersjach VHF i UHF. Opinie o tym module są różne i najwięcej
uwag jest co do czułości odbiornika. Ale w sytuacji kiedy budujemy hotspot FM do domowych celów
słaba czułość odbiornika może nie przeszkadzać. Być może warto rozważyć zakup taniego BaoFeng UV-3R
i wykorzystać go jako radio do naszego hotspota. Zdjęcie jak pobrać sygnał SQL dla UV-3R znajdziecie
na stronie: https://f5nlg.wordpress.com/2018/01/01/modification-des-tx-ctcss-et-det-squelch/
Innym ciekawym tanim radiem jest BaoFeng BF-T1 (ok 80 zl na Allegro) opis modyfikacji i jak pobrać 
linie COS/SQL znajdziecie na tych stronach: 
https://f5nlg.wordpress.com/2018/01/01/modification-des-tx-ctcss-et-det-squelch/
http://ddfrnrep.ddnss.de/baofeng_bf-t1___bf-9100_modifi.HTM



Instalacja systemu ArmBian
------------------------------

Upewnij się, że masz dobrą i niezawodną kartę microSD oraz odpowiednie zasilanie. Archiwa można 
dekompresować za pomocą 7-Zip w systemie Windows, w systemie Linux (apt-get install p7zip-full). 
Obrazy RAW można zapisywać za pomocą programu Etcher  https://www.balena.io/etcher/ (dostępny na 
wszystkie systemy operacyjne). Obrazy skompresowane za pomocą .xz, możesz zapisać je bezpośrednio 
na karcie SD za pomocą programu Etcher.

Pobierz najnowszą wersję systemu Armbian BUSTER https://www.armbian.com/orange-pi-zero/
Wgraj na kartę microSD obraz przy pomocy programu Etcher.

Włącz OrangePi Zero do swoje sieci domowej i na routerze domowym, który przydziela adresy IP poszukaj 
jaki IP adres dostał Twój OrangePI. Użyj programu PUTTY pod MSWidnows (PUTTY to dostępny darmowy SSH Client) 
aby zalogować się via SSH do OrangePi Zero

Zaloguj się jako: root Hasło: 1234 
Następnie zostaniesz poproszony o zmianę tego hasła 
Po zakończeniu zostaniesz poproszony o utworzenie normalnego konta użytkownika.

Zaloguj się do systemu jako użytkownik root

Zrób edycje pliku armbianEnv.txt
	nano /boot/armbianEnv.txt

Dopisz w nim analog-codec i uart2 w linii overlays:
	overlays=analog-codec uart2 usbhost2 usbhost3

Zrób restart systemu i sprawdź poleceniem, czy jest widziana wbudowana karta dźwiękowa:
	cat /proc/asound/cards

powinieneś zobaczyć wynik:
       0 [Codec          ]: H3_Audio_Codec - H3 Audio Codec
                                 H3 Audio Codec

Możesz zmienić ustawienia lokalne czas/język używany itp uruchamiając
	armbian-config
	
W armbian-config wejdz w SYSTEM → CPU i ustawa zarządzanie CPU, które pozwoli utrzymać niską temperaturę CPU:
	MIN_SPEED=480000
	MAX_SPEED=816000
	GOVERNOR=powersave

Zapisz ustawienia

Zrób aktualizacje systemu:
	apt update
	apt upgrade

Możesz jeśli chcesz skonfigurować sieci WIFI przy pomocy tekstowego GUI poleceniem

    nmtui

Instalacja pakietu OrangePI.GPIO

	cd /opt
	apt-get update
	apt-get install python-dev git
	git clone https://github.com/Jeremie-C/OrangePi.GPIO
	cd OrangePi.GPIO
	python setup.py install


Instalacja pakietów do kompilacji SVXLink:
---------------------------------------------

    apt install -y mc g++ cmake make libsigc++-2.0-dev libgsm1-dev libpopt-dev tcl-dev 
    apt install -y libgcrypt20-dev libspeex-dev libasound2-dev libopus-dev librtlsdr-dev 
    apt install -y doxygen groff alsa-utils vorbis-tools curl libcurl4-openssl-dev 
    apt install -y git curl rtl-sdr libcurl4-openssl-dev cmake libjsoncpp-dev
    apt install -y lynx gawk node-ws nodejs apache2 php php-cgi php-curl libapache2-mod-php php-mbstring php-common

Utworzenie konta użytkownika svxlink i dodanie group

	useradd -rG audio,daemon,dialout svxlink

Kompilacja i instalacja:
	cd /opt
	mkdir src
	cd src
	git clone http://github.com/sm0svx/svxlink.git
	mkdir svxlink/src/build
	cd svxlink/src/build
	cmake -DUSE_QT=OFF -DCMAKE_INSTALL_PREFIX=/usr -DSYSCONF_INSTALL_DIR=/etc -DLOCAL_STATE_DIR=/var ..
	make
	make install
	ldconfig

Pobierz przykładową konfiguracją, dashboard oraz pliki dźwiękowe polskie 

Paczka zawiera pliki systemowe z ustawieniami niezbednymi dla działania dashboard
między innymi dla serwera apache2 

Najnowsza wersja jest z dnia 2021-12-02

Uruchom nastepującą komendę aby pobrać cały pakiet:

    bash <(curl -s http://kurpie.hblink.network/svxrdb/install-ozpi.sh)


Konfiguracja RX i TX jest przygotowana dla schematu hotspota:
http://kurpie.hblink.network/svxrdb/OrangePiZero-Hotspot.pdf
http://kurpie.hblink.network/svxrdb/ozpi-anyradio.pdf

Zrób edycje pliku svxlink.conf i wprowadź zmiany w [RefLogic] oraz w [SimplexLogic]

	nano /etc/svxlink/svxlink.conf

W części [SimplexLogic] musisz wpisać swój znak w CALLSIGN= zamiast N0CALL 

[SimplexLogic]
TYPE=Simplex
RX=Rx1
TX=Tx1
# Twoj znak
CALLSIGN=N0CALL

oraz jeśli chcesz mieć aktywny EchoLink na swoim hotspot (wymaga rejestracji na echolink.org dla znaku z -L) 
i dopisz ModuleEchoLink do wykazu aktywnych modułów w cześci  [SimplexLogic]

MODULES=ModuleParrot,ModuleMetarInfo,ModuleEchoLink

oraz wpisz swoje dane w /etc/svxlink/svxlink.d/ModuleEchoLink

CALLSIGN=MYCALL-L
PASSWORD=MyPass
SYSOPNAME=MyName
LOCATION=[Svx] Fq, MyTown

gdzie w CALLSIGN= zamiast MYCALL-L wpisz swój znak z końcówka w nazwie -L oraz w PASSWORD zamiast MyPass musisz 
wpisać swoje hasło po zarejetrowaniu sie na EchoLink

Pamietaj aby ustawić w pliku /etc/svxlink/svxlink.d/ModuleEchoLink.conf

MUTE_LOGIC_LINKING=1


Musisz się skontaktować z administratorem SVXReflectora aby otrzymać IP adres / port oraz dane dla Twojego konta
Bez tych danych nie podłączysz się do SVXReflectora swoim Hotspotem FM. Otrzymane dane wpisuje się w części 
[ReflectorLogic] w pliku konfiguracyjnym svxlink.conf.

[ReflectorLogic]
TYPE=Reflector
# Dane do logowania do SVXReflectora
# otrzymasz je od admina SVXReflectora
# IP adres, port, haslo dla Twojego znau
HOST=127.0.0.1
PORT=5300
CALLSIGN="N0CALL"
AUTH_KEY="My_PASSWORD"


W części [ReflectorLogic] wpisz w DEFAULT_TG numer domyślnej TalkGroup jak będzie na Twoim radio oraz jakie inne dostępne 
TalkGroup, które hotspot będzie monitorował, wpisz w  MONITOR_TGS

# Domyslna Talk Grupa na której nadajesz, możesz ustawić 0 brak domyślnek TG
DEFAULT_TG=9
# jakie Talk Group monitorujesz 
MONITOR_TGS=260,2600


Zrób restart system w celu aktywowania ustawień GPIO dla svxlink poleceniem
    reboot

Po ponownym zalogowaniu się do systyemu uruchom pliki startowe svxlink:
	systemctl enable svxlink_gpio_setup.service
	systemctl enable svxlink.service
	systemctl restart svxlink_gpio_setup
	systemctl restart svxlink
	systemctl enable apache2.service
	systemctl restart apache2.service

Możesz sprawdzić plik /var/log/svxlink gdzie zobaczysz log z uruchomienia svxlink


Programowanie modułu SA818
-------------------------------

Instalacja pakietu pyserial wymaganego do programowania SA818

	apt install python-pip
	pip2 install pyserial

Moduł SA818 wg użytego schematu jest podłączony do portu o nazwie /dev/ttyS2

Polecam użyć program w python uruchamiając:

	/opt/sa818/sa818-prg

gdzie przy wyborze modelu należy wybrać MODEL SA818 (opcje 3)

Program po wyborze modelu pyta o parametry ustawień modułu SA818 i na koniec
wyswietla w podsumowaniu ustawienia i po zatwierdzeniu ich wysyła je do modułu SA818

Ustaw poziom "squelch" na 2 a "volume" na 8 oraz "no" dla PreEmphasis, High Pass, Low Pass
Channel Spacing wybierz "Wide" 

Staraj sie nie aktywować (yes) Low i High Pass filter w SA818 bo moga spowodować że nie bedzie poprawnie
dekodowł CTCSS i być może DTMF svxlink.

Przykładowe ustawienia bez uzywania CTCSS:
------------------------------------------------------
     Channel Spacing: 1 
        Tx Frequency: 432.8250 
        Rx Frequency: 432.8250 
       Tx CTCSS code: 0000
       Rx CTCSS code: 0000
       Squelch Value: 2 
        Volume Value: 8 
 PreEmphasis Enabled: n 
   High Pass Enabled: n 
    Low Pass Enabled: n 
------------------------------------------------------


Wybierz QRG zgodnie z Bandplan dla 70cm

Instalacja innego oprogramowania do programowania SA818 które pozwala ustawiać indywidulanie
parametry SA818

    apt install python3-pip
    pip3 install sa818

Wykaz dostępnych opcji podczas programowania uruchom polecenie:

    sa818 -h

Patrz na przykłady poniżej i na https://github.com/0x9900/SA818

Ustawienie QRG i poziom blokady szumow
    
    sa818 --port /dev/ttyS2 radio --frequency 432.825 --squelch 4

Ustawienie SA818 poiomu audio z głosnika:

    sa818 --port /dev/ttyS2 volume --level 8

Ustawienia fitrów (disable)

    sa818 --port /dev/ttyS2 filters --emphasis yes --highpass yes --lowpass yes


Ustawienia wstępne karty dźwiękowej. Uruchom program alsamixer: 

	alsamixer 
	
Naciśnij klawisz F5 , aby wyświetlić wszystkie wejścia i wyjścia . 
Używając  TAB ,  strzałka w górę , w dół , w prawo , w lewo do nawigacji oraz
klawisz M lub spacja do włączania / wyłączania. 

Ustawienia wstępne
“Line Out” = 50 i ustaw na ON przyciskiem M 
“Line Out”: Stereo
“Mic1” = 0 i używając klawisza spacji  ustaw „L Capture R” na ON, Nie ustawiaj klawiszem M ON! 
“Mic1 Boo” = 38 
“DAC” = 51 i ustaw na ON za pomocą przycisku M
Wyłącz wszystkie inne ustawienia lub ustaw je na 0.
Zapisz ustawienia poleceniem:
	alsactl store

W pliku /etc/rc.local z pobranej wcześniej paczki podczas uruchamiania systemu są odczytywane 
ustawienia dla karty dźwiękowej dlatego jeśli wprowadzisz jakieś zmiany w ustawieniach 
zawsze je zapisz komendą:  alsactl store

SVXLink Dashboard ---------------------- Paczka którą pobrałeś z przykładową konfiguracją dla OrangePI Zero hotspot-fm.tgz zawiera pierwszą edycje Dashboard dla SVXLink. Dashboard został napisany w ciągu jednego "weekendu" i może być niedoskonały. Co zrobić, jeśli znajdziesz usterkę, problemy z dashboard: - Podjąć samemu analizę problemu i naprawić / zmodyfikować kod dashboard - Pogodzić się z niedogodnością i zaakceptować ten fakt - Użyć innych dostępnych dashboardów dla svxlink: https://github.com/kc1awv/SvxLink-Dashboard Dostęp do dashboard jest pod adresem IP Twojego OrangePI Zero http://ip_adres Musisz zrobić wstępną konfigurację dashboard. Zrób edycje pliku /var/www/html/include/config.php Zamiast N0CALL wpisz swój znak oraz wybierz dostęp do SVXReflectora API, do którego jesteś podłączony aby mieć na dashboard wykaz podłączonych nodów. Wykaz dostępnych adresów API znajdziesz w pliku /var/www/html/include/config.php Musisz wpisać znak komentarza // na początku lini define("URLSVXRAPI", ""); oraz usunąć // przed linią gdzie jest definicja dostępu do Twojego SVXReflectora API Jeśli używasz OZPI w wersji LTS należy w config.php ustawić CPU_TEMP_OFFSET wartość 30 aby dashboard pokazywał poprawnie temperature CPU. W pliku /var/wwww/html/include/tgdb.php wpisz numery TalkGroup oraz ich nazwy, jakie będą wyświetlane na dashboard. Dashboard pozwala wysłać komendy DTMF do svxlink poprzez podanie pełnego kodu np przełączanie Talk Group na SVXReflector ma składnie 91xxx# gdzie zamiast xxx należy podać numer TG np 912603# powoduje że nasz svxlink przechodzi na TG 2603, po 30 sekundach braku aktywność na wybranej TG wraca na domyślna TG (DEFAULT_TG) Mamy też dostępne zdefiniowane klawisze (patrz /var/www/html/include/config.php): TG 260 - przejście na FM Talk Group 260 Ogólnopolska TG 2602 - możesz ustawić własna lokalna TG w config.php METAR - aktywowanie raportu pogodowego z lotniska którego kod jest zdefiniowany w pliku /etc/svxlink/svxlink.d/ModuleMetar.conf w STARTDEFAULT i zamiast EPBY należy wpisać kod innego lotniska. Nazwy kodów znajdziecie w tym pliku. PARROT ON - włączenie tzw papugi PARROT OFF - wyłącznie papugi POWER OFF - wyłącznie komputera w bezpieczny sposób pozwala uniknąć uszkodzenia systemu. Aby klawisz zadziałał musisz w pliku /etc/sudoers wpisać linie: svxlink ALL=(ALL) NOPASSWD: /usr/sbin/poweroff W celach testowych możesz użyć podłączonego mikrofonu do karty dźwiękowej aby nadawać. W config.php jest dostępna opcja SHOWPTT i jeśli ustawisz na wartość TRUE (ważne duże litery) na dashboard będą dostępne dwa klawisze PTT ON i PTT OFF. Jeśli podłączysz mikrofon do karty dzwiękowej będziesz mógł tymi klawiszami włączyć odbiór Twojego audio z mikrofonu PTT ON lub wyłączyć PTT OFF. Jeśli nie będziesz używał już mikrofonu podłączoneg do karty dźwiękowej ustaw w config.php SHOWPTT na FALSE. Jeśli przestały działać dostępne klawisze w dashboard do przełaczania TG / PTT ON OFF itp należy zrobić: sudo cp /lib/systemd/system/apache2.service /etc/systemd/system/ sudo nano /etc/systemd/system/apache2.service zmien: PrivateTmp=true na PrivateTmp=false i zrób reboot komputera ==================================================================================== Zasilacz do hotspota Zwróć szczególną uwagę na zasilacz do Orange Pi Zero. Może on powodować że podczas nadawania Twojej trnasmisji do sieci svxlink, będzie słychać w tle Twojej transmisji "buczenie", "warczenie" jest to efekt mieszania sie w.cz. z kablem Twojego zasialcza i w efekcie nanosi sie na odbiornik SA818. Użyj dobrego zasilacza lub zrób 2 lub 3 zwoje na ferrycie typu zapinany na klips na kablu zasilajacym do Orange Pi Zero. Poczytaj o tym problemie w tym watku (2 strony): https://groups.io/g/SHARI/topic/hum_buzz_on_signal/73406860?p=Created%2C%2C%2C20%2C2%2C20%2C0&jump=1


Przykład DASHBOARD HotSpota