Raspberry Pi 2, Model B 1GB

De nieuwste en snellere Raspberry Pi.

Waren de berichten bij de release van de Raspberry Pi Type B + halverwege 2014 nog, dat er voorlopig geen nieuwe (processor technisch) verbeterde versie zou worden uitgebracht, nu een half jaar later heb ik een ‘supersnelle’ Linux computer op mijn bureau staan / liggen: de Raspberry Pi 2, Model B 1 GB.

SNC17130

Deze RPi is qua vormfactor gelijk aan de Model B+, dus met 4 USB2 poorten, HDMI, gecombineerde AV connector, 100Mb LAN, micro USB voeding en de 40polige GPIO. Verder de aansluiting voor de RPi CSI camera en de connector voor de toekomstige RPi DSI TFT scherm. Maar….. deze versie 2 heeft een heel belangrijke hardware verbetering, er is op het board namelijk een QUAD Core Broadcom BCM2836 CPU met 1GB RAM geplaatst! Er is dus een volledig nieuwe processor toegepast waardoor de performance een factor 6 verbeterd is t.o.v. versie 1 type B met 512 MB RAM.

(more…)

Raspberry Pi + RTL Dongle

Een universele breedbandontvanger ontvanger.

De experimenten met de Raspberry Pi en RTL Dongle gaat verder. Had ik in een eerder blog al verteld dat het mogelijk is om de combinatie RPi en Dongle als remote ontvanger te gebruiken, nu een blog over een desktop versie met andere software en een heus display.

Voor dit experiment gebruik ik een Raspberry Pi type A board. Dus geen LAN aansluiting. Ik heb een monitor aangesloten en een toetsenbord en muis, dus kan alle kanten op. Overigens via WiFi ben ik op het huisnetwerk (en dus internet) aangesloten. Verder is op de gevoede USB 2.0 Hub een RTL Dongle aangesloten die op een buitenantenne is geplugt!

Werkt het? Jein. Het koste me wel wat moeite en knutselen (met software en parameters dan) maar ik ben eigenlijk wel tevreden over het resultaat en hoop dat er nog betere software komt. Een beschrijving van de situatie.

Wij amateurs zijn verwent met de SDR# software op Windows of krachtiger Linux systemen. Hiermee is werkelijk alles te bedienen, besturen en met name de selectiviteit is prima. Op een RPi werkt dit echter niet 123. Althans ik ben nog geen dergelijke software tegengekomen die op een Raspberry Pi stand houd.

Wel ben ik tegen een andere oplossing gestoten. Daarvoor moet je allereerst de software installeren zoals beschreven in mijn vorige post: http://pa3ang.nl/wp/archives/3405
Na de installatie heb je dan de volgende software: rtl_ftp, rtl_test, rtl_adsb, rtl_sdr en rtl_fm. Deze laatste is nu voor ons van belang. Dit is namelijk zoals de ontwerper zegt:

Rtl_fm is a little utility I wrote for the rtl-sdr project. The program was made to fill a gap in software defined radio: all the computers weaker than a Pentium 4. Basically, an Atom processor processor does not have enough oomph to demodulate something as simple as narrow band FM using the standard tools. (Recently a high performance FM demodulator was released, Simple FM but it works only possibly on newer Atoms.) So rtl_fm was written with one goal, efficiency, in mind.

Het is dus een lichtgewicht programmaatje om FM (en AM) te demoduleren. Nou en dat doet het. Je kunt de bandbreedte (van de demodulator) instellen en omdat het programma ook geschikt is voor WideBand FM is er aan de ‘voorkant’ weinig narrowband selectiviteit. Sterk nabuursignalen hoor je dus doorbreken. Dit is een belangrijke tekortkoming en maken het programma feitelijk ongeschikt voor onze radioamateur toepassingen. Echter op een ‘rustige’ 2 meter band komt PI3UTR prima binnen in Zwolle en breekt Apeldoorn op 145.725 (100 kHz hoger) niet door maar PI3MEP in Meppel op 25kHz hoger wel.

Je kunt veel instellen bij rtl_fm. In feite alles wat belangrijk is. O ja, je moet een geschikte player hebben om het ruwe signaal naar te pipe-en. aplay zit standaard in Wheezy, maar er wordt ook gebruik gemaakt van play. Dit is een player programma welke onderdeel is van het Sox pakket. Dus $: sudo apt-get install sox Als je dan toch bezig bent installeer dan ook even het multimon programma waarmee je allerlei digitale signalen kunt decoderen (nee geen D-STAR en C2000). $: sudo apt-get install multimon

Ondertussen heb ik een klein schriptje geschreven om snel de mode, frequentie, squelch en decoder bandbreedte te kunnen veranderen. Het is verre van af!

#!/bin/bash
#
# Radio station script for rtl_fm met play
# by <pa3ang@xs4all.nl>
#
# Version 1.0
# 2013-04-30
# http://www.pa3ang.nl
#

# Copy/redirect output to stderr
function StdErr () {
cat – 1>&2
}

# Help
# 1st argument is a mode, 2nd is frequency in MHz, 3rd is squelch (optional), 4th is bandwidth
# mode AM, NFM, WFM
# freq in MHz with decimal .
# squelch  value 0 – 255
# bandwidth  in kHz without k

if [[ $1 == “AM” ]]; then
# mostly VHF aircomms 118 – 136 MHz
killall -9 rtl_fm
if [ -z “$3″ ]; then
sq=”120″
else
sq=$3
fi
gn=”A”
ppm=”62″
if [ -z “$4″ ]; then
bw=”8k”
else
bw=$4
fi
rtl_fm -M -f $2M -l $sq -s $bw -p $ppm | play -r $bw -t raw -e signed-integer -b 16 -c 1 -V1 – -q &
fi

if [[ $1 == “NFM” ]]; then
killall -9 rtl_fm
if [ -z “$3″ ]; then
sq=”120″
else
sq=$3
fi
gn=”A”
# ppm checked for VHF
ppm=”90″
if [ -z “$4″ ]; then
bw=”16k”
else
bw=$4
fi
rtl_fm -N -E -f $2M -l $sq -o 1 -s $bw -p $ppm | play -r $bw -t raw -e signed-integer -b 16 -c 1 -V1 – -q &
fi

if [[ $1 == “WFM” ]]; then
# FM Band 88 – 108 MHz, WBFM only
killall -9 rtl_fm
sq=”0″
gn=”A”
bw=”170″
# aplay player !
rtl_fm -W -f $2M -l 0 -p 0 -o 4 | aplay -r 32K -f S16_LE -t raw -c 1 -q &
fi

# info on BitWizard RPI-UI
sudo bw_tool -a 94 -C -r 17 -v 0 -t “$2” MHz, “$1”
sudo bw_tool -a 94 -r 17 -v 32 -t “s$sq|g$gn|p$ppm|b$bw”

exit $ERR_OK

Een simple script met de naam radiofm wat je aanmaakt in je /home/pi directory en maak hem dan executable met $:  sudo chmod +x radiofm

De mogelijke command’s:
./radiofm WFM 99.4  (FM ontvangst in mono!)
./radiofm NFM 145.625 120 12   (mode, frequentie in MHz, squelch nivo en bandbreedte)
./radiofm AM 126.2 120  (AM ontvangst)
etc.

Het script schrijft ook info naar het BitWizard display. Het volgende projectje is een Python script met uitlezing van de knopjes en misschien een draaischakelaar (encoder) aansluiten.

Ik wilde in elk geval weten of het project kans van slagen heeft en met de eerder gemelde probleem van de selectiviteit lijkt het toch de inspanning waard om nog even verder te programmeren.

Nuttige linkjes met veel info:
http://superkuh.com/rtlsdr.html
http://dekar.wc3edit.net/2012/05/24/multimonng
http://kmkeen.com/rtl-demod-guide/index.html
http://sdr.osmocom.org/trac/wiki/rtl-sdr

Raspberry Pi Internet Radio

Eerste project met een add-on UI print

Je bent radioman of niet. Dus het eerste project met wat meer voeten in de aarde zou hebben moest een internet radio ‘ontvanger’ worden met display en schakelaars. Hiermee kan je hem immers ook stand alone gebruiken. Dus zonder beeldscherm, keyboard of externe pc via SSH of VNC.

Nou ik kan jullie meedelen, het is gelukt!

Al vrij snel kwam ik met googlen BitWizard tegen. Deze hobby-isten club (trouwens ook radioamateurs) heeft hele handige, leuke en prijsgunstige producten voor je op de plank liggen, waaronder een SPi User Interface opsteek print. Deze unit heeft dezelfde afmetingen als de Raspberry Pi en ik heb hem voorlopig met een extra 26 pin long header door de behuizing heen gemonteerd.

De UI print heeft een HD44780 compatble 2 x 16 karaters display en 6 schakelaars. Verder zijn alle RPi in en output lijnen beschikbaar op de print. Vandaar de uitstekende printheaders (kunnen we er altijd nog afknippen als we ze niet gaan gebruiken).

Overigens, je moet wel een beetje ‘nerd’ zijn om de boel aan de gang te krijgen. Er is wel documentatie beschikbaar, maar je moet de nodige handelingen verrichten om de kaart door de RPi te laten herkennen. Vervolgens moet je git installeren ($ apt-get install git) en daarna bw_tool.

Nu een paar zaken waar ik tegenaan liep:

  • In eerste instantie kon ik de kaart in het geheel niet bereiken. Het viel me op dat het display niet mooi de karakters weergaf. De oorzaak bleek uiteindelijk de voedingspanning te zijn. Je moet er echt op letten om een goede USB<->micro kabel te gebruiken en dat de 5 volt ‘USB’ voeding voldiende stroom kan leveren. Ik gebruik nu een ‘auto-sigaretten-aansteker-adapter’ waar 2A op staat die in mijn station voeding van 10A is aangesloten.
  • Er zijn voorbeelden op internet te vinden die niet werken! Dit komt door een klein verschil op de GPIO bus van de RPi tusen versie 1 en 2 waardoor de adressen (nummer) veranderd zijn.
  • De aangemaakt /dev devices verlenen geen rw (read write) rechten aan all. Hierdoor moet je alle bw_tool command’s met sudo beginnen. (of $ sudo chmod a+rw /dev/spi*)
  • De SPI_UI device naam is niet /dev/I2C-0 en /dev/I2C-1 maar /dev/spidev0.0 en /dev/spidev0.1. Hierdoor werd ik door de diverse voorbeelden ook behoorlijk op het verkeerde been gezet.
  • Mijn SPI_ rpi_ui 1.3 start op met de tekst A: 94 op de tweede lijn. Dit is dus het adres van het board / display en niet 82 zoals in veel voorbeelden.

Goed dit wetende kon ik teksten op het display krijgen en vervolgens ook de schakelaars uitlezen. Nu dus op naar een eerste aanzet voor een bedienbare internetradio.

Ik had al een radio script. Dit script wert samen met de xmms2 player. Het installatiescript vind je hier  (www.dronkert.net/misc/radio.html).  Volg de instructies en je kunt al aan de slag met ontvangst.

Ik heb hierna het script aangepast om de zenderinformatie op het SPI schermpje te plaatsen. De code van het script radio ziet er dan als volgt uit:

else
		if [ -f $DBFILE ]; then
			curstation=$(cat $DBFILE | grep --colour=never -m 1 -F "$curstream" | grep --colour=never -oP '^\S+')
			# added lookup real name in DBFILE (pa3ang)
			curname=$(cat $DBFILE | grep --colour=never -A 1 "$curstream" | tail -n 1)
			if [ -z "$curstation" ]; then
				curstation="(station not found)"
			fi
		else
			curstation="(station database not found at \"$DBFILE\")"
		fi
	fi

	echo
	if [ ! -z "$curstation" ]; then
               echo -n "   Select  : "
               echo $curstation
 		echo -n "   Station : "
		echo $curname
	fi
	if [ ! -z "$curstream" ]; then
		echo -n "   Stream  : "
		echo $curstream
	fi
	if [ ! -z "$curvolume" ]; then
		echo -n "   Volume  : "
		echo $curvolume
	fi
	echo

        # Info on SPI display
  	sudo bw_tool -a 94 -C
	# Display lines
	# Goto Pos 0 on Line1
  	sudo bw_tool -a 94 -r 17 -v 0
  	sudo bw_tool -a 94 -t $curname
	# Goto Pos 0 on Line 2
  	sudo bw_tool -a 94 -r 17 -v 32
  	sudo bw_tool -a 94 -t "RPi inet radio"

	exit $ERR_OK

Er zijn nog wel wat meer aanpassingen. De source zal ook nog wel wijzigen. Je kunt hem hier downloaden.

Ook moet de file .radiodb aangepast worden en wel op elke 2e regel moet de ‘echte’ en toonbare naam van het station ingevoerd worden.

10gold  	http://82.201.100.23/Radio10Gold
Radio 10 Gold
pi1utr-rr      	http://relay.radioreference.com:80/401514669
PI1UTR - DCS007B

Ja en toen nog een bediening. Toevallig was zoonlief even thuis. Ja de ‘nerd’ die de meest ingewikkelde problemen weet op te lossen. Hij heeft een python script voor me geschreven, waarmee ik niet alleen een eenvoudig script heb wat ik verder uit kan breiden, maar ook een start kan maken met Python, de bij de Raspberry Pi ‘meegeleverde’ programmeertaal.

Het programaatje inetradio.py ziet er als volgt uit:

from subprocess import *
from time import sleep

print "\nRPi inet radio with BitWizard RPi UI board.\n"
call(["/usr/local/bin/radio", "on"])
sleep(1)
call(["/usr/local/bin/radio"])
bank = 1

channel = {
	"00001010": "bnr",
	"00000808": "radio2",
	"00000404": "10gold",
	"00000202": "radio4",
	"00000101": "sky",
	"00003030": "pi1utr-rr",
	"00002828": "pi3utr-rr",
	"00002424": "pi2rtd",
	"00002222": "rx320a"
}
delay = 0
quit = 0
counter = 0
while not quit:
	output = Popen(["/usr/bin/bw_tool", "-a", "94", "-R", "30:i"], stdout=PIPE).communicate()[0].strip()
	if output == "00002121":
		call(["/usr/local/bin/radio", "off"])
		quit = 1
	if output in channel:
		call(["/usr/local/bin/radio", channel[output]])
		sleep(1)
		call(["/usr/local/bin/radio"])
		counter = 0
		delay = 0
	if output == "00002020":
		delay = delay +1
	if delay == 100:
		call(["/usr/local/bin/radio"])
		delay = 0
	if counter == 1000:
		call(["/usr/local/bin/radio"])
	counter = counter + 1

Ook dit programma zal nog sterk gaan veranderen. De sourcecode kun je hier ophalen.

De werking is als volgt:

  1. Bij het starten van inetradio.py wordt de ontvanger aangezet en start hij op het laatst afgestemde station, tenzij het een koude (reboot) start is.
  2. De bediening van de schakelaars is als volgt:
    • schakelaar 1 – shift en bij 2 seconden wordt het display gerefreshed
    • schakelaar 2 – preset 1 en preset 6 bij shift gelijktijdig indrukken
    • schakelaar 3 – preset 2 en preset 7
    • schakelaar 4 – preset 3 en preset 8
    • schakelaar 5 – preset 4 en preset 9
    • schakelaar 6 – preset 5
  3. Toets 1 en toets 6 gelijktijdig is radio uit en bij radio uit, gaat hij weer aan!
  4. Als je ‘handmatig’ van station wisselt met pi@raspberrypi ~ $  radio “zender” dan kun je door een display refresh (2 sec. schakelaar 1) de stationsnaam in beeld krijgen.

LET OP : De juiste stationsnaam komt alleen in beeld als de stream gevonden en gestart kan worden!

Als de radio uit staat (maar het inetradio programma draait wel) dan heb je de volgende functies:

  • schakelaar 2 – datum en tijd
  • schakelaar 3 –
  • schakelaar 4 –
  • schakelaar 5 –
  • schakelaar 6 – inetradio.py programma wordt definitief gestopt

Het geheel draait dus gewoon met Raspbian “wheezy” op een type B versie 2 board. Zoals gezegd zal de programmatuur nog verder verbeteren. Ook is de .radiodb file door mij aangepast.  Voor de goede order, volg de instructies op de hierboven gelinkte sites. Aanvullende source code welke door mij geschreven is / wordt staat hieronder. Misschien wordt het nog wat en komt er gewoon een automatische install van het geheel.

bash script radio
http://pa3ang.nl/rpi/radio

Python programma  inetradio.py
http://pa3ang.nl/rpi/inetradio.py

database met stations .radiodb
http://pa3ang.nl/rpi/.radiodb

suc6, PA3ANG

 

UPDATE  (2 april 2013)

Nu ook mobiel via een WiFi link en draaiend op een Type A board. Dus minder stroomverbruik door de RPi zelf waardoor power overblijft voor het UI boardje. Nu nog een goede 5 volt accu eraan en je hebt een echte portable internetradio.

Ps: Het blijkt dat deze nano WiFi dongles niet stabiel zijn in de hoge 2,4GHz kanalen. Ik heb omgeschakeld van kanaal 13 naar kanaal 2 en nu werkt het lekker stabiel en ook redelijk goed daar waar de veldsterkte laag is. De WiFi start tijdens het booten zelf op (headless gebruik van de RPi) en verbind met het voorkeursnetwerk.

UPDATE  (23 april 2013)

Een nieuwe behuizing en een Type A Raspberry Pi. De behuizing is verkrijgbaar bij mijn vaste leverancier en is super compact voor deze uitvoering van de RPi.

Het wordt steeds mooier! Ook wordt er nog druk gesleuteld aan het script dus we zullen eerdaags een update op de website plaatsen.