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.03.20 11:00

(* 퇴고없이 바로 올리는 글입니다. 나중에 데모 진행하면서 스샷과 같이 올리며, 퇴고할 예정입니다.)


신규 에셋빌드 시스템에서 할 수 있는 것을 보여주는 에셋번들5.0 데모


Unity 5.0 beta21 이상의 버전에서 이 데모를 실행해 주세요.


상세설명:

1. TestScenes 폴더 아래에는 3개의 씬이 있다.

1. AssetLoader.unity 에셋 번들로부터 일반적인 에셋을 로딩하는 방법을 볼 수 있습니다. LoadAssets.cs 스크립트를 참고하세요. 

2. SceneLoader.unity는 에셋번들로부터 씬을 로딩하는 방법을 볼 수 있습니다. LoadScenes.cs 스크립트를 참고하세요.

3. VariantLoader.unity는 variant 에셋번들을 로드하는 방법을 볼 수 있습니다. LoadVariants.cs 스크립트를 참고하세요.

가상 에셋들로부터 같은 결과를 얻을 수 있는 AssetBundle variants를 사용합니다. 이 데모에서, 빌드를 합니다.

1. "variant/myassets.hd" AssetBundle 안에 "My Assets HD" 폴더

2. "variant/myassets.sd" AssetBundle 안에 "My Assets SD" 폴더

3. variant AssetBundle에 실제로 종속된 "variants/variant-scene.unity3d" AssetBundle 안에 "variant-scene.unity"

이 폴더들이 정확히 일치하도록 에셋을 만들어야 합니다. 

두개의 다른 AssetBundle안의 그 오브젝트들은  유니티 빌드 pipeline에 의해 인증된 같은 내부 ID들을 가지게 될 겁니다. 그래서 다른 variant 확장명들의 AssetBundles와 임의로 변경이 가능합니다.

이 demo에서는 ㅜㅇ리가 variants라고 부르는 hd와 sd라는 파일 확장명을 사용합니다. 당신은 LoadVariants.cs에서 variant를 변경할 수 있습니다. 

또한 활성화된 variant로 문제없이 AssetBundle을 어떻게 풀어보는지를 보려면 AssetBundleManager.RemapVariantName()를 참고하세요. 

주의 : AssetBundle variant는 Editor simulation에서 정상적으로 확인이 불가능합니다. 



2. 자동으로 종속된 AssetBundles을 다운로드합니다.

새로운 빌드 시스템하에서는, 단일 manifest AssetBundle안에서 종속관계가 있는 AssetBundles간에는 연결이 되어 있습니다. 그래서 실행 시, 모든 종속관계를 알 수 있으며, 기반 url을 통해 자동으로 종속된 AssetBundles를 다운받습니다.

더 상세한 내용은 demo의 AssetBundleManager.LoadDependencies()를 확인해 보세요.


3. AssetBundles 메뉴에는 3개의 메뉴 아이템이 있습니다. 

1. "Simulate AssetBundles"는 에디터에서 AssetBundle simulation을 컨트롤 하는데 사용합니다.

데이터 플레이 모드에서, 빌드없이, AssetBundles을 simulate 할 수 있습니다.

2. "Build AssetBundles"는 BuildPipeline.BuildAssetBundles()를 호출하면 되는데, AssetBundle UI를 설정해서 AssetBundles를 빌드합니다. 상세한 내용은 BuildScript.BuildAssetBundles()를 참고하세요.

3. "Build Player"는 지정한 폴더에 빌드된 AssetBundles를 "Application.streamingAssetsPath"에 복사합니다. BuildScript.BuildPlayer()를 참고하세요.


4. AssetBundleManager 클래스는 AssetBundle과 그에 종속된 것들을 로딩된 내용들을 가지고 있습니다. 이런 내용들이 포함되어 있습니다.

1. Initialize()

AssetBundle manifest object를 초기화 합니다.

2. LoadAssetAsync()

명시된 AssetBundle로부터 명시된 asset과 종속 관계의 모든 핸들을  로드합니다.

3. LoadLevelAsync()

명시된 AssetBundle로부터 명시된 scene와 종속 관계의 모든 핸들을 로드합니다. 

4. LoadDependencies()

명시된 AssetBundle을 위해 종속관계의 모든 AssetBundles을 로드합니다.

5. BaseDownloadingURL

의존 관계에 있는 것들의 자동 다운로딩을 위해 사용되는 base downloading url을 설정합니다.

6. SimulateAssetBundleInEditor

에디터 플레이 모드에서 사용될 AssetBundle을 설정합니다.

7. Variants

활성화할 variant를 설정합니다.

8. RemapVariantName()

활성화된 variant에 따라 올바른 AssetBundle을 풀어냅니다.(?)


5. Assets\ScriptsForAssetBundleSystem folder 아래의 스크립트들은 당신의 프로젝트에 쓸만할 겁니다. 당신의 프로젝트에 자유롭게 사용하시기 바랍니다.


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


티스토리 툴바