Рубрики
Raspberry Pi

raspberry pi / кнопки / gpio-python / пример простой проигрыватель

Детали:

три кнопки; 
соединительные провода мама-папа;
стандартные соединительные провода или обычные провода;
макетная плата;
три резистора 10кОм;
пк акустика(динамики, наушники);
*.wav - звуковые файлы.

Сборка макета проигрыватель:

Ground pi  подключаем к общей земле(-)
Земля -> резистор 10кОм -> порт GPIO23 ->  Кнопка -> Pi 3,3V
Земля -> резистор 10кОм -> порт GPIO24 ->  Кнопка -> Pi 3,3V
Земля -> резистор 10кОм -> порт GPIO25 ->  Кнопка -> Pi 3,3V

Принцип работы:

Когда кнопка не нажата. Ток течет через резистор 10кОм и GPIO = 0 (false)
Порт GPIO имеет отрицательное значение.
Также резистор помогает избежать дребезг кнопки.

Когда кнопку нажимают,  ток течет по наименьшему сопротивлению к положительному значению.
GPIO > 0 (true)

Код:

mkdir soundbord - создаем каталог для музыкальных файлов
cd soundboard -  перейдем в каталог
nano soundboard.py - создаем файл
---------------------------------
import pygame.mixer
from time import sleep
import RPi.GPIO as GPIO
from sys import exit

GPIO.setmode(GPIO.BCM)
GPIO.setup(23, GPIO.IN)
GPIO.setup(24,GPIO.IN)
GPIO.setup(25, GPIO.IN)

pygame.mixer.init(48000, -16, 1, 1024) - инициируем микшер из pygame

soundA = pygame.mixer.Sound(
     "/usr/share/sounds/alsa/Front_Center.wav") - загружаем звуки
soundB = pygame.mixer.Sound(
     "/usr/share/sounds/alsa/Front_Left.wav")  - загружаем звуки
soundC = pygame.mixer.Sound(
     "/usr/share/sounds/alsa/Front_Right.wav")  - загружаем звуки

soundChannelA = pygame.mixer.Channel(1) - создаем канал для звука
soundChannelB = pygame.mixer.Channel(2) - создаем канал для звука
soundChannelC = pygame.mixer.Channel(3) - создаем канал для звука

print "Soundboard Ready." - сообщаем что проигрыватель запущен

while True:
    try:
         if (GPIO.input(23) == True): - если кнопка нажата
            soundChannelA.play(soundA) - воспроизводим звук
         if (GPIO.input(24) == True): - если кнопка нажата
            soundChannelB.play(soundB) - воспроизводим звук
         if (GPIO.input(25) == True): - если кнопка нажата
            soundChannelCplay(soundC) - воспроизводим звук
         sleep(0.01) - не напрягаем процессор слишком частой проверкой
    except KeyboardInrerrupt:
         exit()
sudo python soundboard.py - запуск скрипта
Ctrl+c - завершить скрипт
sudo amixer cset numid=3 1 - вывод звука через JACK 3,5
sudo amixer cset numid=3 2 - вывод звука через HDMI