Outils pour utilisateurs

Outils du site


raspberry-pi_sstv_code

Configuration du Raspberry-Pi pour de la SSTV

La suite a été testé sur un Raspberry-Pi 1 Modèle B et Raspberry-Pi 2 Modèle B avec la caméra officiel du Raspberry-Pi. J'utilise comme OS, Minibian. C'est une version allégé de Raspbian sans interface graphique.

Installation des paquets

apt-get install -y raspi-config keyboard-configuration nano gcc g++ sox imagemagick console-data libgd-dev make python python3 git
# Note: libttspico-utils est dans les dépôts non-free. Il sert à générer des messages de synthèse
apt-get install -y libttspico-utils

Activer la caméra

raspi-config

Installer le programme qui permet de convertir les photos en fichier sons au format Robot 8BW

git clone https://github.com/Oros42/SSTV_Robot_encoder.git
cd SSTV_Robot_encoder
gcc SSTV_Robot_encoder.c -o SSTV_Robot_encoder -lgd -lm  
chmod u+x SSTV_Robot_encoder
cd ..

Réglage audio

J'utilise une voix de synthèse pour mes réglages. On crée le fichier sons.

pico2wave -l fr-FR -w synthese_vocale.wav "Ceci est un message automatique de test. Il est envoyé par <VOTRE_INDICATIF>. Ce message sert à effectuer des réglages de réception audio sur des machines fonctionnant sou «g» «n» «u» Linuxce. Merci de ne pas répondre à ce message."

Brancher la carte sons usb et le câble vers le Yeasu, puis

alsamixer

F6, puis et baisser le sons Jusqu'à 20. Échappe pour quitter.

Télécharger le fichier suivant :

test_audio.sh
#!/bin/bash
echo "18" > /sys/class/gpio/export
sleep 1
echo out > /sys/class/gpio/gpio18/direction
echo 1 > /sys/class/gpio/gpio18/value
aplay -D plughw:CARD=Device,DEV=0 synthese_vocale.wav
echo 0 > /sys/class/gpio/gpio18/value
echo "18" > /sys/class/gpio/unexport

Je conseille d'ouvrir un 2ème terminal ou 2ème session SSH sur le Raspberry-Pi. Dans le 1er, lancer la lecture du fichier sons.

chmod u+x test_audio.sh
./test_audio.sh

Dans le 2ème régler le sons

alsamixer

Câblage de l'interrupteur

Câblage des LED

Le programme pour la SSTV

Télécharger le fichier suivant :

raspberry_sstv.sh
#!/bin/bash
 
indicatif='F4HIZ' # mettez votre indicatif ici
 
#5V ;5V   ;GND  ;GPIO14;GPIO15;GPIO18;GND   ;GPIO23;GPIO24;GND   ;GPIO25;GPIO8 ;GPIO7;DNC;GND  ;GPIO12;GND   ;GPIO16;GPIO20;GPIO21
#3V3;GPIO2;GPIO3;GPIO4 ;GND   ;GPIO17;GPIO27;GPIO22;3V3   ;GPIO10;GPIO9 ;GPIO11;GND  ;DNC;GPIO5;GPIO6 ;GPIO13;GPIO19;GPIO26;GND
 
# interrupteur pour enclencher le système
# GPIO 24 ━━résistance 1K━━━┓
# ground  ━━résistance 10K━━┫
#                           ┃
#                            ╱
#                           ┃
# 3v3     ━━━━━━━━━━━━━━━━━━┛
#
 
# antenne FM
# GPIO 4 (antenne 20cm) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
#
 
# led d'infos
# GPIO 22 ━━━━━━━━led rouge━━┓ émission
# ground  ━━résistance 10K━━━┫
# GPIO 23 ━━━━━━━━led jaune━━┛ prise de la photo
 
# commande baofend ou yaesu
# GPIO 18 ━━━━━━━━━━━━━━━━━━┳━━résistance 220━━━━2N3904
# ground  ━━résistance 10K━━┛
 
 
#mode=24
mode=8
 
finish() {
	echo "22" > /sys/class/gpio/unexport
	echo "23" > /sys/class/gpio/unexport
	echo "24" > /sys/class/gpio/unexport
	echo "18" > /sys/class/gpio/unexport
}
trap finish EXIT
 
# switch
echo "24" > /sys/class/gpio/export
sleep 1
echo in > /sys/class/gpio/gpio24/direction
 
# audio cable
echo "18" > /sys/class/gpio/export
sleep 1
echo out > /sys/class/gpio/gpio18/direction
 
 
# led rouge (émission)
echo "22" > /sys/class/gpio/export
sleep 1
echo out > /sys/class/gpio/gpio22/direction
echo 0 > /sys/class/gpio/gpio22/value
 
# led jaune (photo)
echo "23" > /sys/class/gpio/export
sleep 1
echo out > /sys/class/gpio/gpio23/direction
echo 0 > /sys/class/gpio/gpio23/value
 
sleep 1
 
echo 1 > /sys/class/gpio/gpio23/value # jaune
sleep 1
echo 0 > /sys/class/gpio/gpio23/value # jaune
 
if [ ! -d /root/photos ]; then
	mkdir /root/photos
fi
 
if [ ! -f /root/photos/_num ]; then
	echo "0" > /root/photos/_num
fi
num=`cat /root/photos/_num`
 
 
while :
do
	sleep 2
	if [ `cat /sys/class/gpio/gpio24/value` -eq 1 ]; then
		echo 1 > /sys/class/gpio/gpio23/value # led jaune
		# take photo
		num=$((num+1))
		echo $num > /root/photos/_num
		raspistill -w 2592 -h 1944 --colfx 128:128 -vf -hf -o /root/photos/photo_${num}.jpg
		echo 0 > /sys/class/gpio/gpio23/value
 
		if [[ mode -eq 24 ]]; then
			#raspistill -w 320 -h 240 --colfx 128:128 -vf -hf -o /root/data/photo.jpg
			convert /root/photos/photo_${num}.jpg -resize 320x240 -strip -interlace Plane /root/data/photo.jpg
		else
			#raspistill -w 160 -h 120 --colfx 128:128 -vf -hf -o /root/data/photo.jpg
			convert /root/photos/photo_${num}.jpg -resize 160x120 -strip -interlace Plane /root/data/photo.jpg
		fi
 
		convert /root/data/photo.jpg -fill '#0008' -draw 'rectangle 0,0,65,25' -fill white -pointsize 20 -annotate +5+20 $indicatif /root/data/anno_photo.jpg
 
		# encode wav
		/root/SSTV_Robot_encoder/SSTV_Robot_encoder /root/data/anno_photo.jpg /root/data/sstv_robot.wav # Robot${mode}BW
 
		if [ -f /root/data/sstv_robot.wav ]; then
			echo 1 > /sys/class/gpio/gpio22/value # led rouge
			# FM
			# Pas au point :-(
#			/root/fm_transmitter/bin/Release/fm_transmitter /root/data/sstv_robot.wav 104.0 &
 
			# radio
			echo 1 > /sys/class/gpio/gpio18/value
			if [ `aplay -L|grep "plughw:CARD=Device,DEV=0"` != "" ]; then
				aplay -D plughw:CARD=Device,DEV=0 /root/data/sstv_robot.wav
			else
				aplay /root/data/sstv_robot.wav
			fi
			echo 0 > /sys/class/gpio/gpio18/value
			echo 0 > /sys/class/gpio/gpio22/value # led rouge
 
			sleep 2
			echo "24" > /sys/class/gpio/unexport
			echo "24" > /sys/class/gpio/export
			sleep 1
			echo in > /sys/class/gpio/gpio24/direction
		else
			echo "ERROR /root/data/sstv_robot.wav not found !"
			echo 1 > /sys/class/gpio/gpio22/value # led rouge
			sleep 1
			echo 0 > /sys/class/gpio/gpio22/value # led rouge
 
			echo 1 > /sys/class/gpio/gpio23/value # led jaune
			sleep 1
			echo 0 > /sys/class/gpio/gpio23/value # led jaune
 
			echo 1 > /sys/class/gpio/gpio22/value # led rouge
			sleep 1
			echo 0 > /sys/class/gpio/gpio22/value # led rouge
 
		fi
	fi
done

Réception de la SSTV
Photos du montage final

raspberry-pi_sstv_code.txt · Dernière modification : 2016/10/26 15:46 de f4hiz

Sauf mention contraire, le contenu de ce wiki est placé sous les termes de la licence suivante : CC0 1.0 Universal
CC0 1.0 Universal Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki