라즈베리파이 프로젝트 실전#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 - 스펙 리뷰
  




 

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

Posted by ironmask84
2017. 10. 24. 20:38 나는 프로그래머다!/Sensor



라즈베리파이로 (Raspberry PI) 프로젝트를 진행하고 있습니다만,

많이 더딥니다. ㅎㅎ

현재까지 Putty로 SSH 접속까지 진행했는데요. ( http://ironmask.net/389 )

조만간 WIFI 접속과 LED 컨트롤까지 진행을 할 예정입니다. ㅎㅎ

구입을 한 후에 제품 구성에 대해 한 번 리뷰하려고 합니다.

심플하지만, 구성이 깔끔하면서도 세심한 부분도 있어요 ^^

구입부는 아래 주소를 참조해 주세요 ^^

http://ironmask.net/387 )


기본 구성품

저는 가징 기본 세트인, 

라즈베리파이 3세대 + 정식케이스 + 방열판 세트 으로 구입했습니다.

아래 사진 나갑니다~ : )


 케이스는 위처럼 5가지 부품으로 나눠져 있어요! (색상은 레드, 블랙있는데 저는 레드로!!) 


 40개의 gpio핀과, BCM28xx CPU, SMSC 칩(이더넷 모듈) 등이 보이죠?? 


 뭐가 달라보이나요??  2개의 칩 위에 방열판을 붙였습니다. ㅋㅋ 


 바닥부분인데, 미끄럼방지용 스티커가 인상적입니다. ^^ 


 13인치 노트북 그램과 라즈베리파이 비교 
 물론 크기차이 만큼 성능차이, 가격차이도 큽니다. ㅋㅋ


 

 라즈베리파이 프로젝트

라즈베리파이 프로젝트 실전#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 - 스펙 리뷰
  




 

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

Posted by ironmask84
2017. 10. 2. 20:38 나는 프로그래머다!/Sensor



라즈베리파이로 (Raspberry PI) 프로젝트를 스터디겸 진행보려고 

마음 먹은지가 어언 2달이 되었네요 ㅋㅋㅋ..

리뷰를 한 번 하고는 ( http://ironmask.net/349 )

미루고 미루다 조금 오래 걸렸습니다..

번 추석연휴 전에 구입 및 배송을 받기까지 해놓고,

연휴 때 기본 환경 세팅을 해보려는 심산입니다. ^^

가능하면, 이번 추석 연휴 동안

기본 환경세팅 편을 올려보겠습니다!!

구입 방법

구입처는 디바이스 마트 라는 곳을 추천 드립니다.

인지도도 있고, 여러 전자장치 부품들을 취급하네요.

http://www.devicemart.co.kr/

저는 가징 기본 세트인,
라즈베리파이 3세대 + 정식케이스 + 방열판 세트 으로 구입했습니다.
보드가격기 35달러라는데, 세트이고, 부가세 포함이라 52000원 정도 하네요.

저는 남는 SD카드가 있고, 마이크로5핀 어댑터(스마트폰 용)도 있거든요 ㅎㅎ

추가로 gpio핀 확장케이블과 브레드보드 세트를 구입했습니다.
가격은 6500원 입니다.

led, 저항 등을 이용해 기본 동작 테스트에 쓰면 좋을 것 같습니다.


라즈베리파이 실물


 라즈베리파이 3세대 + 정식케이스 + 방열판 세트 http://www.devicemart.co.kr/1311415


 gpio핀 확장케이블과 브레드보드 세트 ( http://www.devicemart.co.kr/1330569 



 LED, 저항, 버튼 (지인 통해서 얻었습니다.. 득템~~ ㅋㅋ) 


 

 라즈베리파이 프로젝트

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

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

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




 

임베디드 리눅스 시스템 스터디

Posted by ironmask84
2017. 9. 26. 23:46 나는 프로그래머다!/Linux



HW를 동작시키는 SW 중에는


OS가 없는 펌웨어를 제외하고,


OS를 탑재시키는 경우에 리눅스를 많이 사용합니다.


C언어 기반이어서 HW 호환성(chip set)이 좋을 뿐아니라, 

오픈소스이기 때문에 로열티없이 사용도 가능하기 때문이죠 :)


하지만, 상용 OS가 아니기에 서비스 지원이 따로 없으므로...

개발자들에게 높은 수준의 개발능력을 요구합니다..

안좋게 말하면, 개발자들이 죽쑤게 된다는 것이죠 ㅜㅜ



저 또한 약 1년 전부터 실무에서 BSP 레벨 개발 업무를 맡게 될 것을 대비하여

리눅스에 대해서 공부를 하려고 했습니다.

http://ironmask.net/297 )


하지만, 개인적 사정으로 8개월 정도 텀이 생기게 되었고...

현재는 라즈베리파이로 개인 스터디를 해보려 하고 있습니다.. ㅋㅋ

http://ironmask.net/349 )


5년 전쯤에 Android Porting & Structure 이란 교육을 받은 적이 있습니다.

회사에서 Android 업무를 늦게나마 (2012년에 받았지만, 안드로이드는 2009년부터 이미 시작되어 왔기에..)

부랴부랴 받았을 때, 리눅스에 대해 잠깐 배운 기억이 있습니다.

Android 도 리눅스 커널을 OS를 사용하기 때문이죠 :)

이 때 교육은 5일짜리 였습니다.


5년 후인 이번주에 임베디드 리눅스 시스템이란 교육을 받고 있는데요.

이 교육도 5일짜리 입니다.

5일로는 방대한 내용의 교육입니다만, 

교육 받는 것도 감지덕지 하면서 최대한 배우려 애를 써봅니다. ㅋㅋ


짧은 지식이지만, 앞으로 계속 정리해가는 차원에서

글 몇개 씨리즈로 올려보겠습니다. ^^


임베디드 시스템 개념 정리 : http://ironmask.net/384