Home > DATABASE > Pimoroni Pirate Radio 그리고 라즈베리 파이

Pimoroni Pirate Radio 그리고 라즈베리 파이

글쓴이 : SOONDORI

다양한 전자분야 교육용 제품들을 개발, 판매하고 있는 영국 피모로니社가 소개한 Rasberry PI 기반 응용형 키트. 판매가격은 해외마켓기준 약 50달러. 공식 사이트는 shop.pimoroni.com. (표제부 사진 출처 : https://pbs.twimg.com/media/C5vv__UWgAACLg1.jpg)

(출처 : https://shop.pimoroni.com/products/pirate-radio-pi-zero-w-project-kit)

(10달러 대 라즈베리파이 ‘Pi Zero W’ 보드)

(라즈베리파이 보드에 접속되는 기능보드. Pimoroni는 이것을 pHAT Beat 보드라 명명하였다. 전면에 3색 LED들, 후면에 DAC 내장 앰프 소자 배치)

(조립 후 후면. 출처 : https://www.adafruit.com/product/3477)

(별매키트를 구매하고 보드 점퍼를 변경한 다음 스테레오 모드로. 출처 : https://kenjaraskits.files.wordpress.com/2018/05/img_20180430_201920.jpg?w=825&h=510&crop=1)

‘라디오’라고 말하고 있지만 사실… 일반 라디오처럼 전파를 수신하고 소리는 재생하는 것이 아니라 a) ‘해적 방송(Pirate Radio/Broadcast)’으로 일컬어지는 인터넷방송국에 연결하여 b) 디지털 스트리밍 정보를 DAC 통합형 D-클래스 앰프(MAX98357A, 3.2W@4오움)로 변환, 출력하는 것이다.

그러므로 이 라디오는 라디오가 아니라 재프로그래밍 가능한 입/출력 장치이고… IoT 트랜드를 이끌고 있는 라즈베리파이, 그 세상 다양한 응용 사례들 중 하나.

어떻게 사용할까? PC에서 끌어온 USB 전원을 쓴다.

구성요소들 모두가 오픈-솔루션기반인 만큼 관련 PC 및 라즈베리파이 보드용 패키지 프로그램들도 무료로 제공되고 특히, Python 프로그래밍을 통해 소스를 입맛에 맞게 고쳐 쓸 수도 있다. 방송국 리스트를 포함하면 PC 제어가 없어도 +/-키로 선국 가능하다. 즉, 단독으로 동작한다.

* 출발점 URL : https://forums.pimoroni.com/t/piratepython-pirate-radio/7058


[ 소스코드 예시 ]

(출처 : https://github.com/Make-Magazine/PirateRadio/blob/master/PirateRadio.py)

#!/usr/bin/env python
# Pirate Radio
# Author: Wynter Woods (Make Magazine)

try: # the following tests for a python3.x module
import configparser
except: # if the module isn’t found, we’re likely running python2.x and will just trick it into working
import ConfigParser as configparser
finally:
import re
import re
import random
import sys
import os
import threading
import time
import subprocess

fm_process = None
on_off = [“off”, “on”]
config_location = “/pirateradio/pirateradio.conf”

frequency = 87.9
shuffle = False
repeat_all = False
merge_audio_in = False
play_stereo = True
music_dir = “/pirateradio”

music_pipe_r,music_pipe_w = os.pipe()
microphone_pipe_r,microphone_pipe_w = os.pipe()

def main():
daemonize()
setup()
files = build_file_list()
if repeat_all == True:
while(True):
play_songs(files)
else:
play_songs(files)
return 0

def build_file_list():
file_list = []
for root, folders, files in os.walk(music_dir):
folders.sort()
files.sort()
for filename in files:
if re.search(“.(aac|mp3|wav|flac|m4a|ogg|pls|m3u)$”, filename) != None:
file_list.append(os.path.join(root, filename))
return file_list

def play_songs(file_list):

(이하 생략)

 

Leave a Reply

Your email address will not be published. Required fields are marked *