[rpi] Runeaudio를 이용한 오디오 시스템 만들기
Runeaudio를 이용한 오디오 시스템 만들기
How to make audio system using Runeaudio
안녕하세요. 산딸기마을 zzeromin입니다. 마이애니님이 작성하신 하드웨어 제작법에 이어서 소프트웨어 설치법에 대해서 글을 올립니다.
산딸기마을에서 제작한 파이올인원과 파이미니올은 아래와 같은 Runeaudio, Volumio, KODI(OSMC, Openelec), RetroPie를 이용하여 미디어시스템을 구축할 수 있습니다.
이 글에서는 아래 그림과 같이 Runeaudio을 우선 다루겠습니다.
Runeaudio는 임베디드 플랫폼에서 사용할 수 있는 Arch Linux 기반 오픈소스 하이파이 디지털 뮤직 플레이어입니다. (http://www.runeaudio.com/about/)
목차.
1. Runeaudio 다운로드와 설치
2. DAC 설치 방법(PCM5102 또는 ES9023)
3. I2C 방식 LCD 설치 방법
4. LCD에 음악 정보를 출력하기 위한 python2 패키지 설치
5. IR-remote 설치
아래 링크에서 라즈베리파이2용 이미지를 내려받습니다.
Latest release: v0.3-beta (14/04/2015)
http://www.runeaudio.com/download/
Win32DiskImager를 이용하여 4G 이상 SD카드에 이미지를 설치합니다.
http://www.runeaudio.com/documentation/quick-start/sd-card-setup-windows/
마이애니님의 글을 참고하세요.
http://www.rasplay.org/?p=24175
라즈베리파이와 DAC를 GPIO 핀으로 연결하는 방법은 아래 링크를 참고하십시오.
http://www.tjaekel.com/T-DAC/files/RPi-Bplus_guideline.pdf
2. DAC 설치 방법(PCM5102 또는 ES9023)
이 프로젝트에서 사용한 DAC는 PCM5102입니다. ES9023도 사용하실 수 있습니다. 국내에서 정식 수입하는 곳이 없으므로 ebay나 aliexpress에서 구매를 하시길 바랍니다.
PCM5102 Features:
Input: I2S
Output: RCA
Sampling rates supported: 32bit 384khz beyond ES9023
SNR :112db
Distortion:-93db
Directly output is 2.1V RMS audio voltage
PCB Size: 48 x 48mm
ES9023 Features:
Input: I2S
Output: RCA
Sampling rates supported: 16 / 24bit 192khz
PCB Size: 50 x 42mm
라즈베리파이와 DAC를 GPIO 핀으로 연결하는 방법은 아래 링크를 참고하십시오.
http://www.tjaekel.com/T-DAC/files/RPi-Bplus_guideline.pdf
윈도우(putty) 또는 리눅스 터미널에서 아래 명령어를 실행합니다.
# sudo nano /boot/config.txt
아래 두 줄을 찾아서 #을 제거 후
ctrl+x 누르고 y, 엔터
device_tree_param=i2s=on
dtoverlay=hifiberry-dac
card 1에 있는 snd_rpi_hifiberry 가 화면에 보이면 정상적으로 설치한 것입니다.
이 프로젝트에서 사용한 LCD는 16*2 LCD입니다.
i2c Address: 0x27 or 0x3f
Backlight (Blue or Yellow background).
Supply voltage: 5V
Size: 82x35x18 mm
LCD를 설치하는 방법은 우선 i2c를 활성화 시키고 i2c-tools 패키지를 설치합니다.
* reference site:
http://buzzthisnow.com/how-to-enable-i2c-on-raspberry-pi-2-running-runeaudio-archlinux/
윈도우(putty) 또는 리눅스 터미널에서 아래 명령어를 실행합니다.
아래 줄을 찾아서 #을 제거 후
ctrl+x 누르고 y, 엔터
device_tree_param=i2c_arm=on
끝으로 이동(키보드 End키) 후 아래 줄을 붙여넣고
ctrl+x 누르고 y, 엔터
bcm2708.vc_i2c_override=1
# nano /etc/modules-load.d/raspberrypi.conf
맨아래에 아래 내용을 추가 후
ctrl+x 누르고 y, 엔터
pacman(프로그램 패키지 관리자) 라이브러리를 업데이트 합니다.
* debian 리눅스 계열(우분투, 라즈비안)은 프로그램 설치할 때 apt를 사용하지만 arch 리눅스는 pacman을 사용합니다.
i2c LCD 가 사용하는 주소를 확인합니다.
일반적으로 사용하는 주소는 3f 또는 27 입니다. (0x3f or 0x27)
4. LCD에 음악 정보를 출력하기 위한 python2 패키지 설치
* runeaudio 포럼의 XploD 님 자료를 참고하시면 이해를 쉽게 할 수 있습니다.
http://www.runeaudio.com/forum/lcd-display-and-buttons-in-python-tutorial-and-code-t1191.html
주의) 현재 사용하고 있는 runeaudio의 리눅스 커널은 ‘Linux runeaudio 3.18.7-3-ARCH’ 입니다. 룬오디오 안에는 python2 버전이 미리 설치되어 있습니다. 그래서 python 관련 프로그램 패키지는 대부분 python2를 사용합니다. (python3와 혼동이 없기를 바랍니다.)
여기부터는 패키지 설치 스크린샷을 생략합니다.
# pacman –S python-setuptools
나. 음악 정보, GPIO 관련 프로그램 설치
# cd
# git clone https://github.com/Mic92/python-mpd2.git
# cd python-mpd2/
# python2 setup.py install
# cd
# wget https://pypi.python.org/packages/source/R/RPi.GPIO/RPi.GPIO-0.6.1.tar.gz#md5=254d0443a436eb241367c487274e7197
# tar -xvf RPi.GPIO-0.6.1.tar.gz
# cd RPi.GPIO-0.6.1
# python2 setup.py install
# cd
# git clone https://github.com/RandyCupic/RuneAudioLCD.git
# cd RuneAudioLCD/
# Specify I2C display address (usually 0x27)
I2C_DISPLAY_ADDRESS = 0X3f
# This program generates LCD output dynamically
# Which means that it support both 20x4 and 16x2 LCDs
# Specify LCD size (for example 20x4 or 16x2 LCD
LCD_COLUMNS = 16
LCD_ROWS = 2
# Specify scrolling period (for artist and title) in SECONDS
# WARNING: By decreasing scrolling_period, CPU usage increases fast
SCROLLING_PERIOD = 0.5
70번째 줄 숫자 True를 False로 수정
*주의: 버튼 기능을 비활성화하는 부분입니다. 이 부분을 건너뛰면 룬오디오가 다운됩니다. 꼭 수정하세요.
# If you want to use buttons, put to True, otherwise put to False
BUTTONS_ENABLE = False
# For 16x2 LCD, remove decimal value (to fit on the screen)
if (self.columns < 16):
# Define LCD device constants
LCD_WIDTH = 16 # Default characters per line # TODO
다. 부팅시 start.py를 실행시키는 서비스 만들기
# nano /usr/lib/systemd/system/runelcd.service
아래 내용 붙여넣고 ctrl+x 누르고 y, 엔터
[Unit]
Description=Runeaudio_I2C_LCD service
After=network.target
[Service]
Type=simple
ExecStartPre=/usr/bin/sh -c "sleep 3"
ExecStart=/usr/bin/python2 /root/RuneAudioLCD/start.py
Restart=always
[Install]
WantedBy=multi-user.target
시스템 시작시 서비스 실행하는 방법은 다음과 같습니다.
# systemctl start runelcd.service
# systemctl enable runelcd.service
만약 LCD에 변화가 없으면 아래 명령어를 실행하여 상태를 확인합니다.
# systemctl status -l runelcd.service
이 프로젝트에 사용한 IR센서는 다음과 같습니다.
KSM-603LM5ND(리모콘모듈 수광부)
http://eleparts.co.kr/EPX33JXL
1번핀 -> GPIO 17
2번핀 -> GND 09
3번핀 -> 3.3V 01
* XploD 님 자료를 참고하시면 쉽게 따라서 하실 수 있습니다.
http://buzzthisnow.com/ir-remote-with-lirc-on-raspberry-pi-2-running-runeaudio-archlinux/
차례대로 실행하시면 9번에 문제가 발생합니다.
왜냐하면 룬오디오에서 irrecord로 리모컨 셋팅을 할 수 없다고 xplode님이 문제점을 지적했습니다.
irw 문제 해결 방법은 볼루미오를 이용(sudo irrecord -f -d /dev/lirc0 /etc/lirc/lircd.conf)해서 lircd.conf를 만든 후에 룬오디오로 가져와서 /etc/lirc/lircd.conf.d 에 저장하면 됩니다. MPC 명령어를 저장한 lircrc 파일은 /etc/conf.d/에 저장하세요.
lircd.conf를 만드는 방법은 마이애니님이 작성하신 ‘volumio 적외선수신IR리시버를이용한 리모트컨트롤’ 글을 참고하시길 바랍니다.
http://www.runeaudio.com/documentation/
http://www.runeaudio.com/forum/lcd-display-and-buttons-in-python-tutorial-and-code-t1191.html