이전에서는 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

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

기본 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

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


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


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


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


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


을 만들려고 구매를 결정.


어제 손이 들어왔다. 


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


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


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

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

+ Recent posts