Outils d'utilisateurs

Outils du Site


framboise:radio

Choisir une radio au démarrage de Framboise

Retour les Entrées Sorties

Avec deux entrées nous allons choisir 3 radios possibles au démarrage.

Petit rappel simple :

  • Avec 1 entrée : on a 2 niveaux logiques 0 ou 1 , soit 2 choix
  • Avec 2 entrées on a 4 choix possibles 2 puissance 2, 2^2 : 00, 01,10,11
  • Avec 3 entrées on a 2^3 = 8, avec n entrées 2^n

Les choses à faire

  • Avoir un programme qui gère le son et les radios web.
  • Pouvoir configurer 2 GPIO en entrées : Voici et les lire
  • Faire un programme simple pour choisir une radio parmi 3 selon les 2 entrées
  • Gérer le démarrage d'un programme à la mise sous tension

IMPORTANT : Je travaille avec une raspbian wheezy, c'est à dire un raspberry avec une distribution debian Wheezy, par la suite je travaille avec aptitude, vous devrez peut-être le changer si vous utilisez une autre distribution et certains autres paquets seront peut-être nécessaires.

===== Gestion du son et lectu
re des radios web

Framboise étant géré en serveur, il fallait un lecteur en ligne de commande et qui lise les radios web.
MOC ne convenait pas, il me restait à ma connaissance VLC ou MPLAYER.
J'ai choisi d'installer MPLAYER. Installation en administrateur

 
$ su 
mot de passe 
# aptitude install mplayer 

Pour entendre un son il faut brancher des enceintes actives* ou un casque sur la sortie bleue jack audio.
* Enceintes actives, des enceintes qui ont un ampli intégré et une alimentation séparée, framboise ne fournit pas de puissance sur la sortie audio.

Pour essayer :

 mplayer http://kerne.online.stalig.net/live-ori.ogg.m3u 

Si vous avez du son en root (superutilisateur) mais pas en utilisateur simple, vérifiez si votre utilisateur est dans le groupe audio.
En superadministrateur :

 adduser utilisateur audio 

Fermez votre session, redémarrez une nouvelle session.
En simple utilisateur :

 id  
groupes=1001(utilisateur),29(audio)

Pour avoir la radio seulement, il faut mettre la commande

 mplayer -ao alsa http://kerne.online.stalig.net/live-ori.ogg.m3u 

Sinon il faut aussi ajouter le groupe video, mais dans mon cas pour un serveur sans X, cela n'a aucun intérêt.

A ce niveau là, vous pouvez déjà écouter de la musique.
Si rien ne marche en root ou simple utilisateur : regardez du coté de lsmod si aucun snd n'apparait, le son n'est pas autorisé.

===== Configurer des GPIO en entrées ou en sorties

Noubliez pas de lire le document de référence en anglais : http://www.raspberrypi.org/wp-content/uploads/2012/02/BCM2835-ARM-Peripherals.pdf

La configuration se trouve dans http://elinux.org/RPi_Low-level_peripherals

BASH

J'ai fait le choix d'utiliser le bash dans un premier temps.
Pas de bibliothèque à installer et pratique pour les scripts simples.

http://elinux.org/Rpi_Low-level_peripherals#GPIO_Driving_Example_.28Bash_shell_script.2C_using_sysfs.2C_part_of_the_raspbian_operating_system.29 Attention, il faut être superutilisateur (root) pour ces commandes

Mettre la broche n°7 GPIO4 en entrée

 # Set up GPIO 4 and set to input 
echo "4" > /sys/class/gpio/export 
echo "in" > /sys/class/gpio/gpio4/direction 

Mettre la broche n°19 GPIO22 en sortie

 # Set up GPIO 22 and set to output 
echo "22" > /sys/class/gpio/export 
echo "out" > /sys/class/gpio/gpio22/direction 

J'ai créé un dossier gpio dans /etc/ pour gérer les entrées sorties GPIO
En superutilisateur (root)

 # mkdir/etc/gpio 

Voici mon fichier pour GPIO4 en entrée
cat /etc/gpio/entree_gpio4

 
echo "4" > /sys/class/gpio/export 
echo "in" > /sys/class/gpio/gpio4/direction 
# Pour connaitre l'état de l'entrée 
# cat /sys/class/gpio/gpio4/value 

Pour avoir l'entrée GPIO17 en entrée dans le répertoire /etc/gpio/

 sed 's/4/17/' entree_gpio4 >entree_gpio17 

Tous les 4 du fichiers entree_gpio4 ont été remplacés par des 17.

Mes 2 fichiers pour configurer les entrées GPIO sont faits.
Intéressant : la lecture des entrées peut se faire en simple utilisateur

Exercice Faites un fichier sortie_gpio22 pour avoir gpio22 en sortie
en commentaires on pourra indiquer qu'il faut mettre

 echo "1" > /sys/class/gpio/gpio22/value 

pour avoir la sortie à 1 et mettre echo “0” pour mettre la sortie à 0.

Faire un programme simple pour choisir une radio parmi 3 selon l'état des 2 entrées

Avec 2 entrées on peut 4 choix.
On va mettre un coefficient 2 à l'entrée GPIO17, les 4 choix 00,01,10,11 vont correspondre aux valeurs 0,1,2,3 avec

 let nuevo=$(cat /sys/class/gpio/gpio4/value)+2*$(cat /sys/class/gpio/gpio17/value) 

Le code 0 permet de sortir.
Si on change de code, on change de radio.
Le symbole & à la fin des lignes mplayer permet de le lancer en taches de fond.

Voici le programme E_S dans le dossier/home/per/bin

#!/bin/bash 
# gestion des Entrées Sorties 
elegir() {  
case $1 
	in 
	0)	exit 0 ;; 
	1)	mplayer -ao alsa http://www.tv-radio.com/station/france_inter_mp3/france_inter_mp3-32k.m3u & ;; #france_inter 
	2)	mplayer -ao alsa http://kerne.online.stalig.net/live-ori.ogg.m3u & ;; # skingomz Kerne  
	3)	mplayer -ao alsa http://radio1.rtve.stream.flumotion.com/rtve/radio1.mp3.m3u & ;; #Radio Nacional de España  
esac 
} 
 
let nuevo=$(cat /sys/class/gpio/gpio4/value)+2*$(cat /sys/class/gpio/gpio17/value) 
elegir $nuevo 
echo $nuevo 
while [ $nuevo -ne 0 ] 
do 
	let anterior=nuevo 
	sleep 1 
	let nuevo=$(cat /sys/class/gpio/gpio4/value)+2*$(cat /sys/class/gpio/gpio17/value) 
	if [ $nuevo -ne $anterior ] 
	then killall mplayer 
		echo $nuevo 
		elegir $nuevo 
	fi 
done 

Tant que le code des entrées est différent de 0, on met la radio correspondant en tache de fond et toutes les secondes on lit le code d'entrées
si celui-ci n'a pas changé ( nouveau == antérieur) on ne fait rien sinon on éteint la radio et on lance la nouvelle, évidemment si le code est différent de 0.
Comme ce programme ne nécessite pas d'être superutilisateur (root), il est dans le répertoire du simple utilisateur.

Gérer le démarrage d'un programme à la mise sous tension

Les programmes qui sont lancés au démarrage dans ian sont dans /etc/init.d/ Pour que le programme démarre au boot, il faut utiliser update-rc.d votre_script Voici le script /etc/init.d/gpio.sh

#!/bin/sh 
# gestion des Entrées Sorties 
# direction des E/S 
/etc/gpio/entree_gpio4 
/etc/gpio/entree_gpio17 
# programme de gestion des E/S 
/home/per/bin/E_S 

On le met au démarrage avec update-rc.d gpio.sh defaults

Matériel et essais

Une carte Framboise avec un câble réseau, une alimentation et un câble jack et un ampli Son avec 2 ence
intes et une alimentation de l'ampli.
Une nappe 26 points mis sur le bus GPIO et 2 résistances j'ai mis une résistance de 10 kohms et une de 100 kohms.
Mise en place des résistances ( elles seront câblées avec un tirage vers le haut) :
* Sans résistances les 2 entrées sont à 0, choix 0
* Une résistance entre la broche 1 (3.3V) et 7 GPIO4 pour le choix 1
* Une résistance entre la broche 11 GPIO17 et 17 (3.3V) pour le choix 2
* Deux résistances une entre la broche 1 (3.3V) et 7 GPIO4 et l'autre entre la broche 11 GPIO17 et 17 (3.3V) pour le choix 3

Important : Les entrées sorties sont en 3.3V, il ne faut pas utiliser le 5V pour le GPIO.

Pas besoin de PC pour piloter, ni clavier ni souris.

Conclusion

Un paquet a installé mplayer pour avoir le son.
Vérifier les droits avec id, adduser, groups … pour tout utilisateur.

On a 4 fichiers et un dossier :

  • Un dossier /etc/gpio pour mettre les fichiers de configuration
  • Les fichiers de configuration des entrées sorties /etc/gpio/entree_gpio17, /etc/gpio/entree_gpio4
  • Un fichier qui gère les radios en fonction des entrées et modifiable par un simple utilisateur /home/per/bin/E_S
  • Un fichier pour le lancer au démarrage /etc/init.d/gpio.h

Ceci a été fait en bash, mais on pourra le faire en C ou en python par exemple.

Amélioration possible l'ampli son qui est alimenté en 12V par un bloc d'alimentation de PC pourra être mis en marche par une sortie GPIO.
Un optocoupleur piloté par GPIO22, ferme l'optotransistor de sortie entre PS_ON et la masse GND ou COM d'une alimentation PC ATX.

framboise/radio.txt · Dernière modification: 2013/01/23 21:18 par per