Stap 3: Instellen van de softwarestack
Installeren naar de OS van uw keuze op de Pi, gebruikten we Raspbian, omdat mensen die bekend zijn met de Debian/Ubuntu vinden het makkelijk te gebruiken. Deze stap zullen volgen Raspbian verdragen; Als u wilt, maar dan heb je om te worden aangepast aan de smaak die wordt gebruikt, kunt u elke distributie gebruiken.
Opnamen gaat gebeuren met behulp van raspistill, dit moet worden geïnstalleerd op het apparaat. Conversie naar SSTV gemoduleerde geluidsbestand zal gebeuren met behulp van PySSTV en UNIXSSTV, dus je Python, Git, GCC moet en daarvoor maken. Laatste afhankelijkheden zijn standaard op Raspbian, aanwezig, dus je hoeft de twee SSTV om software te installeren door het uitvoeren van de volgende opdrachten.
sudo pip install PySSTV git clone <a href="https://github.com/dnet/unixsstv" rel="nofollow">https://github.com/dnet/unixsstv</a> make -C unixsstv
De afbeelding zal worden genomen en in Python voorverwerkt, een voorbeeldscript vindt u hieronder:
from PIL import Image from pysstv.color import MartinM2 from subprocess import check_output from cStringIO import StringIO import RPi.GPIO as GPIO import struct, sys TX_PIN = 18 img = Image.open(StringIO(check_output(['raspistill', '--output', '-', '--width', '320', '--height', '256', '-e', 'bmp']))) overlay = Image.open('overlay.png') img.paste(overlay, (0, 0), overlay) img = img.resize((MartinM2.WIDTH, MartinM2.HEIGHT)) sstv = MartinM2(img, 44100, 16) for freq, msec in sstv.gen_freq_bits(): sys.stdout.write(struct.pack('ff', freq, msec)) GPIO.setmode(GPIO.BCM) GPIO.setup(TX_PIN, GPIO.OUT) GPIO.output(TX_PIN, True)
De afbeelding in overlay.png zal worden gebracht op de foto, dus u zult moeten construeren op een manier dat het merendeel van het transparant is, aangezien die pixels zullen de enigen die kunnen worden gezien van de foto. Voel je vrij om te experimenteren, maar zorg ervoor dat als u gebruik van ham (amateur) radiofrequenties, je callsign verzenden door de gegevens op de afbeelding. (Geavanceerde gebruikers kunnen proberen en gebruiken de FSK Roepteken encoder in PySSTV.)
Martin M2 werd geselecteerd omdat het een uitvoer van kleur kan vrij mooi, waarbij nog maar één minuut voor het verzenden van een afbeelding. 44100 Hz en 16-bits zijn ook goede standaardparameters, maar voel je vrij om te experimenteren met die ook, maar zorg ervoor dat aan deze parameters in andere onderdelen.
Aangezien dit script zijn werk eindigt door het activeren van de PTT en schrijven van voorverwerkte SSTV gegevens op de standaard uitvoer (stdout), een andere component nodig is die de verwerking heeft voltooid, speelt het geluid op de audio-uitgang, en deactiveert PTT op het einde.
Hiervoor moet een shellscript worden gemaakt als hieronder:
#!/bin/sh python /home/pi/beacon.py | /home/pi/unixsstv/gen_values 44100 >/tmp/wav.bin play -q -r 44100 -t f32 -c 1 --norm /tmp/wav.bin >/dev/null 2>&1 python -c 'import RPi.GPIO as G; G.setmode(G.BCM); G.setup(18, G.OUT); G.output(18, False); G.cleanup()' >/dev/null 2>&1 rm -f /tmp/wav.bin
De Python script hierboven is genoemd beacon.py en bevindt zich in de basismap van de standaard pi gebruiker, indien dit op uw apparaat verschilt, moet u dit wijzigen. De output is via leidingen in gen_values van UNIXSSTV, en vervolgens opgeslagen in een bestand met geen header, gewoon binaire inhoud, vandaar de .bin verlenging.
Dit wordt later gespeeld met de opdracht spelen voor sox, die kan worden geïnstalleerd op Raspbian uit het pakket sox, maar mogelijk moet u dat handmatig doen op andere distributies. Tot slot de PTT is uitgeschakeld door de Python-code rechtstreeks aanroepen in zogenaamde inlinestijl, en rm verwijdert de tijdelijke voorverwerkte bestand.
Opmerking: aangezien GPIO kan alleen worden gemanipuleerd door root, moet u deze shell-script uit te voeren als root als goed. Play zal ook gebruik van het HDMI-audio kanaal standaard, dus zorg ervoor dat HDMI verbinding te verbreken terwijl het proberen van dit deel. Als geen geluid wordt afgespeeld, controleert ook het volumeniveau (bijvoorbeeld met alsamixer).
Hebben deze, de opname en doorgeven van de foto kunnen worden geprobeerd door het uitvoeren van de bovenstaande shellscript van een console (serieel, lokaal, GUI) of via SSH. Als het werkt goed, is maar één ding nodig voor de geregelde toezending zogenaamde cron. Dit programma voert op Unix-achtige besturingssystemen zoals Linux, vooraf gedefinieerde taken volgens een schema dat kan worden ingesteld met behulp van crontab -e, waarbij -e staat voor bewerken. Hierdoor verschijnt de huidige planning van de gebruiker (dit moet root voor deze taak) en kunnen in de standaardeditor van de gebruiker te bewerken. Er is ook wat hulp daar met betrekking tot de syntaxis, en bijvoorbeeld het verzenden van een afbeelding elke 15 minuten ziet er zo uitziet:
*/15 * * * * sh /home/pi/beacon.sh
Deze setup kan worden getest door de Raspberry Pi aansluiten op een USB-lader en als alles werkt, kunt u blijven door het te vervangen met zonne-energie.