2015.05.04 01:49

인터넷 라디오 프로토타입을 완성. 실행 후 버튼을 누르면 채널이 변경되도록 만들었다. 


일단 회로도 구성은 아래와 같다. 아직은 버튼이 하나라 간단하다. 



YELLOW BUTTON : 3.3V로 전원이 들어가고 10K옴을 통해 버튼으로 들어간다. 위 그림에서 위 오른쪽 다리 방향으로 GND로 이어지고, 버튼의 입력은 18번 핀으로 받도록 설정했다. 18번 pin은 wiringPI에서 5번이다.


실행 후 노란 버튼을 누르면 미리 입력된 채널이 변경되도록 했다. mms 출력을 위해 mplayer를 사용하며, mplayer 설치 방법 을 참고하기 바란다. 


코드는  아래와 같다. 

#include <stdio.h>

#include <stdlib.h>

#include <signal.h>

#include <time.h>

#include <unistd.h>

#include <wiringPi.h>


int main (void)

{

  if(-1 == wiringPiSetup())

    return 1;


  int SWITCH = 5; //  pin 18

  pinMode( SWITCH, INPUT);


  clock_t startPush = 0;// for shutdown

  const char *radiolist[] = {

    "mms://210.105.237.100/mbcam"

    ,"mms://211.181.136.136/livefm"

    ,"mms://114.108.140.39/magicfm_live"

    ,"mms://115.84.165.160/fmlive"

    ,"mms://211.218.209.124/L-FM_300k"

  };


  int count = sizeof(radiolist)/sizeof(int);

  printf("radio list count = %d\n", count);

  printf("now time = %d \n", startPush);


  pid_t sndPID = -1;

  pid_t myPID = getpid();

  int radioIdx = 0;

  for (;;)

  {

    if( digitalRead(SWITCH) == 0)

    {

        if(sndPID != -1)

          kill(sndPID, SIGQUIT);

        sndPID = fork();

        if(sndPID == 0)

        {

          sndPID = execl("/usr/bin/mplayer", "mplayer", "-quiet", radiolist[radioIdx], NULL);

        }else{

          ++radioIdx;

          if(radioIdx >= count)

            radioIdx = 0;

        }

    }

  }

  return 0 ;

}

18번 핀의 입력을 받으면 저장한 라디오 주소를 바꿔주도록 했다.


결과는 아래와 같다. 



다음에는 볼륨 조절, 종료 코드를 추가해 볼 예정이다. 

이후 블루투스 스피커 연결, 외형 제작, 실기 테스트 순서로 진행되어 마무리 될 예정. 


다들 좋은 하루 되세요. ^^





저작자 표시 비영리 동일 조건 변경 허락
신고
2015.04.29 03:25

gpio의 helloworld 예제인 블링크를 wiringPi를 이용해 샘플을 실행해 봤다.


일단 wiringPi lib 설치부터... 아래와 같다. 


설치


1. git 설치

sudo apt-get install git-core


2. wiringPi 프로젝트 다운

git clone git://git.drogon.net/wiringPi


3. build

clone한 위치에 wiringPi안에 들어가서 ./build 실행.

빌드가 이상없이 되었다면 "find / -name "gpio"를 실행해 보자. 

"/usr/local/bin"과 방금 빌드한 곳, 두 곳에 gpio를 발견할 수 있다.

빌드한 곳 gpio 폴더 안에서 ./gpio -v 한 결과와, 

gpio -v 한 결과가 다르다면 gpio 파일을 "/usr/local/bin"에 복사해주라. 

build하면 복사될 줄 알았는데 안된 듯. pi2라서 gpio old version에서 제대로 인식을 못해서 한참 원인을 찾다보니 이거였어.


4. raspberryPi의 핀 번호 및 역할 보기

gpio를 활용하면 보드에 핀 번호를 어떻게 보는지 쉽게 알 수 있다.

"gpio readall" 을 해보면 아래와 같은 결과를 볼 수 있다.     

보드에는 두 줄의 핀이 있는데 rapberryPi2는 위와 같은 순서로 구성되어 있다. 위 표 중앙에 Physical 부분이 보드의 핀 순서와 일치한다. (1,2번이 보드의 전원램프 쪽. 39,40이 usb가 위치한쪽)

Physical을 중심으로 양쪽의 컬럼명이 일치하는 것을 볼 수 있다. (노란색 라인을 참고할 것!)

각 컬럼의 정보는 다음과 같다. 

 BCM 

 Broadcom의 BCM2835 칩에서 사용하는 핀번호

 wPi 

 WiringPi 라이브러리의 핀번호

 Name 

 GPIO의 이름

 Mode 

 IN - 입력모드 ,  OUT - 출력모드

 V

 핀의 값. 1 - 전압이 High상태, 0 - Low상태

 Physical

 핀헤더의 번호

붉은색 라인 부분을 보자.

wiringPi의 blink 샘플을 보면 pin값을 0으로 사용한다. wiringPi에서 0은 wPi가 0인 것이며, 핀헤더 번호는 11번, 핀의 위치는 전원램프 쪽에서 6번째에 위치하다는 걸 알 수 있다. 

이제 샘플 코드를 보자. 


5. 샘플 코드

#include <wiringPi.h>

int main (void)

{

  int PIN = 0;

  wiringPiSetup () ;

  pinMode (PIN, OUTPUT) ;

  int max_count = 5;

  int cnt = 0;

  for (;;)

  {

    digitalWrite (PIN, HIGH) ;

    delay (500) ;

    digitalWrite (PIN,  LOW) ;

    delay (500) ;

    ++cnt;

    if(cnt>=max_count)

        break;

  }

  return 0 ;

}

기존의 샘플 코드에서 LED의 깜밖임이 5번 반복 후 종료하도록 수정했다. PIN변수는 wPi값을 의미한다. 


빌드는 아래와 같이 하면된다.

gcc -o blink blink.c -l:libwiringPi.so.2.25 -I/usr/local/include -L/usr/local/lib

어떤 샘플에서 lib 링크할 때 -lwiringPi 로 되어 있는데 libwiringPi.so 를 링크하겠다는 이야기다. 
새로 받아 빌드한 경우 버전명이 lib 끝에 붙는데 이를 정확히 사용하기 위해서는 위와 같이 입력하면 된다

6. 실행
./blink를 실행해보자. 아래와 같은 결과를 볼 수 있다.




저작자 표시 비영리 동일 조건 변경 허락
신고

'개발/경험 > RaspberryPi' 카테고리의 다른 글

버튼으로 LED, Sound 처리하기  (0) 2015.05.01
blink 샘플 실행  (0) 2015.04.29
기본적이지만 중요 정보 몇가지  (0) 2015.04.18
드디어 왔다!!  (0) 2015.04.17
2015.04.18 22:06

이 글은 개인적으로, 라즈베리파이를 활용한 첫번째 프로젝트이다. 


아내가 집 안쪽에서 라디오 안잡혀서 힘들다고 불평이었다. ipad에 라디오 어플을 설치해줘도 각 방송사마다 별도 어플을 설치해야 되서 힘들다고.. 


고민끝에 라파이로 라디오를 만들어주기로 했다. 


그래서 최근에 라파이를 구매했고, 오늘 라이브러리 설치해서 테스트까지는 했다. 


과정은 아래와 같다.

(* 아래 과정은 http://kocoafab.cc/tutorial/view/340 블로그의 내용을 참고해서 제작되었으며, 짧은 진행을 위해 불필요한 과정 생략, 내 환경과 틀린 부분을 수정하여 제작되었음을 알립니다.)


(* command의 모든 과정은 sudo 명령을 먼저 입력하고 진행하자. 혹은 귀찮다면 나처럼, sudo su를 입력해서 권환을 획득 후 진행해도 된다.) 


1. 일단 패키지 설치를 위해 apt-get 업데이트를 해보자.

   apt-get update

   apt-get upgrade


2. 사운드 드라이버가 설치되었는지 확인합니다. 



만약 설치가 안되었다면 아래 명령을 통해 설치를 해보시기 바랍니다. 

modprobe snd-bcm2835


3. 이제 라디오 방송을 듣기 위해 mplayer를 설치합니다.
우리나라의 라디오 방송은 대부분 Microsoft Media Server (mms , http://goo.gl/XPTGJv 참고)로 전송됩니다. 이를 플레이 할 수 있는 대표적인 플레이어 입니다. 

apt-get install mplayer

설치 후 mplayer config에서 오디오 출력장치에 대한 설정을 수정해야 합니다. 

ctrl+w 로  ao=pulse, alsa, sdl: aalib 부분을 찾아 주석을 처리해 주세요. 

4. 이제 들어봅시다.

아래와 같이 입력해서 라디오를 들어봅시다. 

mms 주소는 인터넷으로 검색해 보시면 많이 나옵니다. 



이상입니다. 


다음 과정은 아래와 같이 진행될 예정입니다. 진행에 문제가 발생할 수 있어, 아래 과정은 변경될 수 있습니다.


1. 라즈베리파이 설정 

2. 전용 플레이어 프로그램 구현

3. 여러 mms 주소를 입력해두고 채널을 전환하는 과정 구현

4. 외부 스위치를 통해 채널 전환하는 과정

5. 설치 구동 영상 


저작자 표시 비영리 동일 조건 변경 허락
신고
2015.04.18 15:28

기본 id는 "pi", pw는 "raspberry".

--------------------------------

sd에 라즈비안 설치 시 기본 비번은 변경하는게 좋으며, 

초기 설정에서 놓쳤다면 이후 "raspi-config"를 입력하면 다시 설정할 수 있다.


보드에 전원 스위치가 없다.

--------------------------------

전원이 연결되면 바로 가동되는데, 종료시 전원을 바로 내리면 주변장치에 문제가 발생할 수 있다. ( sd카드와 같은.. )

" shutdown -h now " 커멘트를 통해 꼭 모든 디바이스가 unmount 된 이후 종료되도록 해줘야 한다.

재가동하려면 전원선을 뺐다가 다시 연결하니 되네. 이거 몰라서 한참 찾음.


SD 카드는 가능한 큰걸로

---------------------------------

http://www.raspberrypi.org/downloads 에서 os 이미지를 다운받아 http://sourceforge.net/projects/win32diskimager/ 유틸리티를 이용해 SD에 구워 사용하게 되며, 보통 이 sd를 통해 계속 운영하게 된다. 

GPIO용이 아닌 개발 device로 사용하려면 여러가지 라이브러리를 사용해야 하기 때문에 가능한 큰 용량의 sd로 시작하는게 좋다.


전원만 연결하면 원격으로 바로 사용할 수 있게 세팅하자.

---------------------------------

이를 위해 무선랜 설치, 자동 로그인 두가지 설정이 필요하다. 

아래 과정시 관리자 권한을 필요로 하기 때문에 sudo를 입력하거나 혹은 sudo su를 입력 후 아래 절차를 진행하자.


무선랜 설치

------------------------------------

공간활용을 위해 가능한 무선랜을 추천한다. 난 처음 구매시 netis 제품이 동봉되어 도착했다.

무선랜은 아래와 같은 순서로 설치하면 된다. (x-windows에서 설정은 간단하니 패스, 콘솔에서 설정하는 방법을 다룬다.)


1. 설치된 공유기에 접속 설정

nano /etc/wpa_supplicant/wpa_supplicant.conf 를 실행하면 아래와 같은 화면이 뜬다.



아래와 같이 입력하자. ssid와 psk는 각자 공유기의 설정에 따른 값을 입력해야 한다.



nano editor는 vi보다는 좀 더 사용하기 쉽다. 


문자열을 찾을 때는 ctrl+w 입력 후 찾고자 하는 문자를 입력하면 된다. 

ctrl+x를 입력하면 수정된 경우, overwrite할지 물어보고 Y를 입력하면 저장하고 종료된다.


2. nic(network interface card) 설정


nano /etc/network/interfaces 를 입력하고 해당 정보를 아래와 같이 수정한다.



이제 설정은 모두 마무리 되었다. 아래와 같이 무선 인터넷을 재시작해보자.


ifdown wlan0

ifup wlan0


만약 에러가 발생한다면 해당 메세지에 따라 수정이 필요할 수 있다. 잘 안된다면 전체 오류 메세지를 댓글로 달아주면 확인 후 답변 할지도 ^^;;;


재시작되면 ifconfig 명령으로 할당된 ip를 확인할 수 있다. 이제 자동 로그인 되도록 해보자.


2. 자동 로그인 설정


nano /etc/inittab 를 입력해 시스템 기동시 처리되는 내용이 기록된 파일을 연다.


각 런레벨별로 실행하는 정보 라인을 찾아보자. 


1:2345:respawn:/sbin/getty --noclear 38400 tty1  => 이와 유사한 라인을 찾아볼 수 있다. ctrl+w로 noclear를 검색해서 찾아보자.


이를 주석 처리하고 (문장 제일 앞에 #을 붙이면 된다.), 아래 라인을 입력하자.


1:2345:respawn:/bin/login -f pi tty1 </dev/tty1 > /dev/tty1 2>&1


위 문장의 상세한 설명은 생략한다. -0-a

이제 시스템을 재시작해보면 자동으로 로그인 되는 모습을 볼 수 있다.


저작자 표시 비영리 동일 조건 변경 허락
신고

'개발/경험 > RaspberryPi' 카테고리의 다른 글

버튼으로 LED, Sound 처리하기  (0) 2015.05.01
blink 샘플 실행  (0) 2015.04.29
기본적이지만 중요 정보 몇가지  (0) 2015.04.18
드디어 왔다!!  (0) 2015.04.17
2015.04.17 06:18

작년부터 라즈베리파이를 살까 말까 고민했었는데.. 


무얼 만들지를 고민하다가 최근 아내가 간단한 라디오를 원해서, 


1) 부엌에 설치할 음성인식 인터넷 라디오.. 


아이가 요괴워치 시계를 사고 싶어 하는데 갈 때 마다 없어서 만들기로 한.


2) 메달을 삽입하면 TFT 화면에 소환 영상이 같이 출력되면서 소리가 나는 요괴워치 장남감.


을 만들려고 구매를 결정.


어제 손이 들어왔다. 


새로운걸 배우는건 언제나 두근두근이라.. ^^


게다가 이런 소식도... 윈도우10 라즈베리파이 지원!!


저작자 표시 비영리 동일 조건 변경 허락
신고

'개발/경험 > RaspberryPi' 카테고리의 다른 글

버튼으로 LED, Sound 처리하기  (0) 2015.05.01
blink 샘플 실행  (0) 2015.04.29
기본적이지만 중요 정보 몇가지  (0) 2015.04.18
드디어 왔다!!  (0) 2015.04.17