MP3 плеер за полчаса
- 
Осталось 2 часа до долгой поездки. Собираешь вещи, готовишься. Проверяешь всё. А тут бац! и плеер не работает. Печалька( На телефоне нет памяти, так что не получится с него слушать. Что же делать? Конечно же собирать самому. Особенно если есть Raspberry Pi. Сначала думаем что он должен уметь: - кнопка следующая песня
- кнопка пауза
- воспроизводить музыку в случайном порядке
- кнопка выключение
- кнопки звук больше меньше
- светодиод-индикатор
 В наличии была ардуинка, куча разных atmeg. Но мой выбор пал на Raspberry pi model B 512 Mb. Решил, что это будет самый простой вариант. У неё есть разъёмы gpio, которые можно использовать для кнопок и светодиода. На малинке стоит Raspbian. Писать решил на python'e через редактор nano, работа c gpio через библиотеку RPi.GPIO, а что бы не мучиться с python кодеками и несовместимостью с arm — буду взаимодействовать со сторонним проигрывателем mplayer через subprocess.Popen(...). Схема сверх простая  Реализация примерно такая (извините за такой вид. Просто сделано за пол часа...) Фотки 
    sudo apt-get install mplayerЭээээх… программа… только не орите! Я знаю что это самое ужасное, что я когда либо писал. Когда ехал сильно мучила совесть. Особенно за использование sleep() 
 Фейспалмная программа на питоне:import RPi.GPIO as GPIO from time import sleep import subprocess import os from random import randint Mfiles = [] path = "/home/pi/Music/" #Папка, где находится музыка files = os.listdir(path) MPFiles = images = filter(lambda x: x.endswith('.mp3'), files); i=0 for mf in MPFiles: MPFiles[i] = path+mf i = i+1 Mfiles = list(MPFiles) Mlen = len(Mfiles) count = 1 CurrentSong = 0 i=0 while i= 10: #если кнопку держат долго,то выходим s = "q" LedState = 0 else: #иначе пауза или воспроизведение if i > 0: player.stdin.write("p") if LedState != 1: LedState = 1 #если воспроизведение, то зажигаем светодиод else: LedState = 2 #иначе моргаем i=0 if GPIO.input(4): #звук выше player.stdin.write("*") if GPIO.input(17): #звук ниже player.stdin.write("/") if GPIO.input(23): #следующая композиция player.stdin.write(">") if LedState == 2: #тут режимы светодиода if lastLed == 1: GPIO.output(24, GPIO.LOW) lastLed = 0 else: GPIO.output(24, GPIO.HIGH) lastLed = 1 else: if LedState == 1: GPIO.output(24, GPIO.HIGH) else: GPIO.output(24, GPIO.LOW) sleep(0.2) #Фэйспалм player.stdin.write("q") # когда выключаемся, то закрываем плеерИтак. Почти всё готово. Осталось сделать так, чтоб скрипт запускался при старте нашей малинки - редактируем файл
 sudo nano /etc/init.d/StartPlayer- пишем в редакторе нано это:
 #! /bin/sh # /etc/init.d/StartPlayer sudo python /путь_к_питнон_скрипту.pyвместо /путь_к_питнон_скрипту.py напишите путь к вашему питон скриптунажимаем ctrl + xYEnter3) sudo chmod 755 /etc/init.d/StartPlayer sudo update-rc.d StartPlayer defaultsВсё готово! Загружаем музыку в папку /home/pi/Music/Ставим на вашей SD карточки замок lock, чтобы при случайном выключении питания ничего не сломалось и всё. Плеер готов!!! P.S. может позже сделаю следующую версию плеера. С нормальным исполнением и программой(без sleep()) и без стороннего плеера OFFTOPА сейчас я делаю такую милашку ^^   К нему скоро будет камера. Он будет автоматически ездить по квартире. Управление голосом, например «приезжай на кухню». И сам ездить на зарядную станцию. 
- 
Автор, мое Вам почтение! Я свои малинки как-то забросил, не до них мне сейчас. А столько планов было... Но читаю такие вот посты как Ваш - и хочецца творить! И я обязательно что-нибудь сотворю  
- 
А про подтяжку почему забыли? 
 Эти резисторы уже есть на самой плате .
- 
Спасибо за инструкцию по созданию MP3 плеера)) 
- 
Т. е. можно все резисторы по 10 кОм убрать и ничего с Малинкой не случится? А тот который на 200 Ом, я думаю можно заменить резистором номиналам до 1000 Ом. Верно? 
- 
Да. 
 Но подтяжки никогда не помешают 
- 
А 200 Ом нельзя максимум можно поставить 500, не больше, а то светодиод очень тускло гореть будет 
- 
Спасибо за ответы!!! У меня еще несколько вопросов возникло... - Резистор (или просто проводник, если без подтяжки) при первой кнопке так же к общему проводу подключать?
- Я так понимаю можно добавить еще кнопку по аналогичной схеме и подключить ее к GPIO 22. Ну и запрограммировать ее например так:
 if GPIO.input(22): #предыдущая композиция
 player.stdin.write("<")?
- Есть ли еще такие пины к которым можно было бы подсоединить еще кнопки?
 Думаю в будущем можно будет добавить режим интернет-радио и добавить дисплейчик с двумя строками по 16 символов на микроконтроллере HD44780 для того чтобы выводить информацию, например о проигрываемой песне или радиостанции  
- 
- Да. К земле. Ссори недописовал  
- Да. Конечно можно
- порты gpio 0, 1, 15, 18, 21, 22, 10, 9, 11, 8, 7 полностью свободны
 
- Да. К земле. Ссори недописовал 
- 
Понял. Я просто думал можно подключать эти самые кнопки только к зеленым пинам (GPIO общего назначения). А оказывается можно использовать все GPIO порты. Кстати, без резисторов 10 кОм похоже никто не подключает кнопки. Видел много схем с кнопками, все все равно используют резисторы. В общем у меня ничего не получилось пока что. При нажатии кнопки на включение у меня Raspberry Pi просто перезагружается. Я запускал программу с правами суперпользователя, но у меня постоянно вылазила ошибка:"...что то там кажется с временем исполнения и ошибка доступа к /dev/mem. Try running as root!"... Потом сделал так чтобы скрипт запускался при старте. Больше ошибок не видел, но чувствую, что программа вообще не работет, поэтому ничего и не получается. Гуглил эту ошибку, но так и не разобрался что это может быть... 
- 
Запускай программу от root. это делается так: 
 sudo #твоя команда
- 
Подскажите Чем можно слушать формат АСС. 
- 
Я и запускал с правами суперпользователя... 
- 
 P pi переместил эту тему из Блоги сообщества Raspberry Pi в P pi переместил эту тему из Блоги сообщества Raspberry Pi в