Experimenteren met de Raspberry Pi Zero – Weer plaatjes op de Display (deel – 9)

Hoe leuk is het om pictogrammen van het weer op de display te laten zien. Het idee is om 30 seconde de afbeelding van Radio Caroline te laten zien en de volgende 30 seconde een pictogram voor het weer. Ik heb de pictogrammen vast in een grafisch programma op mij computer gemaakt.

Daar komt de Zon

We gaan eerst een directory aanmaken waar we ze kunnen neerzetten.

cd

mkdir weerlive

cd weerlive

Nu halen we de pictogrammen op. Het zijn PNG bestanden van 128 x 128. Dit is het formaat van de display.

wget https://www.ph0dv.nl/ph0dv/weerlive/weerlive.zip

We gaan nu het programma zip installeren om de file te unzippen.

sudo apt-get install zip

Install ZIP

En we unzippen de file.

unzip weerlive.zip

We hebben nu een lijstje met alle pictogrammen.

ls -alh

De pictogrammen voor het weer

Omdat we maar 300x per dag op onze API key (gratis versie) het weer op mogen halen, haal ik ieder uur het actuele weerbericht op. De nauwkeurigheid van het weer is dus 1 uur. We gaan hiervoor een BASH file aanmaken.

sudo nano //etc/init.d/weerlive.sh

We maken de file leeg. Dit kun je doen door boven aan de file te gaan staan met de cursor en meerdere keren CTRL K in te geven totdat alle regels zijn gewist.

Onderstaande code plakken we in de file.

#!/bin/bash

curl -s “https://weerlive.nl/api/json-data-10min.php?key=XXXXXXXXXX&locatie=Huizen” | jq –raw-output .liveweer[].d0weer >/home/pi/weer.txt

exit 0

Let op, plaats je eigen key op de plek van de Xjes.

weerlive.sh

CTRL X en Y en file is opgeslagen.

Maak de file nu “executable” zodat hij kan worden uitgevoerd.

sudo chmod +x //etc/init.d/weerlive.sh

Met deze BASH file kunnen we het weerbericht ophalen en de informatie wordt opgeslagen in in de file weer.txt in de home directory. Je kunt dit testen.

Cat weer.txt

We gaan dit script elk uur laten uitvoeren. We doen dit met een Cron job. We hebben al eerder in deel x een “Cronjob” aangemaakt die wordt uitgevoerd bij het opstarten van een Raspberry Pi.

crontab -e -u pi

Met “crontab” kunnen we de “cronjobs” aanpassen. -e staat voor edit en -u, dit is de “cronjob” van de user pi. Dus de “cronjob” wordt uitgevoerd alsof het de user pi is.

We plaatsen de volgende regel als onderste regel.

0 * * * * sudo -u pi nohup //etc/init.d/weerlive.sh >/dev/null 2>&1

De 0**** betekend dat iedere 0ste minuut van het uur dit commando wordt uitgevoerd. Dat is dus op het hele uur. Op de “>/dev/null 2>&1” kom ik in een later aflevering terug als we het gaan hebben over log files.

Met CTRL X en Y sla je de “Cronjob” op.

We gaan er nu voor zorgen dat de informatie in weer.txt wordt omgezet naar een plaatje. Dit wordt een iets uitgebreider script.

sudo nano //etc/init.d/displayoutput.sh

We gaan de file displayoutput.sh aanmaken en copieeren het volgende script in de file.

!/bin/bash

b=$(</home/pi/weer.txt)
echo “$b”

if [ -z “$b” ]
then
b=$(</home/pi/smile.txt)
echo “$b”
fi

ffmpeg -v 0 -y -i /home/pi/weerlive/$b.png -vf scale=128:128,transpose=1 -vcodec rawvideo -f rawvideo -pix_fmt rgb565 – > /dev/fb1
sleep 30
ffmpeg -v 0 -y -i /home/pi/caroline.png -vf scale=128:128,transpose=1 -vcodec rawvideo -f rawvideo -pix_fmt rgb565 – > /dev/fb1

exit 0

CTRL X en Y voor het opslaan.

Wat staat hier precies?

b=$(</home/pi/weer.txt)
echo “$b”

Hiermee maak je een variabele aan en vul dit met de inhoud van weer.txt

if [ -z “$b” ]
then
b=$(</home/pi/smile.txt)
echo “$b”
fi

Een if statement, hier staat dat wanneer de variabele $b leeg is (-z) dan halen we de informatie uit de file smile.txt (b=$(</home/pi/smile.txt)
echo “$b”). Het kan nl voorkomen dat het script geen contact kan krijgen door een storing o.i.d. met weerlive.nl. I.p.v. een weer pictogram plaatsen we dan een smiley 🙂

Smiley

Met de ffmpeg comando’s en de sleep 30 wisselen we tussen de afbeelding van Radio Carloline en de weer pictogram in de variablele $b.

ffmpeg -v 0 -y -i /home/pi/weerlive/$b.png -vf scale=128:128,transpose=1 -vcodec rawvideo -f rawvideo -pix_fmt rgb565 – > /dev/fb1

De $b.png zet de variabelle om naar de afbeelding in png formaat.

Dit script willen we elke minuut uitvoeren. We gaan dus weer de cronjob aanpassen.

crontab -e -u pi

en we voegen de display output regel toe welke we iedere minuut laten uitvoeren.

*/1 * * * * sudo -u pi nohup //etc/init.d/displayoutput.sh >/dev/null 2>&1

De cronjob ziet er nu ongeveer zo uit.

Cronjob

*/1 **** betekend dat de cronjob iedere minuut wordt uitgevoerd.

We kunnen nu de cronjob reloaden zonder de Raspberry Pi te herstarten.

sudo service cron reload

Nu moeten we nog wel de file smile.txt aan maken.

cd

sudo nano smile.txt

Voeg het woord smile in de file

CTRLX en Y

Tot zover voor deze keer.

Experimenteren met de Raspberry Pi Zero – Het weerbericht (deel – 8)

Naast het logo van Radio Caroline wat op de display wordt gepresenteerd lijkt het mij leuk om een afbeelding van het huidige Weer te zien. Het idee is om de display een halve minuut de afbeelding van Radio Caroline te laten zien en een halve minuut het Weer plaatje.

foto: www.pietsweer.nl

Het weerbericht kunnen we verkrijgen bij weerlive.nl. Deze dienst heeft een API waarna je na registratie gratis gebruik van mag maken.

Een API (Application Programming Interface) is een software-interface die het mogelijk maakt dat twee applicaties met elkaar kunnen communiceren.

We gaan de informatie van het weer met een API ophalen bij weerlive.nl. Allereerst dien je je te registreren. Je krijgt dan een API key. Deze sleutel heb je nodig om je voor de authenticatie bij de API. Registreer je hier om de API Key te ontvangen.

We gaan weer inloggen op de Raspberry Pi.

Voor dit experiment hebben we jq nodig.

sudo apt install jq

Met dit commando installeert u jq. jq is een json processor waarmee we een json string kunnen filteren en de gegevens er uit kunnen halen die we nodig hebben.

We maken ook gebruik van het commando Curl. Curl is een commandline tool waarmee je diverse soorten gegevens kunt downloaden. Curl staat voor “Client URL”.

met de API Key kunnen we nu een aanvraag sturen naar de API van weerlive.nl. Vul op de XXXXXXXXXX in onderstaande string je eigen API key in. Op de locatie kun je je eigen woonplaats invullen. Je kunt hier ook GPS coordinaten invullen. Later gaan we hier nog wat mee doen voor GPS ontvangst.

curl -s “https://weerlive.nl/api/json-data-10min.php?key=XXXXXXXXXX&locatie=Huizen”

Curl

We krijgen heel veel informatie terug in een JSON string. d0 is vandaag. d0 staat voor dag nul. d1 is de voorspelling voor morgen. En er is ook nog een d2 voor overmorgen. Ik ben met name geïnteresseerd in d0weer. Dit is het huidige weer situatie van vandaag. En dit wil ik vertalen in een pictogram.

Met onderstaand commando stoppen we de huidige weersituatie in de variable “b”. We gebruiken hier Curl en filteren met jq d0weer uit de opgevraagde string. Vul op de XXXXXXXXXX in onderstaande string je eigen API key in.

b=$(curl -s “https://weerlive.nl/api/json-data-10min.php?key=XXXXXXXXXX&locatie=Huizen” | jq –raw-output .liveweer[].d0weer)

Met echo $b kunnen we laten zien wat er in de variabele b is geschreven.

Curl en jq

Het is bewolkt.

Let op je hebt een limiet van 300x opvragen per dag. Dit is omdat het een gratis versie is. De volgende Variabele kunnen we ontvangen van weerlive.nl.

De mogelijke variabelen zijn:
zonnig
bliksem
regen
buien
hagel
mist
sneeuw
bewolkt
halfbewolkt
zwaarbewolkt
nachtmist
helderenacht
wolkennacht

In het volgende deel gaan we BASH scripts maken en deze sturen we weer aan met een Cronjob om de fotootjes op de display te laten zien.

Experimenteren met de Raspberry Pi Zero – De Display (deel – 7)

Ik had nog een display liggen die ik ooit voor een projectje had besteld en deze past prima op de Raspberry Pi zero. Van de week had ik wat problemen met de Display omdat hij los begon te raken van de printplaat. Ik heb de randen voorzichtig weer vastgeplakt met een lijm pistool.

Display vast gelijmd

De display is van “Waveshare” en is een 1.44 inch display met joystick.

We beginnen met het installeren van wat drivers die we nodig hebben.

sudo apt-get install fbset raspi-config raspi-gpio

In het configuratie menu van Raspberry Pi zetten we nu SPI aan.

sudo raspi-config

>>Interface Options

>>P4 SPI

>>Enable

We gaan nu de modules file aanpassen

sudo raspi-config

Voeg onderstaande regels toe onderaan de file.

spi-bcm2835
fbtft_device

Nog een filetje aanpassen de fbtft.conf.

sudo nano /etc/modprobe.d/fbtft.conf

Voeg deze regel aan de file toe.

options fbtft_device name=adafruit18_green gpios=reset:27,dc:25,cs:8,led:24 speed=40000000 bgr=1 fps=60 custom=1 height=128 width=128 rotate=180

Wat je ziet is dat we de display 180 graden draaien. Dit is omdat er een bug in deze display zit. Hij laat nl een storend randje zien aan de zijkant van de display. Als we hem 180 graden draaien zijn we van het probleem verlost.

We gaan nu de Raspberry Pi herstarten.

sudo shutdown -r now

We kunnen nu controleren of we een extra display hebben op de Raspberry Pi.

ls /dev/fb*

De fb1 is onze display.

fbset -i -fb /dev/fb1

We gaan nu een foto downloaden.

cd

wget https://mytuner.global.ssl.fastly.net/media/tvos_radios/mjHvU9YY9n.png

En deze hernoemen we na de download.

mv mjHvU9YY9n.png caroline.png

Als het goed is hebben we nu een foto in onze home directory staan en die heeft de naam caroline.png.

We gaan nu een BASH filetje maken. Dit is een scriptje waarmee we alles opstarten zodra we de spanning er op zetten.

sudo nano //etc/init.d/caroline.sh

In de file plaatsen we de volgende regels.

!/bin/bash

ffmpeg -v 0 -y -i /home/pi/caroline.png -vf scale=128:128,transpose=1 -vcodec rawvideo -f rawvideo -pix_fmt rgb565 – > /dev/fb1
bluetoothctl connect 30:C0:1B:C5:25:DD
sleep 10
ffplay http://sc6.radiocaroline.net:8040

Dit heeft wat uitleg nodig. Een bash file is een script in linux waarin je allerlei commando’s uit kan voeren. Voor het opstarten van onze radio stream en het toveren van een fotootje op de display moeten we meerdere commando’s uitvoeren. Dit kun je in een bash scriptje kwijt.

De bovenste regel stuurt de foto naar de display. Dit doe je met het programma ffmpeg wat we eerder hebben geïnstalleerd. In de regel vind je de groote 128×128 en transpose zorgt er voor dat we de display weer 90 graden doordraaien. Je komt nu exact in de positie waar je het logo wilt hebben.

De bluetoothctl connect zorgt er voor dat je speaker weer connect. Let op het MAC adres is mijn MAC adres. Plaats hier het MAC adress van je eigen speaker.

sleep 10 is een pauze van 10 seconde. Ik wil nl zeker weten dat de Bluetooth speaker geconnect is. En met ffplay opennen we de stream.

De file moeten we nu executable maken zodat hij ook daadwerkelijk uitgevoerd kan worden. Dit kan met chmod.

sudo chmod +x //etc/init.d/caroline.sh

Er zijn meerdere methodes om een file uit te laten voeren bij het opstarten van de Raspberry Pi. Mijn voorkeur gaat naar het gebruik van een cronjob.

crontab -e -u pi

Kies 1
Voeg de volgende regel toe aan de cron file

@reboot sudo -u pi nohup //etc/init.d/caroline.sh

Wat staat hier precies: @reboot is na het herstarten van de Raspberry Pi. sudo, we gaan een commando uitvoeren als superuser, -u vanuit de user “pinohup starten we op zonder dat we een terminal scherm nodig hebben, //etc/init.d/caroline.sh, het bash script caroline.sh welke zich bevind in de map //etc/init.d/.

We gaan nu testen. Zet je speaker aan. en herstart de Raspberry Pi.

sudo shutdown -r now

Na het opstarten komt er muziek uit je boxje en zie je op de display het logo van Radio Caroline.

Display na opstarten

Volgende keer wil ik de foto van Radio Caroline laten wisselen met een foto van het weerbericht.

Experimenteren met de Raspberry Pi Zero – Bluetooth (deel – 6)

In deze aflevering gaan we kijken hoe we de Bluetooth van de Raspberry Pi kunnen gebruiken om met een Bluetooth JBL speaker naar de Radio te luisteren. Ook gaan we een logo van het Radio station op de display tonen.

Allereerst gaan we ffmpeg installeren. Met dit programma kun je audio bestanden streamen. En nog veel meer. De website van FFMPEG zegt zelf: “decode, encode, transcode, mux, demux, stream, filter and play pretty much anything that humans and machines have created.”

Dit is dus een hele mooie tool. En nu de kracht van Linux. Type het volgende commando in.

We gaan voor de zekerheid eerst naar onze home directory.

cd

En nu installeren we FFMPEG.

sudo apt install ffmpeg

En hij is geinstalleerd.

Nu gaan we Bluealsa installeren. Met Bluealsa kun je Bluetooth apparaten registreren op je systeem.

sudo apt-get install bluealsa

sudo service bluealsa start

Schakel je JBL GO, of een ander BleuTooth device, in en druk op de Bluetooth discovery knop.

We gaan nu onze JBL GO zoeken.

sudo bluetoothctl

We komen nu in het bluetooth menu en zetten scan on.

[bluetooth] scan on

Bluetooth scan

Ik schrok van het aantal devices wat er langs komt. Dit was een behoorlijke lijst.

In de lijst zie je de Bluetooth speakers staan.

[NEW] Device 30:C0:1B:C5:25:DD JBL GO

Het MAC adress is belangrijk dus deze copieeren we even naar kladblok o.i.d.

Let op: In de voorbeelden hieronder gebruik ik het MAC adress van mijn JBL GO. Gebruik hier het MAC Adress van je eigen Bluetooth Speaker.

Nu gaan we hem pairen, trusten en connecten. Het kan zijn dat je inmiddels weer op de discovery button op je speaker moet drukken.

[bluetooth] pair 30:C0:1B:C5:25:DD
[bluetooth] trust 30:C0:1B:C5:25:DD
[bluetooth] connect 30:C0:1B:C5:25:DD
[bluetooth] exit

Om Bluetooth af te kunnen spelen vanaf de User pi ,moet je de User pi aan de Bluetooth groep toevoegen. Anders gaat het niet werken.

getent group | grep pi

Je ziet we zijn geen lid van de bluetooth groep. Nu voegen we de User pi toe aan de Bluetooth groep.

sudo usermod -G bluetooth -a pi

getent group | grep pi

Bluetooth group

We gaan het systeem herstarten en loggen opnieuw in.

sudo shutdown -r now

Na de herstart moet je de JBL GO speaker opnieuw connecten.

bluetoothctl connect 30:C0:1B:C5:25:DD

We gaan eens kijken of het allemaal werkt. We downloaden een klein wav filetje om te testen.

wget www.kozco.com/tech/organfinale.wav

En dit spelen we af.

aplay -D bluealsa:SRV=org.bluealsa,DEV=30:C0:1B:C5:25:DD,PROFILE=a2dp organfinale.wav

Als het werkte gaan we een standaard profiel aanmaken voor onze JBL GO speaker.

cd

sudo nano ~/.asoundrc

In dit filetje plakken we het volgende profiel. Let op dat je het MAC adress van je eigen speaker in het filetje plakt.

defaults.bluealsa.interface “hci0”
defaults.bluealsa.device “30:C0:1B:C5:25:DD
defaults.bluealsa.profile “a2dp”
defaults.bluealsa.delay 10000

pcm.btreceiver {
type plug
slave.pcm {
type bluealsa
device “30:C0:1B:C5:25:DD
profile “a2dp”
}
hint {
show on
description “Bluetooth Receiver”
}
}pcm.!default {
type plug
slave.pcm “btreceiver”
}

We slaan dit op met CTRL X en Y en herstarten weer het systeem.

sudo shutdown -r now

Na de herstart weer connecten:

bluetoothctl connect 30:C0:1B:C5:25:DD

Na de herstart testen we de Radio Stream.

ffplay http://sc6.radiocaroline.net:8040

Als het goed is hoor je nu Radio Caroline. Volgende keer gaan we een logo op het display toveren.

Experimenteren met de Raspberry Pi Zero – Een USB Bus en een Display (deel – 5)

Het OTG kabeltje is niet echt makkelijk en daarom heb ik besloten een USB aansluiting op de Raspberry Pi Zero te maken. Hier doen we de USB Stick in waarop het OS is geïnstalleerd. Voor dit projectje hebben we een USB Bus deel nodig. Op E-Bay of op een radio onderdelen markt zijn deze wel te krijgen.

USB Bus

Allereerst solderen we 4 draadjes aan de BUS. Vervolgens plakken we met een lijmpistool de bus op de achterkant van de Raspberry Pi. Leg eerst een dun laagje lijm op de Raspberry Pi als isolatie en druk de bus daar in. De buitenste rode en blauwe draad zijn de + en de -. De middelste rode en groene draad zijn de + en de – van de data.

Bedrading

Nu buigen we voorzichtig de draden naar de soldeer veldjes en strippen de uiteinde van de draden blank. Soldeer de draden volgens onderstaande afbeelding vast.

USB Bus

Ik heb ook nog een behuizing en (met open achterkant) en pennetjes gemonteerd. Op de pennen kan ik een display aansluiten. Let op, de eerste mini USB bus is voor de voedingsspanning.

Display

Het eindresultaat ziet er als bovenstaande afbeelding uit.

Volgende keer gaan we Bluetooth configureren zodat we er ook geluid uit kunnen krijgen.