Bonjour,
J'ai fait une petite radio avec Raspberry Pi Zero W.
J'ai simplement ajouté une carte son et j'écoute la radio via MPD.
MPD daemon est contrôlé via l'interface "mpc".
On peut contrôler le volume avec la commande 'mpc volume 50' par exemple.
Pour éviter le terminal, j'ai ajouté un encodeur rotatif.
J'utilise ce petit script ci-dessous que j'ai trouvé sur github.
Ca marche plutôt à une chose prêt.
La limite de volume est 100. Si on tape la commande 'mpc volume 110' on a une erreur et le volume reste à son état actuel.
Le problème avec l'encodeur rotatif c'est que, si on le tourne trop loin, le volume va aller jusqu'à 100 mais la variable "currVolume" augmente avec la rotation. On peut dépasser les 100 si on tourne trop vite a fond ! Du coup pour baisser le volume ensuite, il faut d'abord baisser la valeur à 100 (sans effet sonore donc). Le volume se baissera à partir de 100 seulement.
J'ai essayé de bidouiller ce script mais sans succès.
Quelqu'un aurait une idée de la modification nécessaire ?
Vous allez me dire que c'est du chichi et j'ai qu'a faire attention.
Mais cette petite radio, c'est pour donner aux vieux. Un petit bruit au fond de la cuisine :) Plus c'est simple mieux c'est.
#!/usr/bin/python
#Control MPD Client volume using a physical rotary encoder
#pip install mopidy-spotify
from RPi import GPIO
from time import sleep
import os
clk = 17
dt = 27
GPIO.setmode(GPIO.BCM)
GPIO.setup(clk, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
GPIO.setup(dt, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
counter = 0
clkLastState = GPIO.input(clk)
currVolume = 50
try:
while True:
clkState = GPIO.input(clk)
dtState = GPIO.input(dt)
if clkState != clkLastState:
if dtState != clkState:
currVolume += 5
else:
currVolume -= 5
# print currVolume
os.system("mpc volume " + str(currVolume))
clkLastState = clkState
sleep(0.01)
finally:
GPIO.cleanup
Merci pour votre aide.
# Une idée....
Posté par David . Évalué à 8 (+7/-0). Dernière modification le 26 septembre 2024 à 14:03.
[^] # Re: Une idée....
Posté par gUI (Mastodon) . Évalué à 4 (+1/-0).
Simple et efficace, je valide !
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: Une idée....
Posté par zephyr32 . Évalué à 1 (+0/-0).
Grand merci ! Maintenant tout fonctionne parfaitement à ce niveau.
# Suite :)
Posté par zephyr32 . Évalué à 1 (+0/-0).
Bon. J'ai rajouté un deuxième encodeur rotatif et j'ai repris le code ci-dessus.
J'ai essayé de l'adapter pour changer les radios cette fois-ci.
Le fonctionnement (si ça marche).
1. Créer une playlist m3u dans laquelle il y a plusieurs radios (liens). Cinq dans mon cas.
2. Faire un crontab au démarrage et lancer la première radio avec la commande
mpc play 1
. Chaque radio peut être lancée en fonction de sa position dans la listeLe point 1 et 2 fonctionnement correctement.
3. Exécuter le script qui permet de changer les radios avec l'encodeur:
a) Si l'encodeur va trop loin par rapport au nombre de ligne de la liste (ex:
mpc play 20
), lancer la ligne 1 (revenir au début quoi)b) Si l'encodeur va dans le négatif, jouer la ligne 1
J'ai modifié ce code mais ça ne donne rien.
Si vous avez des idées, je veux bien.
Merci d'avance.
[^] # Re: Suite :)
Posté par zephyr32 . Évalué à 1 (+0/-0).
Re.
Je pense avoir trouvé.
Après avoir fait des test, le tout semble fonctionner.
Je poste le résultat final. Peut-être que ça peut aider.
Ma première erreur était le fait que j'ai utilisé
os.system()
Il fallait utiliser os.popen.
Cette variable étant fausse, tout le reste était dans les choux.
La variable station_actuelle reste dans la limite du nombre de liens présents dans ma playlist.
Merci encore pour votre aide.
Envoyer un commentaire
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.