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

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

Тэги:

 

Автор:

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

  • OPERATOR2
    19.08.2013 в 02:27 ответ

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

  • dimonoid9
    21.08.2013 в 19:35 ответ

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

    • Gasinskiy12
      21.08.2013 в 21:24 ответ

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

      • SL RU2
        29.08.2013 в 12:06 ответ

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

        • Gasinskiy12
          30.08.2013 в 08:40 ответ

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

          • SL RU2
            01.09.2013 в 19:08 ответ

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

            • Gasinskiy12
              01.09.2013 в 23:06 ответ

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

              • SL RU2
                11.09.2013 в 21:09 ответ

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

                • Gasinskiy12
                  14.09.2013 в 20:22 ответ

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

      • SL RU2
        29.08.2013 в 12:08 ответ

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

  • Gasinskiy12
    21.08.2013 в 21:22 ответ

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

  • serb2
    12.09.2013 в 10:16 ответ

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

Ваш комментарий

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

© Сообщество пользователей RaspberryPi 2021