TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

GPIO et sortie audio

Tue Sep 11, 2012 11:25 am

Bonjour,

Est ce qu'il est possible d'utiliser les GPIO quand le RPi joue de la musique/vidéo?

C'est pour allumer et éteindre un ampli uniquement quand l'audio est utilisé, par contre il y aura une carte son usb ou un DAC, la sortie jack ne sera pas utilisé.

Merci beaucoup pour l'information :D

vohu
Posts: 92
Joined: Tue Aug 14, 2012 9:22 am

Re: GPIO et sortie audio

Tue Sep 11, 2012 2:08 pm

ben oui, pourquoi on pourrait pas ? Ca reste un système multitaches

TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

Re: GPIO et sortie audio

Tue Sep 11, 2012 6:01 pm

Bonjour,

pourriez-vous me donner plus d'information? même en anglais ;)

lors de mes recherche je n'est rien trouvé (uniquement des projets avec des boutons connecté aux GPIO)

merci pour les info :D

vohu
Posts: 92
Joined: Tue Aug 14, 2012 9:22 am

Re: GPIO et sortie audio

Tue Sep 11, 2012 9:51 pm

ben, la sortie audio, tu la gères avec ton application audio habituelle.

En parallèle, y a ton appli qui fait ce qu'elle doit faire sur les GPIO.

je comprends pas ton problème ?

TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

Re: GPIO et sortie audio

Wed Sep 12, 2012 6:16 am

Hello,

une des PIN du GPIO ne doit envoyer un signal UNIQUEMENT quand la musique est joué et s'éteindre 2 min après la dernière note.

c'est un ampli DIY qui y sera connecter et le plus simple c'est d'utiliser un relais connecter sur le GPIO mais faut pas qu'il soit allumé en permanence.

Il existe un schéma pour faire sa mais si je pouvais utiliser uniquement le RPi sa serais TOP

8-)

vohu
Posts: 92
Joined: Tue Aug 14, 2012 9:22 am

Re: GPIO et sortie audio

Wed Sep 12, 2012 10:10 am

c'est ton programme qui doit jouer la musique ? ou c'est un autre programme qui s'en occupe ?
(programme = exécutable)

TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

Re: GPIO et sortie audio

Wed Sep 12, 2012 6:11 pm

N'importe je compte installer MPD ou une distri xbian

Du moment qu'il est compatible dlna(upnp) et qu'il est possible d'utiliser shairport sa me convient :D

TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

Re: GPIO et sortie audio

Fri Sep 14, 2012 5:28 pm

Bon, je suppose qu'il n'est pas possible de faire ce que je cherchais :evil: bien dommage :cry:

dkmatt0
Posts: 3
Joined: Fri Sep 14, 2012 7:16 pm

Re: GPIO et sortie audio

Fri Sep 14, 2012 7:25 pm

Avec MPD et la librairie qui va bien, il est très simple de savoir quand c'est en lecture et quand c'est arrêter.
Le problème va peut-être ce poser du coter GPIO. Il faudra sans doute un peu d'électronique pour gérer l'alimention de l'ampli. Mes connaissance en électronique reste assez limité mais ce sujet m'intéresse au plus haut point :D

TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

Re: GPIO et sortie audio

Fri Sep 14, 2012 8:51 pm

c'est bien sa le problème le GPIO, je ne suis pas un expert (je suis même un gros newb) mais de ce que j'ai compris les port GPIO sont plus utilisé pour envoyer des infos vers d'autre matériel (donc électronique).

Dans mon cas je voulais utilisé le pin 3,3V ou le pin 5V qui serait relier à un relais qui lui pourrait contrôler l'alimentation de l'ampli. Mais les deux pin sortent en continue le même voltage :(

A moins que quelqu'un puisse modifier un fichier pour gérer cette option, mais sa c'est un chouya plus compliqué lol

Dans le cas ou ce ne vraiment pas possible il y a cette solution
http://sound.westhost.com/project38.htm

churchill
Posts: 40
Joined: Tue Feb 14, 2012 9:18 pm

Re: GPIO et sortie audio

Sun Sep 16, 2012 4:22 pm

Salut,
TheD6Bel wrote:c'est bien sa le problème le GPIO, je ne suis pas un expert (je suis même un gros newb) mais de ce que j'ai compris les port GPIO sont plus utilisé pour envoyer des infos vers d'autre matériel (donc électronique).
(...)
Dans le cas ou ce ne vraiment pas possible il y a cette solution
http://sound.westhost.com/project38.htm
Ça risque de ne pas être plus simple !

Ce qu'il te faut c'est un petit programme (en python par exemple) qui tourne en tache de fond et qui surveille mpd. Quand mpd joue un morceau, tu bascules un relai par l'intermédiaire d'un des pins du GPIO, et tu le repositionne à 0 quand mpd ne joue plus.
En gros, pour le python ça donnera un truc comme ça (à tester !!)

Code: Select all

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from mpd import MPDClient
import RPi.GPIO as GPIO
import time

RELAIS_ACTIF=False
PIN_RELAIS=12

def relai(etat):
    GPIO.output(PIN_RELAIS, etat)    # Bascule le pin du relai à l'état voulu
    RELAIS_ACTIF=etat

def main():
    # Test de lecture audio
    client = MPDClient()
    while(1):
        try:
            # Connection au client mpd et lecture du status
            client.connect(host='localhost', port='6600')
            client.password('password')
            status=client.status()
  
            if status['state']=='play' and RELAIS_ACTIF is False:
                relai(True)
            elif status['state']=='stop' or status['state']=='pause':
                relai(False)
            client.disconnect()
        except:
            print 'Erreur connection'
            raise
        time.sleep(1) # On fait dodo pendant une seconde, et on recommence !

if __name__ == "__main__":
    GPIO.setup(PIN_RELAIS, GPIO.OUT)      # paramétrage du pin en sortie
    relai(False)
    main()
Pour le branchement du relai sur un pin du GPIO, il te faut un transistor qui "boostera" un peu le signal du pin. Tu trouveras des exemples sur les sites de l'arduino, comme http://forum.snootlab.com/viewtopic.php ... read#p2180

churchill

TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

Re: GPIO et sortie audio

Sun Sep 16, 2012 6:58 pm

Merci pour ce bout de code et d’espoir :lol:

Je commençais à penser que ce n'était pas possible, c'est claire que ma solution n'était pas simple (enfin ça dépend pour qui ;) mais pas trop pour moi) mais elle a l'aire de fonctionner.

Merci encore :D

Levaillant
Posts: 18
Joined: Wed Sep 26, 2012 7:10 am
Location: France, Paris

Re: GPIO et sortie audio

Wed Sep 26, 2012 7:19 am

Salut,
Post très intéressant car je fabrique un peu ce genre de système, et je n'aurais jamais pensé
à utiliser MPD et ses statuts pour provoquer un timer qui éteindrait l'ampli.
@churchill: Excellente idée, j'espère qu'il n'y a pas de CopyRight dessus ;-)
@TheD6Bel: Tu comptes utiliser quoi comme relais?

mras2an
Posts: 5
Joined: Tue Sep 18, 2012 3:45 pm

Re: GPIO et sortie audio

Wed Sep 26, 2012 10:00 am

salut, ton projet est possible, mais il faut que tu fabrique une petite carte électronique pour ton relais. Pour ce qui est des GPIO tu peux créer un module avec les sources du noyau GPIO.h interrupt.h et workqueue.h.

ex:

/*GPIO 18 en sorti pour RPI*/
gpio_request (18, "LED D7");
gpio_direction_output (18, 1);
gpio_set_value (18, 0);

/*GPIO 24 en entré pour RPI*/
gpio_request (24, "IntQu");
gpio_direction_input (24);
gpio_get_value (24);

/*IRQ*/
if ((ret = request_irq (gpio_to_irq (24), interruption, IRQF_TRIGGER_FALLING,"IntQu", NULL)) != 0)

/*Ne pas oublier de libérer les I/O*/
gpio_set_value (18, 0);
gpio_free (18);
free_irq (gpio_to_irq (24), NULL);
gpio_free (24);

Bon projet.

Levaillant
Posts: 18
Joined: Wed Sep 26, 2012 7:10 am
Location: France, Paris

Re: GPIO et sortie audio

Wed Sep 26, 2012 11:04 am

J'ai la carte depuis peu, et même si le projet est dans ma tête depuis un certain temps,
je n'ai que trop tardé sur la réalisation soft... je m'étais plus penché sur la partie amplificateur.
Donc oui il me faudra quoiqu'il arrive une carte pour le relais, mais pas seulement, il y aura
aussi l'alimentation de la carte, la gestion des encodeurs pour le volume et les tons, les chips résistances variables en SPI, l'écran LCD en HD4780... bref pas mal de routage en perspective ;-)

Va falloir que je teste un peu le Raspberry Pi... je récupère dans la journée de quoi câbler
le port GPIO sur une platine d'essai, à partir de là, j'étudierais avec grande attention cette ligne:

if ((ret = request_irq (gpio_to_irq (24), interruption, IRQF_TRIGGER_FALLING,"IntQu", NULL)) != 0)

qui me fait marrer au plus haut point :lol:
mais on s'éloigne du sujet ;-)

mras2an
Posts: 5
Joined: Tue Sep 18, 2012 3:45 pm

Re: GPIO et sortie audio

Wed Sep 26, 2012 11:37 am

c'est cool tout ça, il y a du boulot mais c'est un projet sympa. Pour l'ex que je t'ai passé il manque du code mais ça peut être utile dans tes recherches.

Levaillant
Posts: 18
Joined: Wed Sep 26, 2012 7:10 am
Location: France, Paris

Re: GPIO et sortie audio

Wed Sep 26, 2012 6:05 pm

Bonsoir!
Je réitère, le code de Churchill est fonctionnel, et du coup c'est juste génial!
Reste à découvrir comment lancer un thread en python pour effectivement
éteindre l'ampli au bout de X secondes, et ce sera fini de ce coté là!
Juste quelques précisions pour ce faire:

- Faut installer les librairies GPIO:
sudo apt-get install python-rpi.gpio
C'est sensé suffire! J'avais personnellement téléchargé sur python.org la librairie,
mais il fallait aussi installer python-dev... enfin petite galère avec ma méthode...

- Coté MPD, idem faut aller chercher les libs sur python.org:
wget http://pypi.python.org/packages/source/ ... 4597d65635

Y a pas mal de clients python MPD, mais celui fonctionne :-)
Ensuite (comme d'hab):
tar -zxf python-mpd-0.3.0.tar.gz
cd python-mpd-0.3.0/
sudo python setup.py install

Pour finir, le script de churchill est quasi parfait, sauf au niveau de l'identification
qui, chez moi, posait problème en localhost, le
#client.password(PASSWORD)
est bien à commenter, car j'ai toujours eu des refus de connexion sans, alors que je
suis absolument sûr de mon PASSWORD. En tout cas, sans aucun PASSWORD
ca passe donc pourquoi se priver :mrgreen:

Mon GestionAmpli.py (très similaire à celui de Churchill):

Code: Select all

#!/usr/bin/env python
# -*- coding: utf-8 -*-
from mpd import MPDClient
import RPi.GPIO as GPIO
import time

RELAIS_ACTIF=False
PIN_RELAIS=17

def relai(etat):
    GPIO.output(PIN_RELAIS, etat)    # Bascule le pin du relai à l'état voulu
    RELAIS_ACTIF=etat

def main():
    # Test de lecture audio
    client = MPDClient()
    while(1):
        try:
            # Connection au client mpd et lecture du status
            client.connect(host='localhost', port='6600')
            PASSWORD = 'pass'
            #client.password(PASSWORD)
            status=client.status()

            if status['state']=='play' and RELAIS_ACTIF is False:
                relai(True)
                print "QuelqueChoseEstJoué"
            elif status['state']=='stop' or status['state']=='pause':
                relai(False)
                print "YaPlusSon"
            client.disconnect()
        except:
            print 'Erreur connection'
            raise
        time.sleep(1) # On fait dodo pendant une seconde, et on recommence !
if __name__ == "__main__":
    GPIO.setmode(GPIO.BCM)
    GPIO.setwarnings(False)
    print "Lancement de EteindAmpliQuandTuJouesPas"
    GPIO.setup(PIN_RELAIS, GPIO.OUT)      # paramétrage du pin en sortie
    relai(False)
    main()
J'ai juste modifié dans l'init le
GPIO.setmode(GPIO.BCM)
pour que la pin à "allumer"... s'allume... (j'ai un raspberry V2 mais ca ne change rien)

Allez on continue :)

TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

Re: GPIO et sortie audio

Wed Sep 26, 2012 6:16 pm

Levaillant wrote: @TheD6Bel: Tu comptes utiliser quoi comme relais?

Salut, j'avais fait quelques recherches et le mieux c'était ce genre de schéma

http://www.susa.net/wordpress/2012/06/r ... sing-gpio/

TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

Re: GPIO et sortie audio

Wed Sep 26, 2012 6:23 pm

Levaillant wrote: Allez on continue :)
Sa avance bien :D

Perso j’attends mon RPi, pour faire quelques test avec de simple HP de mon ordi et si tout est fonctionnel, je me prend un petit ampli DIY (un TK2050 de chez hifimediy) avec l'alim qui va avec pour faire un multiroom ( vais commencer avec une seul pièce, la SDB).

Je suis impatient de tester le script et de RECEVOIR MON RPi :twisted:

Levaillant
Posts: 18
Joined: Wed Sep 26, 2012 7:10 am
Location: France, Paris

Re: GPIO et sortie audio

Wed Sep 26, 2012 6:41 pm

J'avais bien ce genre de schéma en tête, mais c'est toujours bon d'avoir
une petite confirmation, donc merci ;)
Ton kit ampli a l'air extrêmement (trop) puissant, j'espère pour toi que tu as
les enceintes qui iront bien avec... Perso, j'ai opté pour un (petit) ampli 2x30W
couplé à un caisson Bose de 50W (bien trop puissant):
www.ermes.free.fr/kier213.pdf
sur des enceintes Sony des années 1990-2000, 3 voies, 6 Ohm, "160W", et je
suis déjà impressionné par le niveau sonore engendré! (pour un prix de 25€...)

Si tu me l'autorises, je vais continuer à poster ici l'ami :)

TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

Re: GPIO et sortie audio

Wed Sep 26, 2012 8:50 pm

mais bien sûre, tu DOIS posté ici :lol: :D

plus il y a de retours mieux c'est, pour qu'un max de personnes puissent avoir plusieurs exemples de projet.

Pour mon projet j'avais pensé prendre un T1X4 qui délivre 4X 80w, je pourrais alors équiper 4 pièces de la maison en mono avec deux HP par pièces du genre Focal ic 105 ou 106

Pour la sortie audio j'ai de très bon retours de http://hifimediy.com/index.php?route=pr ... duct_id=83 mais avant sa je vais tester la sortie jack.

Levaillant
Posts: 18
Joined: Wed Sep 26, 2012 7:10 am
Location: France, Paris

Re: GPIO et sortie audio

Thu Sep 27, 2012 11:34 am

Bien le bonjour!
Pas grand chose aujourd'hui mise à part une grosse remise à niveau Python.
Ci-suit la liste complète des commandes pour le client MPD Python, toutes ne
sont pas forcement utiles, c'est juste que j'ai un peu galéré pour les trouver:

Code: Select all

# Admin Commands
	            disableoutput:    
	            enableoutput:     
	            kill:             
	            update:           item
	            
# Informational Commands
	            status:           object
	            stats:            object
	            outputs:          outputs
	            commands:         list
	            notcommands:      list
	            tagtypes:         list
	            urlhandlers:      list
	            
# Database Commands
	            find:             songs
	            list:             list
	            listall:          database
	            listallinfo:      database
	            lsinfo:           database
	            search:           songs
	            count:            object
	            
# Playlist Commands
	            add:              
	            addid:            item
	            clear:            
	            currentsong:      object
	            delete:           
	            deleteid:         
	            load:             
	            rename:           
	            move:             
	            moveid:           
	            playlist:         playlist
	            playlistinfo:     songs
	            playlistid:       songs
	            plchanges:        songs
	            plchangesposid:   changes
	            rm:               
	            save:             
	            shuffle:          
	            swap:             
	            swapid:           
	            listplaylist:     list
	            listplaylistinfo: songs
	            playlistadd:      
	            playlistclear:    
	            playlistdelete:   
	            playlistmove:     
	            playlistfind:     songs
	            playlistsearch:   songs
	            
# Playback Commands
	            crossfade:        
	            next:             
	            pause:            
	            play:             
	            playid:           
	            previous:         
	            random:           
	            repeat:           
	            seek:             
	            seekid:           
	            setvol:           
	            stop:             
	            volume:           
	          
# Miscellaneous Commands
	            clearerror:       
	            close:            
	            password:         
	            ping:             
Et le code pour les utiliser:

Code: Select all

from mpd import MPDClient
client = MPDClient()
client.connect(host='localhost', port='6600')
#client.password(PASSWORD)
client.setvol(volume)
client.previous()
client.next()
status = client.status()
status['state']      # return play, pause...
@+

TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

Re: GPIO et sortie audio

Mon Oct 01, 2012 7:29 am

Levaillant wrote: @TheD6Bel: Tu comptes utiliser quoi comme relais?
Re

d'après plusieurs forum dont HCFR ce genre de relais est compatible

http://www.ebay.com/itm/ws/eBayISAPI.dl ... 0749445346

L'avantage, tout est monté et pour le prix sa vaut le coup (2€ port compris)

Levaillant
Posts: 18
Joined: Wed Sep 26, 2012 7:10 am
Location: France, Paris

Re: GPIO et sortie audio

Mon Oct 01, 2012 6:11 pm

C'est sûr qu'à ce prix, cela vaut le coup! Surtout la version 8 relais à 10$
Perso j'ai déjà acheté le relais 5V, [email protected] pour 3€, associé à sa diode
et son transistor, ca le fera bien!

Par contre, j'ai pas mal de soucis avec la librairie GPIO de python...
En effet, cette dernière ne gère pas encore correctement ni les interruptions
ni le port SPI... La solution de Churchill sera parfaite pour toi si tu veux "juste"
éteindre l'ampli (si c'est réellement juste ce que tu veux faire), mais pour moi,
sur le coup, je me retrouve bien embêté...
Deux solutions s'offrent à moi, soit je me remets au C (beurk plus la motivation)
soit je mets un Arduino entre mes boutons, encodeurs, écran et le raspberry Pi...
Bref la loose, mais pourquoi pas l'Arduino (enfin juste l'AT168...) sur une carte
que je serais, quoiqu'il arrive obligé de réaliser...

En tout cas, pour le moment, c'est plutôt super agréable d'entendre la musique
sortir de mes enceintes via mon ampli, le tout contrôlé par mon PC, l'HTC HD2
et l'IPod... ca donne envie d'avancer!

@+

TheD6Bel
Posts: 67
Joined: Tue Sep 11, 2012 11:18 am

Re: GPIO et sortie audio

Tue Oct 02, 2012 2:06 pm

Levaillant wrote:La solution de Churchill sera parfaite pour toi si tu veux "juste"
éteindre l'ampli (si c'est réellement juste ce que tu veux faire), mais pour moi,
sur le coup, je me retrouve bien embêté...
@+
Oui pour moi le but est de mettre 4 RPi branché sur un ampli 4 X 80w pour mon multiroom (salle à mangé, cuisine, salle de bain1 et salle de bain2).

Les RPi seront branché à leurs alim (4 chargeurs de smartphone), rj45, mini dac usb et bien sur le relai contrôlé par GPIO. Le tout dans une tour d'ordi (surement pour commencer), voir fabriquer une après pour que sa soi plus classe mais comme je suis pas doué :lol: :roll: .
Levaillant wrote: En tout cas, pour le moment, c'est plutôt super agréable d'entendre la musique
sortir de mes enceintes via mon ampli, le tout contrôlé par mon PC, l'HTC HD2
et l'IPod... ca donne envie d'avancer!
:evil: toujours pas reçu le mien peut être cette semaine, que je puisse aussi mettre ce genre de com :twisted:

Return to “Français”