Ajouté également un petit connecteur jack pour récupérer le 5V du Raspberry et alimenter un ampli audio mono à base de LM386, celui-là même que j'avais fabriqué en cours de techno[1] au collège.

  • Avec ceci et un script python je suis donc à même de déclencher une playliste contenant des adresses URL de webradio, chaque boutons ayant sa propre fonction.

L'inconvénient c'est que je prévoie pas mal de fonctions et qu'il n'y aura pas suffisamment de boutons… On pourrait donc être tenté de rajouter des GPIO au Raspberry Pi en utilisant une puce MCP23017 ou 23008, mais ça ferait trop de boutons sur un radio-réveil qu'on doit pouvoir manipuler dans la pénombre.

 Voici un exemple pour deux boutons :

#!/usr/bin/env python2.7
# coding: utf-8
import time    # import des modules nécessaires
import os, sys
import RPi.GPIO as GPIO
 
CHANNEL = 17    # Définition de variables utiles
CHANNEL2 = 18
long_press = 1
very_long_press = 3
 
GPIO.setmode(GPIO.BCM)    # initialisation des GPIO
GPIO.setup(CHANNEL, GPIO.IN)
GPIO.setup(CHANNEL2, GPIO.IN)
 
def bouton17(a):    # Fonction pour GPIO 17
    button_press_timer = 0
    GPIO.remove_event_detect(CHANNEL)    # empêche le bouton d'être détecté x fois de plus
    while True:
        if(GPIO.input(a) == GPIO.LOW ):    # bouton appuyé
            button_press_timer += 0.2    # incrémente tant que le bouton est maintenu
            print button_press_timer
            print a
 
        else:    # bouton relaché
            if (button_press_timer > very_long_press):    # comparaison des durées
                print"very long press : ", button_press_timer
            elif (button_press_timer > long_press):
                print"long press : ", button_press_timer
            elif (button_press_timer > 0):
                print"short press : ", button_press_timer
            button_press_timer = 0
        time.sleep(0.2)
 
def bouton18(b):    # Fonction pour GPIO 18
    button_press_timer = 0
    GPIO.remove_event_detect(CHANNEL2) # empêche le bouton d'être détecté x fois de plus
    while True:
        if(GPIO.input(b) == GPIO.LOW ): # bouton appuyé
            button_press_timer += 0.2 # incrémente tant que le bouton est maintenu
            print button_press_timer
            print b
 
        else:    # bouton relaché
            if (button_press_timer > very_long_press):    # comparaison des durées
                print"very long press : ", button_press_timer
            elif (button_press_timer > long_press):
                print"long press : ", button_press_timer
            elif (button_press_timer > 0):
                print"short press : ", button_press_timer
            button_press_timer = 0
        time.sleep(0.2)
 
# Définition du déclenchement des boutons à la détection du front descendant
GPIO.add_event_detect(CHANNEL, GPIO.FALLING, callback=bouton17, bouncetime=100)
GPIO.add_event_detect(CHANNEL2, GPIO.FALLING, callback=bouton18, bouncetime=100)
 
while True:
 
    time.sleep (2)
GPIO.cleanup()    # Réinitialisation des GPIO en sortie de script

À charge donc de remplacer les print par les commandes désirées.
Voir aussi la doc de la librairie RPi.GPIO

À suivre…

Note

[1] EMT : Éducation Manuelle et Technologique, années 90