Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Manufacturing Technology >> Производственный процесс

Интернет-радио Pi-Arduino

Компоненты и расходные материалы

Arduino UNO
× 1
Raspberry Pi 3, модель B
× 1
SainSmart LCD Keypad Shield для Arduino
× 1
Источник питания 5 В
× 1

Приложения и онлайн-сервисы

python

Об этом проекте


Обзор

Я люблю слушать радио, когда что-то делаю или готовлю, но там, где я живу, FM-прием ужасен. А с Интернетом слушать радиостанции мира - одно удовольствие, но я не люблю использовать свой смартфон для прослушивания музыки, поэтому, много гуглил, я нашел несколько решений.

Я основывал этот проект на другом руководстве:Интернет-радио Arduino / Raspberry Pi от akellyirl. Код написан на Python на Raspberry Pi и в основном использует демон музыкального проигрывателя Linux (mpd) и проигрыватель (mpd). Есть библиотека nanpy это позволяет Python взаимодействовать с Arduino, который управляет кнопками и ЖК-дисплеем.

Я использовал экран LCD / клавиатуры для Arduino с кнопками:SainSmart LCD Keypad Shield для Arduino, а позже добавил полосу с 4 кнопками, которую я выбросил из сломанного будильника. Сначала я использовал Raspberry Pi 2 с USB-адаптером WiFi, но теперь я использую RP3 со встроенным Wi-Fi и без антенны.

Самым сложным было найти правильные URL-адреса станций, которые мне нужны. Наконец я нашел эту программу:URL HELPER, которая обнюхивает сайт, на котором вы находитесь, и показывает URL-адреса воспроизводимого мультимедиа. Для звука я использовал пару активных компьютерных динамиков, также восстановленных из металлолома.

Инструкция по установке

Инструкция по установке RP3 (из Интернет-радио Arduino / Raspberry Pi от akellyirl в Arduino):

1. Обновите Raspbian до последних пакетов:

  $ sudo apt-get update  

2. Установите пакеты mpd / mpc:

  $ sudo apt-get install mpc mpd  

Мы хотим иметь возможность общаться с Arduino из Python, работающего на Pi. Для этого нам нужно установить библиотеку nanpy для Python и прошивку nanpy для Arduino:

1. Установите пакеты Arduino для сборки микропрограммы nanpy для Arduino:

  $ apt-get install arduino  

2. Получите библиотеку nanpy для Python и извлеките из / home / pi:

  $ wget http://pypi.python.org/packages/source/n/nanpy/nanpy-v0.7.tar.gz $ tar xvf nanpy-v0.7.tar.gz  

3. Получите setuptools для Python (зависит от nanpy) и извлеките:

  $ wget http://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz#md5=7df2a529a074f613b509fb44feefe74e $ tar xvf setuptools-0.6c11.tar.gz  

4. Получите pyserial для Python (зависимость от nanpy) и извлеките:

  $ wget http://pypi.python.org/packages/source/p/pyserial/pyserial-2.6.tar.gz $ tar xvf pyserial-2.6.tar.gz  

5. Перейдите в каталог setuptools и установите Python setuptools:

  $ cd setuptools-0.6c11 $ sudo python setup.py install  

6. Перейдите в каталог nanpy и установите библиотеку Python nanpy:

  $ cd ../nanpy $ sudo python setup.py install  

7. Перейдите в каталог последовательного порта и установите последовательную библиотеку Python:

  $ cd ../pyserial-2.6 $ sudo python setup.py install  

Теперь, когда у нас есть нужные файлы, давайте поместим прошивку nanpy на Arduino.

Прошивка

nanpy позволяет программе Python, работающей на Raspberry Pi, управлять Arduino с использованием обычного синтаксиса Arduino-Sketch, например программа Python для чтения аналогового ввода от Arduino может читать:

  int val =Arduino.analogRead (14)  

Nanpy состоит из двух компонентов:

  • Библиотека для Python, которая позволяет писать команды Arduino в знакомом синтаксисе и взаимодействовать с Arduino;
  • Прошивка, которая работает на Arduino и взаимодействует с Python на Pi.

Мы установили Python-часть nanpy и загрузили Arduino-часть nanpy на Pi на последнем шаге. Теперь нам нужно загрузить прошивку nanpy в Arduino.

Подключите Arduino к USB-порту Raspberry Pi.

1. Перейдите в каталог прошивки nanpy и загрузите в Arduino:

  $ cd ../nanpy/firmware $ export BOARD =uno $ make $ make upload  

Если вы получили сообщение о том, что устройство не найдено в / dev / ttyACM0, подключите Arduino к другому USB-порту.

Я создал сценарий списка воспроизведения и сценарий Python (опубликованный на вкладке кода) и сделал автоматический запуск сценария Python при загрузке Raspberry. Я также добавил еще одну кнопку, чтобы отобразить некоторые параметры меню, такие как отображение IP или выбор аудиовыхода.

последнее обновление:я переделал его:, добавил поворотные энкодеры для набора и регулировки громкости, а также напечатал корпус на 3d-принтере:


Код

  • пирадио
  • radio_plylist.sh
пирадио Python
Я не программист на Python (в основном это копирование / прошлое из битов, которые я нашел в google.
пока работает :)
Этот скрипт должен загружаться при запуске в пи, я добавил в crontab задачу
 from datetime import datetimefrom subprocess import * from time import sleep, strftimefrom Queue import Queuefrom threading import Threadimport osfrom nanpy import Arduino, Lcdimport socketArduino.pinMode (14, input) lcd =Lcd ([8,9,4,5,6,7], [16,2]) # Настройте выводы ЖК-дисплея для Sainsmart Shieldlcd.printString ("Ruben's RadioZ", 0,0) lcd.printString ("Загрузка" + "." * 3,0,1) sleep (5) max_trax =10x =1loop_menu =1loop_radio =1stations =[] # добавлено, чтобы отображать имя станции при нажатии кнопки stations.append ("Ecco 99") station.append ("Галгалаз") station.append ("Galaz") station.append ("88 FM") station.append ("Gimel") station.append ("Радио 100fm") station.append ("Kol Hamusica" ) station.append ("WQXR New York") station.append ("WPR Winsconsin") station.append ("BBC world servic") station.append ("LINN jazz") station.append ("LINN classic") #. ........... def get_local_ip_address (цель):ipaddr ='' попробуйте:s =socket.socke t (socket.AF_INET, socket.SOCK_DGRAM) s.connect ((target, 8000)) ipaddr =s.getsockname () [0] s.close () за исключением:pass return ipaddrprint "Raspberry Pi - Local IP Address" print ( get_local_ip_address ('10 .0.1.1 ')) print (get_local_ip_address (' google.com ')) # показать IP-адресdef display_ipaddr ():show_wlan0 ="ip addr show wlan0 | вырезать -d / -f1 | awk '/ inet / {printf \ "w% 15.15s \", $ 2}' "show_eth0 =" ip addr show eth0 | вырезать -d / -f1 | awk '/ inet / {printf \ "e% 15.15s \", $ 2}' "ipaddr ='' #ipaddr =run_cmd (show_eth0) ipaddr =get_local_ip_address ('10 .0.1.1 ') #if ipaddr ==" ":# ipaddr =run_cmd (show_wlan0) lcd.printString ('IP Address:', 0,0) lcd.printString (ipaddr, 0,1) sleep (2) #menu в пятой кнопке def displaymenu ():if x ==1 :lcd.printString ("1. Дисплей", 0,0) lcd.printString ("IP-адрес", 0,1) elif x ==2:lcd.printString ("2. Аудиовыход", 0,0) lcd .printString («в порт hdmi», 0,1) elif x ==3:lcd.printString («3. Аудиовыход», 0,0) lcd.printString («в аналоговый порт», 0,1) elif x ==4:lcd.printString («4. Аудиовыход», 0,0) lcd.printString («Авт. Выбор порта», 0,1) elif x ==5:lcd.printString («5. Перезагрузить» , 0,0) lcd.printString («Плейлист», 0,1) elif x ==6:lcd.printString («6. ShutDown», 0,0) lcd.printString («Система», 0,1) else:lcd.printString ("7. Выход в", 0,0) lcd.printString ("Главное меню", 0,1) def load_playlist ():output =run_cmd ("mpc clear") output =run_cmd ("/ home / pi / radio / radio_playlist.sh ") def ru n_cmd (cmd):p =Popen (cmd, shell =True, stdout =PIPE, stderr =STDOUT) output =p.communicate () [0] return output def getKey ():val =Arduino.analogRead (14) if val ==1023:вернуть «NONE» elif val <100:return «RIGHT» elif val <150:return «UP» elif val <330:return «DOWN» elif val <510:return «LEFT» elif val <750:return "SEL" else:return "KBD_FAULT" load_playlist () def getTrack ():L =[S.strip ('\ n') for S in os.popen ('mpc'). Readlines ()] # Получить информацию о дорожке из стандартного вывода команды mpc output =run_cmd ("mpc current") station =output [0:16] # Выбрать станцию ​​и отслеживать информацию track =output [-17:-1] lcd.printString (station + "" * (16 - len (станция)), 0, 0) lcd.printString (track + "" * (16 - len (track)), 0, 1) track_num =1 # Начало на дорожке номер 1os.system (" sudo service mpd restart ") os.system (" mpc play "+ str (track_num)) # Укажите ОС, чтобы она воспроизводила его, пока loop_radio ==1:getTrack () loop_menu =1 x =1 key =getKey () if key =="UP":track_num + =1, если track_num> max_trax:trac k_num =1 lcd.printString (станции [track_num-1], 0,0) os.system («sudo service mpd restart») os.system («mpc play» + str (track_num)) getTrack () elif key ==«ВНИЗ»:track_num - =1, если track_num <1:track_num =max_trax lcd.printString (станции [track_num-1], 0,0) os.system («sudo service mpd restart») os.system («mpc play» + str (track_num)) getTrack () elif key =="LEFT":os.system ("mpc volume +10") lcd.printString (16 * "", 0, 0) lcd.printString (16 * "", 0, 1) output =run_cmd ("mpc volume") lcd.printString ("VOLUME UP:", 0, 0) lcd.printString (output, 5, 1) sleep (.25) lcd.printString (16 * "" , 0,0) lcd.printString (16 * "", 0,1) elif key =="RIGHT":os.system ("mpc volume -10") lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0,1) output =run_cmd ("mpc volume") lcd.printString ("VOLUME DOWN:", 0, 0) lcd.printString (output, 5, 1) sleep (.25 ) lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0,1) elif key =="SEL":while loop_menu ==1:displaymenu () key =getKey () if key =="ВПРАВО":os.system ("mpc volume +10 ") lcd.printString (16 *" ", 0, 0) lcd.printString (16 *" ", 0, 1) output =run_cmd (" mpc volume ") lcd.printString (" VOLUME UP:", 0, 0) lcd.printString (output, 5, 1) sleep (.25) lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0,1) elif key ==" LEFT ":os.system (" mpc volume -10 ") lcd.printString (16 *" ", 0,0) lcd.printString (16 *" ", 0,1) output =run_cmd (" mpc volume ") lcd .printString ("VOLUME DOWN:", 0, 0) lcd.printString (output, 5, 1) sleep (.25) lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0,1) elif key =="UP":если x <=1:x =7 else:x =x - 1 elif key =="DOWN":если x> =7:x =1 else:x =x + 1 ключ elif =="SEL":if x ==1:display_ipaddr () #get_local_ip_address () sleep (1) elif x ==2:output =run_cmd ("amixer -q cset numid =3 2") lcd. printString ("Audio OUT -> HDMI", 0, 0) lcd.printString ("output", 0, 1) sleep (.5) elif x ==3:output =run_cmd ("amixer -q cset numid =3 1 ") lcd.printString (" Audio OUT-> Analog ", 0, 0) lcd.printString (" output ", 0, 1) sleep (.5) elif x ==4:output =run_cmd ("amixer -q cset numid =3 0") lcd.printString ("Audio OUT-> Auto", 0, 0) lcd.printString ("output", 0, 1) sleep (.5) elif x ==5:load_playlist () os.system ('mpc play 1') elif x ==6:lcd.printString («До свидания», 0, 0) lcd.printString («Хорошего дня», 0, 1) output =run_cmd ("mpc stop") # =run_cmd ("sudo shutdown now") quit () elif x ==7:loop_menu =0 getTrack () break elif key =="RIGHT":os.system ("mpc volume +2 ") lcd.printString (16 *" ", 0,0) lcd.printString (16 *" ", 0,1) output =run_cmd (" объем mpc ") lcd.printString (" УВЕЛИЧЕНИЕ ГРОМКОСТИ:", 0 , 0) lcd.printString (output, 5, 1) sleep (.25) lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0,1) elif key =="ВЛЕВО ":os.system (" mpc volume -2 ") lcd.printString (16 *" ", 0, 0) lcd.printString (16 *" ", 0, 1) output =run_cmd (" mpc volume ") lcd. printString ("УМЕНЬШЕНИЕ ГРОМКОСТИ:", 0, 0) lcd.printString (output, 5, 1) sleep (.25) lcd.printString (16 * "", 0,0) lcd.printString (16 * "", 0 , 1) 
radio_plylist.sh SH
это мой плейлист с израильскими станциями
 #! / bin / shmpc clear 1> / dev / null # 1 ecco99mpc add http://99.livecdn.biz/99fm_aac#2 galgalazmpc add http://glglzwizzlv.bynetcdn.com/glglz_mp3#3 galazmpc add http:// glzwizzlv .bynetcdn.com / glz_mp3 # 4 88 fmmpc добавить http://ibala.vidnt.com:8000/iba_radio-88fmM#5 gimelmpc добавить http://ibala.vidnt.com:8000/iba_radio-gimelM#6 радио 100 fmmpc добавить http://100fm.streamgates.net/Radios100Fm#7 kol hamusicampc добавить http://ibala.vidnt.com:8000/iba_radio-kolmusicaM#8 wqxrmpc добавить http://stream.wqxr.org/wqxr#9 npr currentmpc добавить http://current.stream.publicradio.org/kcmp.mp3#10 bbcmpc добавить http://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-eieuk#11 linn jazzmpc добавить http://radio.linnrecords .com:8003 / autodj # 12 linn classicmpc add http://radio.linnrecords.com:8004/autodj 

Схема


Производственный процесс

  1. Универсальный пульт дистанционного управления Raspberry Pi
  2. Кусочек Raspberry Pi
  3. Cycle Chaser
  4. Детектор воров Raspberry Pi
  5. Датчик температуры Raspberry Pi
  6. МАЛИНОВАЯ АВТОМАТИЗАЦИЯ ДОМА
  7. MrRobot - мобильное приложение Ubuntu с поддержкой робототехники (задействованы Raspberry Pi и arduino)
  8. Робот-бокс для компакт-дисков Raspberry Pi
  9. Робот Raspberry Pi, управляемый через Bluetooth
  10. Создайте своего робота для видеостриминга, управляемого через Интернет, с помощью Arduino и Raspberry Pi