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




 

라즈베리파이 프로젝트 준비#4 - WIFI 설정

Posted by ironmask84
2017. 11. 8. 12:36 나는 프로그래머다!/Sensor


일단 프로젝트 기본 준비 과정은 이번 포스팅까지만 진행하고, 

추후에 필요한 부분에 따라 추가하도록 하겠습니다. (VNC Server 등)

프로젝트 진행이 너무 더딘 것 같아서 안되겠네요 ㅋㅋ

WIFI 설정까지 되면, 보드에 묶이는 선 하나가 줄어서 파워선만 연결하면 되니

조금은 보드 위치 조정에 자유로움이 있습니다.  :)

물론 WIFI를 제공할 무선공유기 혹은 스마트폰의 핫스팟 기능과 같이 AP가 있어야 해요!

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


무선공유기를 이용한 라즈베리파이 WIFI 설정

유무선공유기를 사용하시면, 브라우져에서 192.168.0.1로 접속시 관리자 화면이 나옵니다.


 관리도구를 클릭해 줍시다!! 


그리고 나서 무선 설정/보안 메뉴로 이동해서,

SSID와 비밀번호를 확인해 둡시다!!


 인증방법은 꼭 WPAPSK로 안해도 됩니다만, 포스팅에서는 저걸 기준으로 합니다. 
 SSID와 비밀번호는 원하는 걸로 해주시면 됩니다. ^^ 


자, 이제 라즈베리파이를 유선을 통해 Putty로 접속합니다.

앞서 포스팅에서 유선 접속은 되었을 것이라고 보고 진행합니다. ㅎㅎ

아래와 같이 "wpa passphrase SSIDname password" 를 입력하고, 엔터키를 눌러보세요.


출력된 내용은 복사해 두고, 

"sudo nano /etc/wpa_supplicant/wpa_supplicant.conf" 명령어를 입력해서 nano편집기로 이동 후,

복사한 내용을 붙여넣습니다.


 편집 후에는 Ctrl + X 를 누른 후, Y를 눌러 저장하고 나가면 됩니다. 

자 이제 이것으로 WIFI 설정이 끝났습니다.

꽤 간단하죠?? ㅎㅎ

이제 "sudo reboot" 명령을 통해 리부팅 시킵시다.

설정이 잘되었으면, 유무선공유기 관리자 화면에서 아래와 같이 유선1개, 무선 1개 2개가 잡힙니다.



WIFI를 통해 Putty로 라즈베리파이에 SSH 접속하기

설정은 끝났으니, 이제 Putty로 라즈베리파이에 WIFI 접속을 해봅시다!


 위에서 유무선공유기 관리화면에서 확인된 IP를 입력해줍시다. 



 유선이든 무선이든 첫 접속에는 이런 key관련 창이 뜨는데, 예! 를 눌러주면 되죠 ㅋ 


자, 이제 랜선을 뽑고!! 

유선에서 벗어나서, WIFI 접속만 해봅시다!

위에 빨강박스를 보시면, WIFI인 wlan0만 잘 접속이 되어 있음을 확인할 수 있습니다. ^^

잘 진행 되시나요??

혹여나 질문 있으시면 댓글로 주시고,

다음 포스팅을 기대해 주세요 ^^


 

 라즈베리파이 프로젝트

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




 

네트워크#1 - TCP, UDP, MTU

Posted by ironmask84
2017. 10. 18. 16:31 나는 프로그래머다!/Sensor



라즈베리파이와 같은 네트워크 기능이 있는 디바이스를 가지고 개발을 하다보면,

네트워크 성능 측정 및 기능체크를 위해 'iperf' 라는 툴로 패킷을 주고받는 측정을 합니다.

이 iperf라는 툴을 사용 시에, 여러가지 옵션을 설정할 수 있는데,

그 중에 TCP, UDP와 같이 프로토콜 선택은 물론,

패킷 사이즈 및 갯수 등과 MSS(MTU 에서 특정 header를 뺀 것)을 설정할 수 있습니다.

예전에 네트워크 관련 스터디를 통해 들어본 바 있는 용어이지만,

다시금 뇌에서 되살려 보는 차원에서 기록 및 공유 합니다. 


TCP와 UDP

TCP 패킷 구조도


Sport =
송신자 포트

Dport= 수신자 포트

Sequence Number= TCP전송되는 데이터의 일련 넘버

Acknowledgment number= 응답 데이터 일련 넘버 + 전송된 데이터 합

Header Lengths = TCP Header 길이

Reserved = 예약된 번호 현재 사용되지 않음 항상 0

Control Bit = 패킷을 어떻게 다룰지 흐름등 관리하기 위한 사항

1.     URG = 최우선 순위 긴급한 패킷

2.     ACK = ACK필드 유효시 1

3.     PSH = 우선순위는 좀 떨어지더라도 최대한 빠른 전송 요청

4.     ROT = 현재 세션을 재 시작하려 할 때 사용 Session을 끊을때도 사용함

5.     SYN = Sequence Number를 송신측과 동기화하려 할 때 Session시작 시

6.     FIN = Session을 끊고자 할 때

Windows = 수신측에서 처리할 수 있는 Buffer

Checksum = TCP 오류 검증을 위한 데이터

Urgent Pointer= 급처리 데이터 마지막 바이트

Option = 필요시 생성 그다지

Padding = 32Bit의 배수를 만듬



UDP 패킷 구조도


LLC에서는 ethertype IP가 대입이 되어야 IP Packet이 되는 것이고 IP Header에서는 Type TCP UDP가 대입이 되어야지 TCP Packet UDP Packet이 만들어 집니다. ^^ 헤헤..


보시면 왜 MAC IP TCP순인줄은 금방 아시겠지요. ^^

         L2   L3 L4 입니다.

Layer Switch의 경우 L2Switch L3Switch L4Switch이렇게 나누자나요.


이 기준은 바로 Packet을 어디까지 분석해서 보내는지를 나타내는 거죠 ^^

IP만 보면 L3, Port까지 보고 스위칭하면 L4,


아무래도 앞에 있어야 분석하기 쉽겠죠. ^^ L2~L4까지 만약 L4가 먼저 있음 L2스위치는 포워딩하려면 L2데이터가 어딨는지 찾는데 딜레이타임이 걸릴 테니까.


또한 IP레벨의 스위칭도 여러가지 입니다.


보통은 목적지만 보고 라우팅하는데, 시스코의 CEF나 기타 프로토콜은 소스를 같이 보고 라우팅하죠. 이게 무슨 차이냐고 말씀하시는데 -_-;; 생각해보세요.

힌트는 LoadBanlancing입니다. 부하 분산에 차이죠. 라인이 하나라면 목적지만 보고 보내는 거랑 별 차이 없겠죠. 그러나 라인이 둘이라면 좀 다른 문제겠죠. ^^;;

출처: http://redsejo.tistory.com/4 [기도로 시작하는 하루]


MTU, MSS 란?

//MTU 란? http://qaos.com/article.php?sid=149

PING –f –l <MTU Size(Packet size + 28)> <interface default gateway address>
( 여기서 28은 'IP Header (20 bytes) + ICMP-Header (8 bytes)' )

Ex) ping <IP Address> -f -l <576~1500>로 값을 넣어 1472 로 값이 나왔다면 1472 + 28 = 1500 , 즉 MaxMTU 값은 '1500' 이 됩니다.


//MSS란(Maximum Segment Size)? 데이터 프레임 중 순수한 TCP 데이터 부분의 최대 값으로 분할하지 않고 한번에 보내는 것을 뜻합니다.

"윈도우 사이즈(크기) : TCP 환경에서 송신 호스트와 수신 호스트는 데이터를 수신한 다음, 다음 데이터를 보내 줄 것을 요청(Ack)하고, 요청을 받은 호스트는 다음 데이터를 보냅니다. 이런 과정에서 송신호스트는 Ack을 수신하기 전에 일정량의 데이터를 보낼 수 있는데 이를 윈도우 사이즈라고 합니다.

MSS(Maximum Segment Size) : 현재의 연결에서 TCP가 보낼 수 있는 최대의 데이터 크기를 말합니다. MTU라고 알려진 최대 전송 크기에서 헤더 부분을 뺀 부분이 MSS가 됩니다. Ethernet의 경우 MTU가 1500byte로 결정되어 있으며, 따라서 Ethenet에서 MSS는 1460byte가 됩니다.



" - 인용 ( 초보 서버 관리자를 위한 네트워크 및 보안 기초 포켓북 )

  
MSS = MaxMTU - 40 ( 40 = 'IP Header(20 bytes) + TCP Header (20 bytes + ? bytes)' )
Ex) 1500 - 40 = 1460 ( ? = 12byte , timestamp 옵션 적용시 추가됨 )

'Tcp1323Opts(Timestamp - RFC 1323)' 옵션에 'timestamp'이 활성화될 경우,
'Client ACK: TCP header'는 12byte를 추가한다. 즉, MSS 값은 1448 이 된다.

출처 : http://url.tistory.com/3

 

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




 

IoT 표준화 경쟁 및 동향

Posted by ironmask84
2017. 9. 19. 10:03 나는 프로그래머다!/Sensor


4차 산업혁명의 핵심키워드에는 인공지능, 빅데이터, 로봇, IoT 등이 있습니다.

그 중에 IoT 관련 업무를 회사에서 맡게 되면서 자연스레 관심을 가지게 되었는데요 ㅎㅎ

개인 스터디도 해볼까 하여 라즈베리 파이 프로젝트도 진행 중에 있습니다..
( http://ironmask.net/349 )

매우 더디긴 합니다만 ㅜㅜ

이번에 다룰려는 얘기는 IoT 표준화의 동향과 경쟁입니다.


IoT 표준화 경쟁

몰랐지만, 이미 몇 년전부터 IoT 표준화를 선점하기 위한 그룹들이 생겨났습니다.

그 중에 대표적인 것들이 아래 그룹입니다.

1. 오픈커넥티비티재단(The Open Connectivity Foundation)


   - 2016 2월 창립, 기존의 OIC(Open Interconnect Consortium) 승계
   - 회원수 185개
   - 주요회원사 : 삼성전자, 시스코, 아리스, 인텔, GE디지털, MS, 퀄컴 등
     (창립과 함께 올신라이언스 그룹에 있던  MS와 퀄컴이 합류)

2. 올신얼라이언스(AllSeen Alliance)


 - 2013.12월 창립, 리눅스 재단이 주도
 - 회원수 161개
 - 주요 회원사 : LG전자, MS, 필립스, 퀄컴, 소니, 샤프 등 

3. 스레드그룹(Thread Group)


 - 주요회원사 : 구글, 실리콘랩스, 퀄컴, ARM


IoT 동향

삼성전자는 오픈 커넥티비티 재단 OCF의 멤버로 스마트홈과 IoT 플랫폼 표준화를 진행 중입니다.

알렉사, 구글홈과 같이 다른 업체와 연동한 서비스를 제공하는 등 외부 협업도 강화

아마존 알렉사와 냉장고, 세탁기, 에어컨 로봇청소기 연계

구글홈과는 로봇청소기 연동


SK텔레콤은 '누구', KT '기가지니' 서비스로 삼성 가전을 음성으로 제어하는 서비스들도 나왔습니다.


삼성그룹인 삼성벤처투자는 싸이월드에 50억 투자하는 일이 있었습니다.

-> 싸이월드는 1999년에 시작해서 2003년에 SK커뮤니케이션즈가 인수 - 2014년 사원주주 회사로 독립 

   - 2016년 크라우드 펀딩 실패 - 2016년 에어라이브와 합병 한 회사이며,

   한 때, 우리 나라에서 가장 잘나가던 SNS였으나, 현재는 혁신 실패로 카카오스토리와 인스타그램에 발린 상태

   삼성에서 이를 다시 어떻게 활용해 나갈지는 지켜봐야 알 수 있겠네요. ㅎㅎ


관련 행사

올해 10월 10일 ~ 13일 동안 OCF(Open Connectivity Foundation) 주관으로 행사가 있습니다.

이 기간을 IoT Week Korea 라고 칭하는군요. 

매년 하반기에 개최하는 것 같습니다.

IoT에 대한 동향을 한눈에 볼 수 있는 좋은 기회가 되겠군요!

저도 참석을 고려해봐야 겠습니다. ㅎㅎ



올해는 10월 10일 ~ 10월 13일이  IoT Week Korea (사물인터넷 진흥주간) 이라고 합니다.

자세한 내용은 사이트를 참조해주세요 ㅎㅎ ( http://www.iotweek.kr/ )



 

IoT를 위한 통신 기술 NB-IoT

Posted by ironmask84
2017. 8. 9. 11:38 나는 프로그래머다!/Sensor


IoT를 활성화 시킬 새로운 통신 기술이 만들어지고 모습을 들어내기 시작했습니다.

기존 LTE망을 이용해 대역폭을 낮게 조정해서 최대 전송량은 적은 대신에 저전력이 가능하게 되어

IoT 산업의 핵심인 센서 데이터와 같은 수 많은 HW 모듈의 데이터 수집에 유용할 것으로 보입니다.


SKT에서는 이미 LoRA 라는 IoT용 통신망을 구축하여 서비스 중에 있습니다. 

이에 맞서는 KT와 LG U+가 NB-IoT 서비스를 시작하려는 중입니다. 


LoRA vs NB-IoT

LTE에서 서비스되는 IoT 기술로 아직 상용화 되지 않은NB-IoT는 KT와 LG U+가 협력해 2017년 1분기에 망구축 완료 예정입니다

LoRA와 NB-IoT는 느린 속도와 저렴한 모듈가격 약 10년미만의 배터리 사용시간으로 비슷한 부분이 많이 있습니다

로라의 경우 무선 마이크 주파수를 사용하여 서비스를 제공하여, 간섭 현상이 쉽게 생겨 문제가 생길거라는 예측이 있으며, 해당 주파수는 벽을 통과하기 어려워 야외에서만 사용이 가능하다고 합니다. 반면 NB-IoT는 연결되지 않았던 외진곳이나 지하등에 설치가 가능합니다


주파수 면허 vs 비면허

로라는 비면허 대역을 사용하지만, NB-IoT는 면허 대역을 사용합니다. NB-IoT는 LTE주파수를 사용하여 서비스하며, 국내에서는 해당 주파수를 이용 하려면 허가받은 사업자만 서비스를 제공할 수 있습니다


NB-IoT 기술의 강점
NB-IoT는 Resource Block(자원 할당의 최소 단위) 하나에 해당하는 대역폭인 180kHz만을 활용하여 IoT 기기가 데이터를 주고받을 수 있도록 합니다. 산업용 IoT의 경우 저용량 데이터만을 가끔씩 전송하니 이러한 특성에 맞춰 적은 대역폭을 이용하여 많은 단말을 효율적으로 수용할 수 있게 한 것입니다. 이와 같이 적은 대역폭 사용하기 때문에 단말의 칩셋 가격 또한 획기적으로 낮출 수 있습니다. NB-IoT의 주파수는 LTE 서비스를 위해 비용을 지급해 면허를 획득한 대역이고, LTE는 이미 국내에 서비스해 온 기간이 길기 때문에 장비, 통신 등 에코 시스템이 충분합니다. 따라서 품질 관리와 커버리지 측면에서 강점을 보입니다. 또한 NB-IoT는 무선 신호를 단순화하다 보니 도달 거리가 더 늘어나 기존에는 연결되지 않았던 외진 장소나 지하 깊은 곳에 사물이 설치될 수 있습니다. 마지막으로, NB-IoT는 LTE 통신망과 똑같은 주파수 내에서 라이트하게 만들어진 프로토콜을 쓰기 때문에 보안성을 보장할 수 있고 이는 건강, 의료 등 보안성이 중요시 되는 사업에 사용하기 유리하다는 장점을 가지고 있습니다.  




IoT가 각광받기 시작하면서 많은 IT 회사들이 IoT 경쟁력 확보를 위해 노력하고 있습니다. 가정에서는 IoT 기능을 탑재한 가전제품으로 사용자 편의성을 높이고 있으며, 산업 현장에서는 IoT 기술을 활용한 기존 프로세스 개선 및 신규 서비스 적용 사례들이 나오면서 IoT 시장을 확장해 가고 있습니다.




하지만 기대만큼 IoT 시장이 빠르게 확대되고 있는 것 같지는 않습니다. IT 사업에 큰 변화를 가져올 것으로 보였지만, 현재 IoT로 불리는 서비스 대부분은 기존 M2M(Machine To Machine) 서비스에서 크게 벗어나고 있지 않습니다. 다시 말해 기존 M2M의 적용 범위가 다양한 산업으로 확장되었을 뿐이며, IoT 그 진정한의 의미인 다양한 사물이 인터넷이 연결되어 다양한 데이터를 모아 분석하고 연계하여 부가 가치를 창출한다는 취지에 부합하는지는 의문입니다.



 ‘소물인터넷의 새로운 시작, NB-IoT’

IoT는 다양한 사물이 통신 가능하다는 전제로 시작합니다. 하지만 사물이 통신할 수 있게 만드는 데 드는 비용이 IoT 사업의 가장 큰 장애물이기도 합니다. 이 비용에는 통신 모듈, 통신료, 전기료, 유지 보수료 등이 포함되어 있으며, 수집할 데이터의 활용 가치가 이 비용 대비 얼마나 큰지가 IoT 사업성의 기준이 됩니다. 만약 이 통신 비용을 줄일 수만 있다면, 많은 IoT 서비스의 사업성이 확보될 것이고, 이는 곧 소물인터넷(Internet of Small Thing)의 활성화를 앞당길 것입니다.

소물인터넷은 IoT가 대두되었을 때부터 같이 파생된 개념으로 사물들이 데이터를 주고받을 때 굳이 초고속 네트워크나 고성능의 디바이스가 필요하지 않은 서비스도 많다는 사실에 기반하여, 작은 센서나 디바이스를 위한 소량 데이터 전송에 특화된 기술을 의미합니다. 



대표적인 사례로 프랑스의 시그폭스(Sigfox)사에서 비면허 주파수 대역에서 데이터 전용 서비스를 제공한 사례가 있으며, RFID, NFC 등의 근거리 무선 통신을 통한 IoT 서비스도 소물인터넷의 개념이 적용된 것으로 볼 수 있습니다. 특히 최근 국내 통신사에서 NB-IoT를 상용화시키면서 근거리 네트워크의 한계에서 벗어난 새로운 소물인터넷 시대가 열렸습니다. 이제부터 소물인터넷의 새로운 주체, 그리고 IoT 사업의 변화를 가져올 NB-IoT에 대해 자세히 알아보겠습니다. 


 LTE의 발전 방향

통신사들은 4G LTE에 이어 5G를 준비하고 있습니다. 4G에서도 동영상을 보기에 충분한 네트워크 속도가 지원되기 때문에 굳이 5G가 필요 없으리라 생각하시는 분들도 있겠지만, 3GPP의 Road Map을 보면 더 빠른 통신 속도를 지원하는 기술과 IoT를 위한 저전력 기반과 적은 대역폭을 사용하는 통신 방식으로 나누어 발전하고 있음을 알 수 있습니다. 다시 말해 NB-IoT와 같은 통신 방식도 5G의 일부이며, 지금도 계속 발전해 가고 있는 기술입니다.


l LTE 통신 방식 비교


대용량 데이터 송수신이 필요한 서비스의 경우 빠른 전송속도가 필수겠지만, 센서 수집이나 사용량 검침과 같이 작은 데이터를 빈번하지 않게 주고받는 서비스는 적은 대역폭을 사용하여 전력 사용량을 줄이는 통신 방식이 유리합니다. 이러한 통신 방식을 지원하기 위해 LTE Cat-0, LTE-M을 거처 NB-IoT 표준이 지난 2016년에 확정되었고 국내 일부 통신사들은 LTE-M을 확보 이후 이미 NB-IoT망을 통한 상용 서비스 준비를 마친 상태입니다.



 NB-IoT의 서비스 특징

NB-IoT망을 사용한 서비스는 아래와 같은 장점이 있습니다. 

첫째, 저렴한 통신 모듈 가격과 작은 모듈 크기
LTE 모듈이 3만 원~4만 원대인데 반해 LTE Cat 1은 1만 원 정도로 저렴했으며, 크기도 50% 수준이었습니다. NB-IoT의 경우 시장에서의 모듈 적정 가격을 USD 5 정도로 산정하고 있어, 기존 LTE 모듈을 탑재하는 경우보다 부담이 적으며, 디바이스 크기가 작아져 거치형 혹은 부착형 디바이스에 유리합니다.

둘째, 어느 곳에서든 통신이 가능
기존 근거리 네트워크를 이용한 서비스를 위해서는 Gateway나 AP와 같은 중계기가 필요한 경우가 많았습니다. 또한, 신호의 간섭 및 신호의 세기를 확인하여 적절한 위치를 선정해야 하였으며, Layout이 변하거나 디바이스의 위치가 조정되어야 할 경우 유지 관리가 어려운 단점이 존재하였습니다. 

NB-IoT는 통신사의 기지국을 사용하기에 기본적으로 어느 곳에서나 통신이 가능합니다. 특히 우리나라의 경우 LTE 기지국이 전국적으로 잘 분포되어 있기에 유리하며, 신호의 세기가 약하거나 음영 지역일 경우 통신사에 이야기하여 해결할 수도 있습니다. 

셋째, 저전력으로 배터리 오랜 기간 사용 
NB-IoT는 배터리 지속 기간을 10년 정도로 예상합니다. (이는 통신 모듈의 배터리 기준이며, 디바이스가 배터리를 같이 사용하면 달라질 수 있습니다.) 장기간 배터리 교체가 필요 없기 때문에 유지 보수 비용이 감소하며, 초기 디바이스 설치 시 상시 전원을 위한 전력 공사가 생략 가능할 수도 있습니다. 배터리 소모량이 적으므로 태양열을 통한 충전 등으로 배터리 교체 주기를 늘리는 방법도 고려해 볼 수 있습니다. 

넷째, 기존 LTE 대비 저렴한 통신료
아직 개인이나 일반 사업자를 위한 서비스가 제공되고 있지는 않지만, 기존 LTE 사용료보다 저렴하게 NB-IoT를 이용 가능할 것으로 예상하고 있습니다. 데이터 전송 횟수와 크기에 따라 통신료는 달라지겠지만, 이미 유사한 서비스를 제공하는 사업자의 경우 한 회선당 월 천원 정도의 가격을 산정하고 있으며, 각 통신사에서 현재 제공 중인 기존 IoT 등의 월 서비스 사용료 수준 이하일 것으로 예상합니다. 



위에서 언급한 장점 외에 아래와 같은 서비스 고려 사항도 있습니다.


첫째, 느린 통신 속도, 낮은 디바이스 사양
기존 LTE 기지국을 사용하지만, 대역폭을 조금만 할당하기 때문에 통신 속도가 느린 편입니다.
(Qualcomm의 MD9206 모델의 경우 최대 Download 20 kbps, Upload 60 kbps 지원)

데이터의 크기가 크거나 전송 주기가 짧은 서비스 등 NB-IoT 특성에 맞는 서비스가 아니라면 전송 속도의 문제로 품질 저하의 우려가 있습니다. 또한, 배터리 사용량을 줄이기 위해 디바이스나 모듈의 H/W 스펙이 낮은 경우가 많으므로, 실시간 이벤트 처리나 복잡한 처리가 필요한 서비스에는 적합하지 않을 수도 있습니다.

둘째, 통신 모듈의 수급과 설치 지역 확인 필요
NB-IoT는 통신사의 LTE 기지국을 사용하므로 각 통신사에서 인증된 모듈을 사용해야 하며 아직 개인이나 일반 기업을 위한 모듈 판매가 이루어지지는 않고 있습니다. 또한, NB-IoT가 상용화가 준비되긴 하였지만, LTE처럼 아직 전국적으로 설치된 것은 아닙니다. 시범 지역이나 서비스 지역 단위로 기지국 작업이 이루어질 것으로 보입니다. 


 NB-IoT에 적합한 프로토콜

NB-IoT 모듈은 말 그대로 통신 모듈이기 때문에 프로토콜 사용에 제약은 없습니다. 다만, 낮은 전송 속도와 저 사양의 디바이스의 경우를 고려하여 CoAP 프로토콜[각주:1]이 주목을 받고 있습니다. 이 프로토콜은 Restful 개념이나 응답 코드 등이 HTTP와 유사하게 동작하기 때문에 HTTP의 경량화 프로토콜로 알려져 있으며, 이름 그대로 저 사양의 제한적인 디바이스를 위한 통신 규격입니다. 

통신의 부하(Overhead)를 줄이기 위해 UDP 기반으로 동작하면서도 신뢰성(Reliability)을 보장하도록 설계된 것이 가장 큰 특징입니다. 예를 들어, 응답이 필요한 메시지와 아닌 메시지를 구분하고 응답이 필요한 메시지의 경우, ID와 Token을 사용하여 응답이 제한 시간 안에 왔는지 확인하며, 중복 메시지나 요청하지 않는 응답에 대한 처리까지 설계에 포함되어 있습니다. 

특히, NB-IoT와 같이 적은 대역폭을 사용하는 단말을 위해 메시지 크기를 나누어 전송할 수 있는 Block Transfer에 대한 설계가 포함된 점과 센서와 같이 주기적으로 데이터를 올리는 통신 방식의 효율성을 위해 Observer라는 기능이 설계되어 있다는 점에서 주목받고 있는 프로토콜입니다.


 CoAP 기반 IoT 표준, LWM2M

CoAP가 IoT 프로토콜로 주목을 받기 시작하면서 LWM2M, OCF, oneM2M 등 CoAP을 사용하는 IoT 국제 표준들도 많이 발표하고 있습니다. 그 중 CoAP 프로토콜의 특성과 기능을 가장 많이 활용하고 있는 LWM2M[각주:2]에 대해서 알아보겠습니다.

일반적인 IoT 국제 표준들은 표준 메시지 형태를 CoAP에서 어떻게 표현할 것인지에 대해 설명하는 데 반해, LWM2M은 CoAP의 기능 자체를 활용하여 표준을 규정한 것이 특징입니다. LWM2M의 주요 기능은 Bootstrap, Registration, Information Report, Device Management로 M2M 서비스에 필수적인 기능만 간결하게 강조하고 있습니다.


l LWM2M의 주요 기능


LWM2M 디바이스는 자신의 Data 구조를 Object나 Resource 형태로 구현하고 위 네 가지 기능을 사용하여 서버와 데이터를 주고받을 수 있습니다. 이 중에서 Information Reporting은 CoAP의 Observe 기능을 활용하도록 설계되어 있는데요. 센서의 값이 바뀔 때 주기적으로 Notification을 하도록 표준에 명시되어 있으며 추가적으로 전송 주기를 설정하는 기능도 포함하고 있습니다. 


Device management는 디바이스가 관리하는 Data를 읽거나 쓸 수 있는 기능이며, 명령•제어도 가능합니다. Firmware Update는 기존 OMA DM과 유사한 방식으로 표준이 정의되어 있으며, Firmware 파일 Download 시 CoAP을 사용한다면 Block Transfer를 사용해서 파일을 전달해야 합니다.



출처: http://blog.lgcns.com/1447 [Creative and Smart! LG CNS]


 

유동IP 환경을 고정IP로~ DDNS 포트포워딩

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


1. 소개


집에 설치한 PC에 접근하는 방식은 보통 "팀뷰어" 같은 화면 공유 프로그램을 활용합니다.

그런데, 화면 공유 프로그램이 아닌 무엇인가 제어를 하고 싶을 때는 집에 설치한 장치가 인터넷에 연결이 되어있고, 
IP 주소를 가지고 있어야 합니다.

대부분의 가정에서는 대기업이 제공하는 인터넷을 쓰다보니 IP주소를 모르고 그냥 연결해서 사용하는 것이 다반사입니다.

사실 보통 사람들은 집에 설치된 공유기에 대기업에서 어떤 IP를 할당해주었는지 알필요가 없죠. 거의 집에 있는 장치에 
접근할 일이 없기 때문입니다.

대기업의 인터넷 서비스는 많은 사용자들이 쓰다보니 유동IP를 할당합니다.

다시말하면, 사용자에게 임의로 공인IP를 할당하고 수시로 그 IP가 바뀌기 때문에 외부에서 집에 있는 장치를 
직접 연결할 수가 없습니다.

마치 집전화 번호가 바뀌니 우리집에 전화걸 방법이 없다는 것이죠. 대신 집에서는 외부에 전화하는것이 문제가 없습니다.

그래서 몇몇 공유기 제조사에서 DDNS라는 기능을 넣은 제품을 판매합니다.

IP가 바뀌어도 그 바뀐 IP를 이름으로 기억하게 만드는 것이죠. 그것이 URL입니다.

 
       DDNS의 개념 : 인터넷과 DDNS의 개념을 설명합니다.
  • IP, Domain, URL에 대한 이해

       인터넷에서 어떤 컴퓨터에 접근하는 데는 IP 라고 하는 주소를 사용합니다.   IP 는 192.168.0.1 과 같은 형태를 하고 있으며 컴퓨터가 이해하기 쉽도록 숫자만으로 구성되어 있습니다.   그러나 실제로 인터넷을 사용하는 주체는 사람이며 사람이 수많은 IP 들을 모두 기억하는 것은 어려운 일입니다.   그래서 고안된 것이 Domain 이라는 것입니다.
       Domain 은 zonesoft.co.kr 과 같이 사람이 기억하기 좋은 형태로 되어 있는 주소이며 실제로 우리가 많이 사용하는 인터넷 주소도 바로 이 Domain 을 기초로 한 URL (http://www.zonesoft.co.kr/default.html 과 같은 형태) 이라는 것입니다.   즉, Domain 이란 특정 컴퓨터를 지정하는 것이며 URL 은 특정 컴퓨터 내의 특정 디렉토리 또는 파일까지 지정하는 것으로 보면 됩니다.
       그런데 문제는 Domain 이나 URL 만 가지고는 컴퓨터가 다른 어떤 컴퓨터를 찾아가지 못한다는 것입니다.   그래서 나온 것이 DNS 라는 것입니다.

  • DNS 의 개념




  •    DNS 는 Domain 을 숫자로 된 IP 로 바꾸어 주는 일을 하는 컴퓨터로서 인터넷 곳곳에 자리를 잡고 Domain 에 대한 질의를 기다리고 있습니다.   즉 인터넷을 사용하는 사람이 zonesoft.co.kr 이라는 Domain 만 알고 있더라도 211.169.248.107 이라는 실제 주소 (IP) 로 찾아갈 수 있도록 해주는 매개체 역할을 하는 것입니다.
       그런데 이 DNS 라는 것이 실상은 "zonesoft.co.kr : 211.169.248.107" 형식의 "Domain : IP" 쌍을 파일에 저장해 두었다가 zonesoft.co.kr 에 대한 질의가 오면 211.169.248.107 을 회답으로 보내주는 구조로 되어 있습니다.   즉 파일의 내용은 정적으로 구성되어 있고 그 내용에 대한 변경은 사람이 손으로 직접 해야 하는 구조로 되어 있는 것입니다.   이러한 방식은 전용선을 사용하는 사람들만 DNS 의 혜택을 누리는 것과 같은 것입니다.   물론 일반 네티즌들도 DNS 로부터 서비스를 받고 있지만 (웹브라우저로 yahoo.co.kr 을 찾아가는 정도) 독자적인 웹 서버를 구축하여 인터넷 서비스를 할 수는 없습니다.   왜냐하면 전세계 어느 DNS 에도 자신의 Domain : IP 쌍이 기억되어 있지 않기 때문입니다.
  • 고정 IP (Static IP) 와 유동 IP (Dynamic IP) 의 차이점

       위에서도 언급했지만 DNS 는 정적으로 고정된 IP 만 기억할 수 있으며 반면 요즘 보급되고 있는 염가의 초고속 인터넷 서비스들은 회원의 컴퓨터에 수시로 변경되는 유동 IP 만 부여하고 있습니다.   유동 IP 로는 인터넷 서비스를 할 수 없습니다.   그 이유로는 첫째, Domain 으로 해당 컴퓨터를 찾을 수 없습니다. (DNS 에서 기억하지 못하므로)   둘째, IP 가 수시로 변하므로 외부에서 IP 만으로 해당 컴퓨터에 접근하기가 어렵고 일반 대중을 대상으로 하는 것은 불가능합니다.

  • 고정 IP 를 사용하기 위한 방법들

       그래서 요즘 많이 보급되어 있는 것이 웹 호스팅입니다.   웹 호스팅이란 전용선을 사용하고 있는 서비스 제공자의 컴퓨터에 작은 공간을 할당받아 자신의 홈페이지를 운영하는 방법입니다.   일반적인 사용에는 별 불편함을 느낄 수 없지만 컴퓨터가 자신의 것이 아니므로 많은 제약을 가질 수 밖에 없습니다.   CGI, DB 등의 사용에 제약이 많고 어떤 새로운 프로그램을 설치할 수도 없습니다.   자신은 하나의 계정을 가지고 있는 사용자일 뿐 슈퍼 유저가 아니기 때문입니다.
       고정 IP 를 부여받는 가장 일반적인 방법은 전용선을 사용하는 것입니다.   물론 대형 시스템에서는 전용선을 사용하는 것이 가장 안정적이고 확실한 방법입니다.   그러나 전용선을 설치하고 운영하는데는 많은 비용이 소요됩니다.   또한 전용선이 안정적이지만 그 속도는 가격에 비해 떨어지는 것이 사실입니다.

  • Dynamic DNS (DDNS) 의 개념

       DDNS 시스템은 유동 IP 를 전용선에 부여되는 고정 IP 처럼 사용할 수 있도록 해주는 시스템입니다.   DDNS 가 하는 일은 일반 DNS 가 하는 일과 같습니다.   그러나 Domain : IP 쌍을 파일에 저장하지 않고 주메모리에 저장합니다.   왜냐하면 유동 IP 를 대상으로 하는 본 시스템의 특성상 IP 를 영구 저장할 필요가 없으며 또한 수시로 그 내용을 갱신하면서 관리하는데는 주메모리가 가장 적당하기 때문입니다.
       DDNS 시스템을 구성하는 또 하나의 요소에는 Noti 가 있습니다.   DDNS 는 각 회원의 컴퓨터에 설치되어 있는 Noti 로부터 그 컴퓨터에 현재 할당되어 있는 IP 를 통보받아서 그 IP 를 Domain : IP 쌍으로 기억합니다.    그러면 자신만의 Domain : IP 쌍을 기억하고 있는 DNS 가 인터넷 상에 있는 것이 되므로 자신의 컴퓨터로 인터넷상에서 모든 네트워크 서비스 (Web, FTP, Mail, Chatting 등 전용선에서만 가능한 모든 서비스) 를 제공할 수 있으며 자신이 슈퍼 유저이므로 CGI, DB 등을 최대한 활용할 수 있습니다.





2. 구성

보통 가정에 들어온 인터넷은 아래 그림같은 구성을 가지고 있습니다.




"서비스 제공자 모뎀"은 SKT 같은 회사가 인터넷 설치 시에 집에 놓아주는 기기입니다. 보통은 여기에 바로 PC 를 연결했었는데요. 

요즘은 인터넷 전화, 인터넷 TV도 같이 보다보니 무선공유기를 놔줍니다. 그 무선 공유기를 IPTIME으로 교체를 해야 됩니다.

그 방법은 각 통신사업자마다 내용이 달라 인터넷에서 찾아보셔야 됩니다.


보통은 모뎀까지만 연결해주니 모뎀에 연결한 IPTIME 공유기를 설정하면 됩니다.

IPtime의 DDNS설정은 아래에 정리하였습니다. 사실 보면 그렇게 어렵지는 않습니다.


IE, 크롬, 파폭 기타 여러 브라우저로 관리자 페이지에 http://본.인.I.P 쳐서 들어갑니다.

관리도구로 들어가면 메인 설정 페이지가 나옵니다.


DDNS 설정 페이지 – DDNS 설정

  • 서비스 공급자: ipTIME DDNS
  • 호스트이름: 원하는 도메인명.iptime.org (ex: abcd.iptime.org)
  • 사용자 ID: my@mail.com 본인 메일 계정
  • 사용자 암호: 원하시는 아무 암호

정상 등록이 나오면 끝났습니다.


원격포트를 열고 외부에서 DDNS 주소를 이용하여 접근하면 이렇게 외부에서도 공유기 관리도 가능합니다.


 발췌 : https://nas.moe/archives/75


3. 설정

DDNS 가 설정이 되었으면, 사실 집에 대표번호가 설정되었다고 보면됩니다.

대표번호는 내선번호가 있어야 하부에 연결된 장치들과 개별 연결이 가능한데 그것이 바로 포트포워딩 설정입니다.





예를들어, DDNS 주소를 tinyfarmer.iptimes.org 라고 설정을 했고, 외부에서 tinyfarmer.iptimes.org : 9000 을 치면 
집에 있는 PC 에 설치된 내 홈페이지가 뜨게 하고 싶을 때 다음과 같이 설정합니다.


DDNS주소 / 외부 포트 9000 ------ 내부IP    192.168.0.15  /  내부 포트  80


위와 같이 매핑 해 놓으면 무조건 설정된 내부 IP의 해당 포트로 찾아 들어가게 됩니다.

설정은 다음을 참고하세요.

                                                             
    ※ IPTIME의 기본 설정 페이지 접속 주소는 "192.168.0.1"입니다.

접속이 안되신다면 누군가는 수정한것이기 때문에, 

아래 링크를 참조해서 진행해 주세요.

→ 공유기 설정 페이지 접속 주소 확인 방법 바로가기


1) 인터넷 창을 열고 인터넷 주소창을 "192.168.0.1" 을 입력해 주세요.






2) IPTIME 설정 페이지 접속이 되셨으면 [관리도구]를 클릭 해 주세요






3) 좌측 매뉴의 [고급설정]→[NAT/라우터 관리]→[포트포워드 설정]을 차례대로 클릭 주세요.






4) 아래의 같은 창이 나오면 이제, 내가 포트포워딩 하려는 기기의 IP주소와 포트번호를 입력해 주시면 되요.

<예시 : IP주소가 "192.168.0.100 이고 포트번호가 3100"인 경우



규칙이름 : 임의지정

내부 IP주소 : 192.168.0.100

외부 포트 : 3100

내부 포트 : 3100 (포트번호는 전부 동일하게 입력해 주시면 됩니다.)

포로토콜 : 대부분 TCP 로 진행하시면 됩니다.


5) 이렇게 전부 입력 후 저장을 해주시면 포트포워딩 완료!!!



출처: http://brand-me.tistory.com/194 [Happy Day.]




4. 마무리

사실 공인 IP 서비스를 신청해도 됩니다.

하지만, 별도의 비용이 들어가므로 공유기가 제공하는 서비스를 이용해도 충분합니다. 단, 자신이 직접 설정해야된다는 수고가 필요하죠. 

인터넷 구성을 집적할 수 있는 수준이면, 외부에서 집에 있는 기기들을 제어하는데 이정도 설정이면 충분합니다.

한번 도전해보세요. ^^


 

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





 

I2C 통신

Posted by ironmask84
2016. 10. 27. 15:11 나는 프로그래머다!/Sensor




센서 연구개발에 첫 발을 떼고 있습니다..

센서와 브레드보드(일명 빵판) 사이에는 I2C로 통신을 많이 하는 것으로 보여,
첫 관심사로 잡았습니다. ㅎㅎ


이미 블로그에 정리를 잘해주신 분들의 자료를 참고하려고 하며,
아래에 간단히 머리에 들어오는 블로그 링크 걸어 둡니다. ^^


* I2C통신으로 검색

http://blog.naver.com/jinoh9272/220578118650  <-- I2C 통신에 사용되는 SCL, SDA 와 레지스터들 기본 설명

http://cubloc.blog.me/220051675031  <-- I2C 통신 예시

http://blog.naver.com/gkf9876/220453341286 <-- MPU6050 가속-자이로 센서 +  ATmega128 PCB 예시
http://playground.arduino.cc/Main/MPU-6050 <-- MPU6050  아두이노 페이지

 

  1. I2C 통신에는 Master가 되는 PCB와 Slave가 되는 것들 (센서 등)이 있다.
  2. RS232에 비해 큰 장점이 1 : N 통신이 가능하다는 점이다. (1이 Master, N이 Slave)