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.05.01 18:16

이전에서는 LED를 주기적으로 깜밖이는 것만 했었다. 이번에는 두가지를 복합적으로 해봐야겠다. 


이거 다음엔 바로 인터넷 라디오로 간다. -0-a


일단 오늘의 보드는 아래와 같이 설정한다.




LED : 11번 핀에서 입력을 받아 330옴 저항을 통해 LED의 긴다리(+)로 연결되고 짧은다리(-)에서 GND로 나간다. 


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


Raspberry pi2 이름로 각 핀의 wiringpi 번호는 아래와 같다. 



개발 목표는 버튼을 누르면 10초간 LED가 켜지고, 지정한 사운드를 출력하도록 한다. 출력 중 입력이 다시 들어오면 기존의 사운드를 중지하고 다시 출력하도록 하자. 


코드는 아래와 같다. 

#include <stdio.h>

#include <stdlib.h>

#include <wiringPi.h>


int main (void)

{

  int SWITCH = 5; //  pin 18

  int LED = 0; // pin 11

  int sndPID = 0;

  

  if(-1 == wiringPiSetup())

    return 1;

  pinMode( SWITCH, INPUT); // 버튼의 입력을 받는다.

  pinMode (LED, OUTPUT) ;  // LED에 신호를 보낸다.


  for (;;)

  {

    digitalWrite (LED, 0) ;

    if( digitalRead(SWITCH) == 0)

    {

       digitalWrite (LED, 1) ;

       sndPID = fork();

       if(sndPID == 0)

       {

          // 사운드 출력에는 mplayer를 사용한다. 기존에 출력 중이라면 중지시킨다.

          system("killall mplayer");

          execlp("/usr/bin/mplayer", " ", "/home/pi/media/sound/dragon.wav", NULL);  

       }


       delay(10000); // ms. 10초간 불을 켜둔다.

    }

  }

  return 0 ;

}


mplayer 설치법은 여기 를 참고하길 바란다.


테스트 사운드는 아이가 가지고 노는 요괴워치 중 하나를 녹음 한거라 음질이 엄청 나쁘니 양해 바란다. ^^a





이상. 다음은 인터넷 라디오 프로토타입으로 하단의 "인터넷 라디오" 카테고리에 업데이트 됩니다. ^^

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

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

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