Присоединяйтесь!
Авторизация
raspberry pi    mp3    mplayer    python    gpio    плеер    полчаса   

MP3 плеер за полчаса

18 August 2013 - Автор SL RU2

Осталось 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") # когда выключаемся, то закрываем плеер

Итак. Почти всё готово. Осталось сделать так, чтоб скрипт запускался при старте нашей малинки1) редактируем файл

sudo nano /etc/init.d/StartPlayer

2) пишем в редакторе нано это:

#! /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А сейчас я делаю такую милашку ^^

К нему скоро будет камера. Он будет автоматически ездить по квартире. Управление голосом, например «приезжай на кухню». И сам ездить на зарядную станцию.

18 August 2013
SL RU2
автор статьи

Комментариев: 4

  1. OPERATOR2

    18 August 2013 - Ответить

    Автор, мое Вам почтение! Я свои малинки как-то забросил, не до них мне сейчас. А столько планов было... Но читаю такие вот посты как Ваш - и хочецца творить! И я обязательно что-нибудь сотворю :-)

  2. dimonoid9

    21 August 2013 - Ответить

    А про подтяжку почему забыли? Эти резисторы уже есть на самой плате .

    • Gasinskiy12

      21 August 2013 - ответить

      Т. е. можно все резисторы по 10 кОм убрать и ничего с Малинкой не случится? А тот который на 200 Ом, я думаю можно заменить резистором номиналам до 1000 Ом. Верно?

      • SL RU2

        29 August 2013 - ответить

        Да. Но подтяжки никогда не помешают ;-)

        • Gasinskiy12

          30 August 2013 - ответить

          Спасибо за ответы!!! У меня еще несколько вопросов возникло... 1. Резистор (или просто проводник, если без подтяжки) при первой кнопке так же к общему проводу подключать? 2. Я так понимаю можно добавить еще кнопку по аналогичной схеме и подключить ее к GPIO 22. Ну и запрограммировать ее например так: if GPIO.input(22): #предыдущая композиция player.stdin.write("<")? 3. Есть ли еще такие пины к которым можно было бы подсоединить еще кнопки? Думаю в будущем можно будет добавить режим интернет-радио и добавить дисплейчик с двумя строками по 16 символов на микроконтроллере HD44780 для того чтобы выводить информацию, например о проигрываемой песне или радиостанции =)

          • SL RU2

            01 September 2013 - ответить

            1) Да. К земле. Ссори недописовал =) 2) Да. Конечно можно 3) порты gpio 0, 1, 15, 18, 21, 22, 10, 9, 11, 8, 7 полностью свободны

            • Gasinskiy12

              01 September 2013 - ответить

              Понял. Я просто думал можно подключать эти самые кнопки только к зеленым пинам (GPIO общего назначения). А оказывается можно использовать все GPIO порты. Кстати, без резисторов 10 кОм похоже никто не подключает кнопки. Видел много схем с кнопками, все все равно используют резисторы. В общем у меня ничего не получилось пока что. При нажатии кнопки на включение у меня Raspberry Pi просто перезагружается. Я запускал программу с правами суперпользователя, но у меня постоянно вылазила ошибка:"...что то там кажется с временем исполнения и ошибка доступа к /dev/mem. Try running as root!"... Потом сделал так чтобы скрипт запускался при старте. Больше ошибок не видел, но чувствую, что программа вообще не работет, поэтому ничего и не получается. Гуглил эту ошибку, но так и не разобрался что это может быть...

              • SL RU2

                11 September 2013 - ответить

                Запускай программу от root. это делается так: sudo #твоя команда

                • Gasinskiy12

                  14 September 2013 - ответить

                  Я и запускал с правами суперпользователя...

      • SL RU2

        29 August 2013 - ответить

        А 200 Ом нельзя максимум можно поставить 500, не больше, а то светодиод очень тускло гореть будет

  3. Gasinskiy12

    21 August 2013 - Ответить

    Спасибо за инструкцию по созданию MP3 плеера))

  4. serb2

    12 September 2013 - Ответить

    Подскажите Чем можно слушать формат АСС.

Отправить комментарий

Авторизуйтесь для отправки комментария

Присоединяйтесь
Новые сообщения