Avec deux entrées nous allons choisir 3 radios possibles au démarrage.
Petit rappel simple :
Les choses à faire
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
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.
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.
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
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.
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 :
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.