라즈베리파이 프로젝트 실전#1 - LED 컨트롤

Posted by ironmask84
2017. 11. 21. 21:33 나는 프로그래머다!/Sensor



드디어 기본 준비 포스팅은 끝내버리고, 프로젝트 실전 입니다. ㅋㅋ

우선은 제일 간단한 LED 컨트롤 입니다만, 선뜻 나서질 못했네요 ㅎㅎ

사실 디바이스 드라이버에 대해 공부를 하는 중이라, 막상 실전에 들어가기가 쉽지 않았어요.

디바이스 드라이버를 만들기 위해 커널 컴파일 부터 손대어 볼까 했는데, 

역시나 라즈비안OS에는 GPIO 컨트롤을 위한 디바이스 드라이버가 있었습니다.

LED가 아닌 복잡한 장치는 제조사에서 제공해 줄 것 같긴 하고...

GPIO가 아닌 I2C나 SPI에 대한 드라이버도 이미 설치되어 있지 않을까 생각해봅니다.  : )


우선은 C언어 코드로 진행하였고,

차후에는 python으로 갈아타야 할 듯 합니다.
(라즈베리파이 재단에서 기본 제공하는 python 라이브러리가 많다고 들었네요... )


LED 컨트롤 프로젝트를 위해서는 준비물이 몇 개 필요합니다. 

1. LED (당연하겠죠? ㅎㅎ)

2. 저항이 필요합니다. (5V이면, 500옴 정도면 적당하겠습니다.)
(라즈베리파이 스펙에는 전압 5V를 추천하는데, 소모전류를 봤을 땐 3V정도에도 문제 없을 듯 합니다.)

3. GPIO 핀 점퍼케이블 이나 확장 케이블세트
라즈베리파이에는 핀이 40개 있죠. 핀 하나 하나 연결할 수 있는 점퍼케이블도 좋고,
저는 40핀 짜리를 한번에 꽂아서 뺄 수있는 확장 케이블세트를 구입했습니다.
확장 세트에 각 pin 정보도 프린팅 되어있어 더욱 편리합니다.

4. 브레드보드
전자공학도라면, 이것 하나쯤은 가지고 계실 것 같습니다.
저와 같은 컴퓨터공학도라면, 하나 장만하시면 됩니다. ^^


LED와 저항은 지인을 통해 얻었지만,
케이블과 브레드보드 구입기는 아래 링크를 참고해주세요. : )
http://ironmask.net/387


아래에 그림들이 잘 안보이시면, 클릭해주세요! 큰 화면으로 보입니다. ^^


저항 띠색 읽는 방법

브레드보드에 부품을 세팅할 때는 전압, 저항, 전류를 고려해야 합니다.

사실 별 것 아닙니다만, 저항을 잘못 세팅하면, 많은 전류가 흘러 연결한 장치가 망가질 수 있습니다.

어릴 적 과학시간에 배웠던 V = I * R 을 생각해 봅시다 ㅋㅋㅋ

그리고, 저항을 얻어서 사용하다 보니 몇 옴짜리 인지 몰랐는데,

저항에 표시된 띠색깔로 값을 알 수가 있는 거였습니다.  :)

아래를 잘 참고하셔서 500옴 정도 되는 것을 고르세요 ㅎㅎ


 이 표에 따라 아래와 같이 읽으시면 됩니다. 


저항은 색띠의 개수가 4개인것도있고 5개인것도 있고 또 3개인것도 있습니다.

4색띠 읽는 방법은 위와 같습니다.

제 1색과 2색은 수로 십의 자리와 일의자리로 본 뒤에 승수를 곱하면 됩니다 그리고 오차범위를 구하시면 됩니다.

 

주황색(수) 주황색(수) 빨간색(승수) 금색(오차범위) 순서라면

3       3     *    100 =  3300Ω 이 되는 것입니다.

그리고 금색의 오차범위는 ±5%이므로

3300Ω,오차±5% 이렇게 읽을수가 있는것입니다

또 1000Ω =1kΩ이므로 3300Ω은 3.3kΩ으로 나타낼수가 있습니다.

​*여기서 오차범위란 저항이 항상 똑같은 값 만큼만 저항을 주는게 아니라서

약간의 오차가 있을수 있는데 그것의 범위를 나타내는 것입니다.

3300옴의 오차범위 5%는 165옴이므로

 3135옴 ~ 3465옴까지의 저항값이 오차가 있을수 있다는 것을 의미합니다.


이 또한 4색 저항 읽는 법과 비슷한데요 '제 3색(수)'가 추가되었을 뿐 4색 저항과 방법은 같습니다.

제 1색과 2색과 3색을 각자 백의 자리 십의 자리 일의 자리로 본 뒤에 승수를 곱해주시면 됩니다.

노란색(수) 보라색(수) 검정색(수) 검정색(승수) 갈색(오차범위) 순서라면

4       7        0     *    1 =  470Ω 이 되는 것입니다.

그리고 갈색의 오차범위는 ±1%이므로

470Ω,오차±1% 이렇게 읽을수가 있는것입니다

또 1000Ω =1kΩ이므로 470Ω은 0.47kΩ으로 나타낼수가 있습니다.

​*여기서 오차범위란 저항이 항상 똑같은 값 만큼만 저항을 주는게 아니라서

약간의 오차가 있을수 있는데 그것의 범위를 나타내는 것입니다.

470옴의 오차범위 1%는 4.7옴이므로

 465.3옴 ~ 474.7옴까지의 저항값이 오차가 있을수 있다는 것을 의미합니다.

출처 : 
http://blog.naver.com/ygs1090/220085805951


LED 컨트롤 C언어 소스코드

원래 디바이스 드라이버 부터 손대보려고 했기에, 

C언어로 접근을 먼저 해보려 합니다.

기존 제공하는 GPIO컨트롤 디바이스 드라이버를 사용하는 리눅스 응용프로그램을 만들면 되는데요.

리눅스 응용프로그램이란, C언어로 구현한 소스코드를 리눅스환경 버젼의 gcc 컴파일러로 컴파일해서 나온 결과물 입니다.

그리고, 라즈베리파이는 ARM 제조사의 코어를 사용하므로, 이에 맞는 버젼의 gcc 컴파일러가 필요한데,
이미 라즈비안OS에는 설치되어 있는 것 같군요. ^^

각설하고, 코드는 아래와 같습니다. ^^

#include <stdio.h>

#include <fcntl.h>

#include <string.h>

 

int led(int gpio)

{

    int fd;

    char buf[BUFSIZ];

 

    fd = open("/sys/class/gpio/export",O_WRONLY);  /* Export */

    sprintf(buf, "%d", gpio);

    write(fd, buf, strlen(buf));

    close(fd);

 

    sprintf(buf, "/sys/class/gpio/gpio%d/direction", gpio);  /* Direction */

    fd = open(buf, O_WRONLY);

    write(fd, "out", 4); /* input: write(fd, "in", 3) */

    close(fd);

 

    sprintf(buf, "/sys/class/gpio/gpio%d/value", gpio);  /* Output value */

    fd = open(buf, O_WRONLY);

    write(fd, "1", 2);

    close(fd);

 

    getchar();  /* Wait for key input */

 

    fd = open("/sys/class/gpio/unexport", O_WRONLY);  /* Unexport */

    sprintf(buf, "%d", gpio);

    write(fd, buf, strlen(buf));

    close(fd);

 

    return 0;

}

 

 

int main(int argc, char** argv)

{

    int gno;

    if(argc < 2)

    {

        printf("Usage : %s GPIO_NO\n", argv[0]);

        return -1;

    }

 

    gno = atoi(argv[1]);

    led(gno);

 

    return 0;

}



디바이스파일에 값을 출력해서 라즈베리파이의 GPIO를 제어할 수도 있습니다. 이 글에 나온 명령어와 코드는 "사물인터넷을 위한 리눅스 프로그래밍 with 라즈베리파이" 책의 108쪽부터 나온다고 합니다.


출처 : http://blog.naver.com/specialist0/221106973238


gcc 컴파일 후 나온 결과물 파일을 실행시킬 때, 

인자로 GPIO 핀 넘버를 붙여주시면 됩니다. ^^

ex) pi@raspberrypi :~ $ LED_Test 12  (12번 핀 일때)

LED 컨트롤 연결구조 및 시연


 확장케이블 세트와 브레드보드 입니다. 
 브레드보드 크기가 조금 아쉽네요.. 


 확장케이블과 브레드보드 그리고 저항과 LED 까지 연결한 모습!! 


 제대로 진행되었다면, 요로케 LED에 불이 들어옵니다. ^^ 


 LED 발 2개가 GPIO 핀과 GND에 담궈야 함을 잊지 마세요!! 


 

 라즈베리파이 프로젝트

라즈베리파이 프로젝트 실전#1 - LED 컨트롤
라즈베리파이 프로젝트 준비#4 - WIFI 설정
라즈베리파이 프로젝트 준비#3 - OS 설치 및 Putty SSH 접속
라즈베리파이 프로젝트 준비#2-1 - 구성품 리뷰

라즈베리파이 프로젝트 준비#2 - 구입 리뷰

라즈베리 파이 프로젝트 준비#1 - 스펙 리뷰
  




 

라즈베리파이 프로젝트 준비#3 - OS 설치 및 Putty SSH 접속

Posted by ironmask84
2017. 10. 4. 17:12 나는 프로그래머다!/Sensor


이제 라즈베리파이 구입해서 배송까지 받았으니,

http://ironmask.net/387 )

라즈베리파이를 작동시키고, 

프로젝트 진행을 위한 환경 세팅을 해보겠습니다.

라즈베리파이를 구동시키는 OS로 Raspbian 이라는 리눅스 기반 OS가 이미 제공되고 있습니다.

이 OS는 Debian이라는 PC용 리눅스 OS를 기반으로 만들어졌다고 합니다.

사실 라즈베리파이 3세대는 손바닥만한 펜티엄 PC라고 해도 될 정도의 성능을 갖췄습니다.

http://ironmask.net/349 )

CPU가 쿼드코어의 1.2Ghz 이며, RAM이 1GB에 블루투스, WIFI, 이더넷, USB 2.0 , HDMI 를 갖췄습니다.

최신 스마트폰의 성능에는 못미치지만, 쿼드코어 PC가 유행하기 시작한지가 8년전 쯤이었으니,

35달러에 이정도 성능이면 어마어마한 전자 하드웨어 보급의 결과입니다. ㅎㅎ

아무튼 Raspbian 이라는 OS를 다운받고,

설치는 라즈베리파이에 따로 저장장치가 없으므로,
micro SD 카드(16GB 적당)를 따로 구해서 설치를 하여야 합니다.

자, 그럼 본격적으로 설치를 해볼까요!! 


OS 설치 방법

우선, 1. Raspbian OS 이미지를 다운 받습니다.

https://www.raspberrypi.org/downloads/raspbian/


그리고 2. 다운받은 이미지 파일을 micro SD카드에 설치해주는 win32diskimager 라는 프로그램을 다운받습니다.

https://sourceforge.net/projects/win32diskimager/



3. Win32 Disk Imager를 설치하고, micro SD카드를 리더기를 통해 PC에 연결합니다.

4. Win32 Disk Imager를 실행해서, 이미지파일을 Write 해줍니다. (대략 7~8분 소요)


 대략 이런 모습으로 Write 되어갑니다 ㅎㅎ
 요즘 노트북엔 SD카드 슬롯이 대부분 내장되어 있죠! ㅎ 


위까지 과정을 거치면, 윈도우에서는 그냥 boot라는 저장장치로 잡히고, 용량도 60메가 정도만 보입니다.

하지만, 이는 OS간 파일시스템이 달라서 윈도우에서 안보이는 것 뿐이고,

라즈베리파이에서는 정상적으로 용량이 잡히니 걱정안하셔도 됩니다. ^^

그럼, 이제 제대로 OS가 설치 되었는지 확인을 해봐야 할텐데요 ㅋㅋ


노트북을 이용해서 Putty로 라즈베리파이에 SSH 접속하기

라즈베리파이는 이더넷 통신이 가능한 랜포트가 있으므로, 

PC와 이더넷 통신이 가능합니다.

데스크탑의 경우 보통 랜카드는 1개인데, 무선랜카드가 없으므로,

인터넷을 이용하려면 라즈베리파이는 공유기로 이더넷을 연결하는 것이 좋습니다.

이 때는 공유기가 알아서 라즈베리파이에 ip주소를 할당해주고, 

데스크탑에서 공유기 관리자로 접근해서 라즈베리파이의 ip를 확인할 수 있으므로 별 문제가 안됩니다만, 

노트북을 이용해서 외부로 나가서 라즈베리파이에 접근하려면 공유기를 사용하지 않기 때문에

라즈베리파이의 ip를 확인할 수 없으므로 라즈베리파이의 IP를 알아야 가능한데요.

그래서 라즈베리파이의 IP를 고정 IP로 변경을 해야 합니다.


1. 라즈베라파이 고정 IP 설정

OS 설치 과정을 거치면, micro SD카드가 boot라는 저장장치로 잡힙니다.

탐색기에서 들어가보면, cmdline.txt 라는 파일을 볼 수가 있는데,

이를 워드패드나 다른 편집기 tool로 열어줍니다. (메모장은 비추천)

마지막으로 가서 한 칸 띄고 ip = 192.168.137.100 으로 쓰고 저장합니다.

마지막 세자리는 꼭 100이 아니어도 되지만, 기본 사용 ip와 충돌날 수도 있으니, 

100으로 하시면, 안전합니다.


2. 노트북 고정 IP 설정

자, 이제 라즈베리파이의 ip주소를 고정으로 해뒀으니,

노트북의 ip도 고정으로 해줘야 접속이 됩니다. 

(이유는 이더넷 프로토콜에 관련한 것으로, 자세한 건 생략합니다.  )

노트북 ip 고정 방법은 윈도우7 기준으로

제어판 -> 네트워크 및 인터넷 -> 네트워크 및 공유센터 -> 어댑터설정 변경 -> 해당 로컬 영역 선택 -> 속성 -> IPv4 로 

들어가서 다음 IP 주소 사용으로 바꾼뒤, 192.168.137.101 로 설정해 줍시다!


3. SSH Server 활성화

그리고 2016년 11월 부터는 한 가지 추가로 설정을 해줘야 할 것이 있습니다.

Putty로 접속 시, 자꾸 connection refused 가 나서 검색을 열심히 해서 알아보니..

라즈비안(Raspbian)에서 2016년 11월 release판 부터 SSH Server가 Default로 비활성화 되어 있다고 하네요 ㅡ_ㅡ

역시 최신 버젼에는 항상 뭔가 기존 정보로는 문제가 발생하기 쉽상입니다.. ㅜㅜ

뭐 물론 보안상 비활성화가 Default인 것이 맞긴 합니다만, 첨에 좀 답답했습니다.. ㅋㅋ

하지만, 간단하게 SSH Server를 활성화 시키는 방법이 있습니다!!

HDMI나 Serial to USB 케이블을 통해 따로 접속하지 않아도 활성화 시킬 수 있습니다!!

OS 설치 과정을 거쳐서, micro SD카드가 boot라는 저장장치로 잡히는 공간에 ssh 라는 이름의 파일만 만들어 주면 됩니다.

파일 안에 내용은 아무 상관 없습니다. 그냥 편집프로그램 열어서 ssh 라는 이름으로 확장자를 꼭 없도록 해서 만들면 됩니다.


4. Putty로 SSH 접속~ ㅎㅎ

자, 이제 micro SD카드를 라즈베리파이에 장착시키고, 전원을 줍시다.

그리고 랜선으로 PC와 라즈베리파이를 연결하고, putty 프로그램을 실행시켜봅시다.

putty  프로그램은 무료 다운 가능합니다.

http://software.naver.com/software/summary.nhn?softwareId=MFS_116451  )

아래 그림과 같이 접속이 잘 되는 것을 볼 수 있습니다. ^^

Raspbian OS 기본  ID는 pi 이고,  password raspberry 입니다.


 캡쳐엔 192.168.0.100 인데 192.168.137.100 으로 하면 됩니다. 


 처음 라즈베리파이에 putty로 접속 시, 뜨는 화면인데 그냥 예 해주면 됩니다. ^^ 



드디어, 대망의 Putty로 SSH 접속 입니다!! :) 


PC와 공유기를 이용해서 Putty로 라즈베리파이에 SSH 접속하기

데스크탑이든 노트북이든 공유기가 있으면 이더넷 통신이 가능합니다. ^^

주의할 점은 공유기 뒤에 보통 1개의 WAN포트와 여러개의 LAN 포트가 있는데,

그 중에 WAN은 건물에 들어오는 인터넷선을 연결하는 용도이니 놔두시고,

LAN 포트에 꽂아주시면 됩니다.

라즈베리파이에 전원선을 꽂고, 이더넷선으로 공유기와 연결을 합니다. ㅎㅎ

제가 연결한 사진은 아래와 같습니다. iptime 유무선 공유기에요 : )


그리고 나서 웹브라우져에서 192.168.0.1 로 접속하시면 아래와 같이 iptime 공유기 관리화면이 출력됩니다.



 관리도구 메뉴를 선택해 줍시다. ^^ 


 관리도구 메뉴를 선택해 줍시다. ^^ 

자, ip가 확인이 되었으니, Putty 접속은 위에 나와있는 노트북과의 접속과 같은 방법으로

ip만 변경시킨 후에 접속하시면 됩니다. ^^


 

 라즈베리파이 프로젝트

라즈베리파이 프로젝트 실전#1 - LED 컨트롤
라즈베리파이 프로젝트 준비#4 - WIFI 설정
라즈베리파이 프로젝트 준비#3 - OS 설치 및 Putty SSH 접속
라즈베리파이 프로젝트 준비#2-1 - 구성품 리뷰

라즈베리파이 프로젝트 준비#2 - 구입 리뷰

라즈베리 파이 프로젝트 준비#1 - 스펙 리뷰
  




 

라즈베리 파이 프로젝트 준비#1 - 스펙 리뷰

Posted by ironmask84
2017. 8. 3. 14:46 나는 프로그래머다!/Sensor



센서 연구개발에 뛰어들게 되어, 기본 도메인 지식이 부족한 저는 라즈베리 파이를 이용해서

기본 도메인 지식도 쌓고 재밌는 프로젝을 진행해보려고 합니다.

의욕이 앞선탓에.. 아직 주제도 선정하지는 않았지만.. 

우선은 프로젝에 적절한 보드와 자재 구입 그리고 개발 환경 구축을 먼저 해보죠!


이에 앞서 간단하게 라즈베리 파이 스펙과 '아두이노' 와의 차이 대해 조금 살펴봤습니다.

살짝 검색해본 결과 이미 3~4년 전부터 유행하기 시작한 것으로 보이네요. ㅎㅎ


그.래.서 인지 이미 아래와 같이 여러 몇가지 모델이 있고, 최신이 3세대 입니다.


(그림 출처 : http://blog.naver.com/kiyeonah/220761250972)



다음으로는 '아두이노' 와의 차이점 입니다.

아두이노는 입출력 단자들이 별로 없는 반면, 라즈베리파이는 입출력 단자들이 많습니다.

아두이노는 입출력 단자가 암,숫놈이 다 보이는데, 라즈베리 파이는 숫놈만 40개네요!

 


 

 


아래는 아두이노는 일반적으로 쓰이는 ATMega328을 쓰고있는 아두이노 우노입니다.

전압 : 5V, 램 : 2k, 플래시메모리 : 32k, 타이머와 Serial, I2C, SPI 등

  


 

 

아두이노는 HW 제어프로그램으로 유일한 Sketch라는 프로그램을 제공해서
인터프리터도 필요없고, 운영체제도, 펌웨어도 필요 없습니다. 

 


 



아래는 라즈베리 파이입니다. 

보드의 소형처리장치(Microprocessor)는 음향, 영상, USB, 이더넷 및 HDMI까지 지원합니다.
통상적인 입출력(GPIO, General Purpose Input/Output) 장치가 있습니다.

리눅스와 같은 운영체제를 설치해서 HW제어가 가능합니다.


 

아두이노는 소형 제어장치(MicroController)라고 하며, 라즈베리파이는 소형 처리장치(MicroProcessor)라고 함

두개 다 명령을 수행하는 중앙처리장치(CPU)가 있고, 타이머(Timer)와, 기억장치(Memory), 입출력 핀(I/O Pin)들이 들어있습니다.

하지만, 가장 큰 차이점이 있는 부분은 입출력 핀입니다.

소형제어장치는 입출력에 강점이 있어서, 외부의 기기를 직접적으로 제어합니다.

하지만, 소형처리장치는 입출력 부분이 약한 경향이 있습니다. 그래서, 트랜지스터가 외부의 기기를 다룹니다. 


위에 설명한 차이점은 여러 블로그에서 동일하게 언급하는 내용인데, 

특히, 연두색 박스로 친 부분에 보면,

소형 제어장치가 입출력에 강점이 있고, 소형처리장치는 입출력에 약하다는게 무슨 뜻인지 정확히 모르겠네요..

추측으로는 단순히, 아두이노는 sketch라는 플랫폼형 프로그램을 이용해서 쉽게 제어프로그램을 만들 수 있다라는
정도의 얘기로만 생각되네요.. (아직 지식이 짧아서.. ^^;)


사실 '아두이노' 도 사용해본적은 없습니다만 검색을 통해 여러 사람들의 후기를 리뷰해보면,

간단하게 IoT, 임베디드 맛만 보고자 하면 아두이노를 쓰지 않을까 조심스럽게 생각해봅니다.

왜냐면 아무래도 Sketch라는 프로그램으로만 제어를 하게되니, 이런저런 제한도 많을 것으로 생각되고,

대중화되어 여러 오픈소스 환경이 구축이 되지 않을 것 같이 생각이 됩니다.


라즈베리 파이의 경우는 OS를 설치하고, 좀 더 여러가지 다양한 SW 라이브러리를 사용 가능하므로

다양한 프로젝트를 구성하기에 적합하지 않을까 합니다.


물론 위의 생각은 어디까지나 저의 생각입니다.

틀린 내용이 있다면 언제나 태클 댓글 환영입니다. ^^

앞으로 프로젝트를 계속 잘 진행해 나가면서,

일부 잘못된 내용들은 수정하고 필요한 내용은 추가해 나가겠습니다. :)


참조 : http://nickoo.tistory.com/93


 

 라즈베리파이 프로젝트

라즈베리파이 프로젝트 실전#1 - LED 컨트롤
라즈베리파이 프로젝트 준비#4 - WIFI 설정
라즈베리파이 프로젝트 준비#3 - OS 설치 및 Putty SSH 접속
라즈베리파이 프로젝트 준비#2-1 - 구성품 리뷰

라즈베리파이 프로젝트 준비#2 - 구입 리뷰

라즈베리 파이 프로젝트 준비#1 - 스펙 리뷰