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

Wi‑Fi интернет-радио на Raspberry Pi и Arduino: стриминг станций со всего мира

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

Компонент Количество Примечание
Arduino UNO 1
Raspberry Pi 3 Model B 1 Встроенный WiFi, антенна не нужна
SainSmart LCD Keypad Shield для Arduino 1 С кнопками и дисплеем
Блок питания 5 В 1

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

О проекте

Обзор

Люблю слушать радио во время дел, но FM-приём у меня ужасен. Интернет-радио — удовольствие, но не хочу использовать смартфон. Нашёл несколько решений, основан на проекте Arduino / Raspberry Pi Internet Radio от akellyirl.

Код на Python на Raspberry Pi использует Linux-демон MPD (Music Player Daemon) и клиент MPC. Библиотека nanpy позволяет Python общаться с Arduino, который управляет кнопками и LCD.

Использовал LCD/Keypad Shield SainSmart, позже добавил 4 кнопки с сломанного будильника. Сначала был Pi 2 с USB-WiFi, теперь Pi 3 со встроенным WiFi. Самое сложное — найти правильные URL станций. Помогла программа URL Helper, которая перехватывает потоки с сайтов. Звук — активные компьютерные колонки, тоже со свалки.

Wi‑Fi интернет-радио на Raspberry Pi и Arduino: стриминг станций со всего мира
Wi‑Fi интернет-радио на Raspberry Pi и Arduino: стриминг станций со всего мира

Инструкция по установке (для RP3)

Основана на туториале akellyirl.

  1. Обновить Raspbian:
    $ sudo apt-get update
  2. Установить MPD/MPC:
    $ sudo apt-get install mpc mpd
  3. Установить nanpy (Python + прошивка для Arduino):
    1. Пакеты Arduino для сборки прошивки:
      $ apt-get install arduino
    2. Скачать nanpy для Python и распаковать в /home/pi:
      $ wget https://pypi.python.org/packages/source/n/nanpy/nanpy-v0.7.tar.gz
      $ tar xvf nanpy-v0.7.tar.gz
    3. Setuptools (зависимость):
      $ wget https://pypi.python.org/packages/source/s/setuptools/setuptools-0.6c11.tar.gz#md5=7df2a529a074f613b509fb44feefe74e
      $ tar xvf setuptools-0.6c11.tar.gz
    4. pyserial (зависимость):
      $ wget https://pypi.python.org/packages/source/p/pyserial/pyserial-2.6.tar.gz
      $ tar xvf pyserial-2.6.tar.gz
    5. Установить setuptools:
      $ cd setuptools-0.6c11
      $ sudo python setup.py install
    6. Установить nanpy:
      $ cd ../nanpy
      $ sudo python setup.py install
    7. Установить pyserial:
      $ cd ../pyserial-2.6
      $ sudo python setup.py install
  4. Прошить Arduino прошивкой nanpy:

    Подключить Arduino к USB Raspberry Pi.

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

    Если устройство не найдено на /dev/ttyACM0 — попробовать другой USB-порт.

Написал скрипт плейлиста и основной Python-скрипт (вкладка Code), настроил автозапуск при загрузке Pi. Добавил кнопку для меню (показ IP, выбор аудиовыхода).

Последнее обновление: переделал — добавил ротари энкодеры для переключения станций и громкости, напечатал корпус на 3D-принтере.

Wi‑Fi интернет-радио на Raspberry Pi и Arduino: стриминг станций со всего мира

Код

piradio (Python)

from datetime import datetime
from subprocess import *
from time import sleep, strftime
from Queue import Queue
from threading import Thread
import os
from nanpy import Arduino, Lcd
import socket

Arduino.pinMode(14, Arduino.INPUT)
lcd = Lcd([8,9,4,5,6,7],[16,2])  # Пины LCD для SainSmart Shield
lcd.printString("Ruben's RadioZ",0,0)
lcd.printString("Loading" + "."*3,0,1)
sleep(5)

max_trax = 10
x = 1
loop_menu = 1
loop_radio = 1
stations = []
stations.append("Ecco 99 ")
stations.append("Galgalaz ")
stations.append("Galaz ")
stations.append("88 FM ")
stations.append("Gimel ")
stations.append("Radios 100fm ")
stations.append("Kol Hamusica ")
stations.append("WQXR New York ")
stations.append("WPR Winsconsin ")
stations.append("BBC world servic")
stations.append("LINN jazz")
stations.append("LINN classical")

def get_local_ip_address(target):
    ipaddr = ''
    try:
        s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        s.connect((target, 8000))
        ipaddr = s.getsockname()[0]
        s.close()
    except:
        pass
    return ipaddr

print "Raspberry Pi - Local IP Address"
print(get_local_ip_address('10.0.1.1'))
print(get_local_ip_address('google.com'))

def display_ipaddr():
    # ... (показ IP на LCD)
    pass

def displaymenu():
    # ... (меню на 5-й кнопке)
    pass

def load_playlist():
    run_cmd("mpc clear")
    run_cmd("/home/pi/radio/radio_playlist.sh")

def run_cmd(cmd):
    p = Popen(cmd, shell=True, stdout=PIPE, stderr=STDOUT)
    return p.communicate()[0]

def getKey():
    val = Arduino.analogRead(14)
    if val == 1023: return "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():
    # ... (получение инфо о треке из mpc, вывод на LCD)
    pass

# Основной цикл
os.system("sudo service mpd restart")
os.system("mpc play 1")
while loop_radio == 1:
    getTrack()
    loop_menu = 1
    x = 1
    key = getKey()
    # Обработка клавиш: UP/DOWN — смена станции, LEFT/RIGHT — громкость, SEL — меню
    # В меню: 1) IP, 2) Audio->HDMI, 3) Audio->Analog, 4) Audio->Auto, 5) Reload playlist, 6) Shutdown, 7) Exit
    # ... (полный код в оригинале)

radio_playlist.sh (Shell)

#! /bin/sh
mpc clear 1>/dev/null
# 1 ecco99
mpc add https://99.livecdn.biz/99fm_aac
# 2 galgalaz
mpc add https://glglzwizzlv.bynetcdn.com/glglz_mp3
# 3 galaz
mpc add https://glzwizzlv.bynetcdn.com/glz_mp3
# 4 88 fm
mpc add https://ibala.vidnt.com:8000/iba_radio-88fmM
# 5 gimel
mpc add https://ibala.vidnt.com:8000/iba_radio-gimelM
# 6 radios 100 fm
mpc add https://100fm.streamgates.net/Radios100Fm
# 7 kol hamusica
mpc add https://ibala.vidnt.com:8000/iba_radio-kolmusicaM
# 8 wqxr
mpc add https://stream.wqxr.org/wqxr
# 9 npr current
mpc add https://current.stream.publicradio.org/kcmp.mp3
# 10 bbc
mpc add https://bbcwssc.ic.llnwd.net/stream/bbcwssc_mp1_ws-eieuk
# 11 linn jazz
mpc add https://radio.linnrecords.com:8003/autodj
# 12 linn classical
mpc add https://radio.linnrecords.com:8004/autodj

Схемы

Wi‑Fi интернет-радио на Raspberry Pi и Arduino: стриминг станций со всего мира

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

  1. Создание профессионального универсального пульта на Raspberry Pi с LIRC
  2. Преобразование RF в DC с Raspberry Pi: сборка и отладка детектора огибающей
  3. Cycle Chaser: превратите свой велосипед в ночной световый шоу с Raspberry Pi
  4. Создание детектора вора на базе Raspberry Pi — пошаговое руководство
  5. Создайте домашний монитор температуры на Raspberry Pi с MCP9808, InfluxDB и Grafana
  6. Создайте систему домашней автоматизации на Raspberry Pi для удаленного управления
  7. MrRobot: Ubuntu Mobile-приложение для управления роботом Rapiro голосом, касанием и встряхиванием
  8. DIY робот в стиле Wall‑E на Raspberry Pi из коробки от CD
  9. Создание Bluetooth-робота на Raspberry Pi с аудио-обратной связью
  10. Создание интернет-управляемого видеostreaming-робота на Arduino и Raspberry Pi