순서 기본개념 USN 핵심기술 USN 적용사례 ZigbeX 소개 ZigbeX 개발환경구축 TinyOS 개요 nesc 구문이해 기본예제를이용한실습 WSN 프로그래밍실습 p.2

Save this PDF as:
 WORD  PNG  TXT  JPG

Size: px
Start display at page:

Download "순서 기본개념 USN 핵심기술 USN 적용사례 ZigbeX 소개 ZigbeX 개발환경구축 TinyOS 개요 nesc 구문이해 기본예제를이용한실습 WSN 프로그래밍실습 p.2"

Transcription

1 USN Quick Start 2009~2010 동계강좌 교육사업부

2 순서 기본개념 USN 핵심기술 USN 적용사례 ZigbeX 소개 ZigbeX 개발환경구축 TinyOS 개요 nesc 구문이해 기본예제를이용한실습 WSN 프로그래밍실습 p.2

3 기본개념

4 Background 유비쿼터스컴퓨팅 언제, 어디서사용자가인지하지않더라도필요한정보나서비스를제공할수있는기술 유선망, 무선망, 고정망, 이동망등의수많은망들간의연결이필요 유비쿼터스사회의기반기술 : USN 사람의행동패턴및주변환경을감지할수있는기술 효율적으로실행활및산업에적용하여향상된서비스제공 USN 의기본목적 데이터수집, 데이터처리, 무선통신을통한네트워크형성 p.4

5 Wireless Sensor? 제한된자원으로구성된소형의내장형시스템을이용하여다양한물리량을센싱하고, 처리하며그결과를이미구축된네트워크를이용하여전달 제한된전력 Battery System 제한된크기와가격 회수비용무시 제한된 BandWidth 무선채널의한계 제한된 RF 출력 각요소간의 Trade-Off p.5

6 Sensor Networks? Ubiquitous Sensor Networks RFID 와무선센서노드들로구성되는네트워크 : RFID 태그감지및주변환경센싱 무선통신을통한자유로운네트워크형성 관심을두는현상에대한정보수집, 모니터 구성된네트워크의유지 무선노드들끼리무선통신을통해기간망과연결된 Sink 노드 ( 수집노드 ) 에게수집된데이터전송 Ad-Hoc Network 를 이용한자율통신망 구축 p.6

7 Ad-hoc Wireless Networks Ad-hoc 통신기법 특정 AP 나 Base Station 과같은중계기가없더라도각무선노드들간에자유로운네트워크를구성하는기술 p.7

8 Ad-hoc Wireless Networks Ad-hoc Network 의구조 유선망이나기존에설치된망이없음 Self-Organizing Networks 자유롭게이동가능. 라우터로동작, 단말은제외 Ad-hoc Network 의특징 쉽고빠른개발 ( 유선망과기지국이필요없다 ) 관리비용감소 제한된자원 ( 전력, 전송거리 ) 비안정형네트워크 ( 에러율이높다 ) 보안취약 ( 전송데이터를쉽게모니터링 ) p.8

9 USN 의특성 응용프로그램지배적 각각응용에따라최적화되어야함. 프로토콜최적화. 통신환경 응용이나프로토콜에따라독특한데이터트래픽을가짐 Duty cycle 사용 배터리시스템에서저전력을위해사용하지않는 RF 는 Sleep 시킴 Duty Cycle 은 RF 에서 Sleep 과 Active 시간간에비율을의미 Self-Configurability ( 자가구성 ) Network Self Organization p.9

10 USN 핵심기술

11 Enabling Technology for USN IEEE WLAN 은 USN 에적합하지않음 IEEE WPAN Bluetooth ( )? Voice Applications 에적합한 QoS 를가지는디바이스로케이블을대체할목적으로설계 High-Rate WPAN ( )? 높은 QoS 를요구하는멀티미디어응용에적합 Low-Rate WPAN ( )? Data rate 나 QoS 가낮은응용에적합 Wireless Sensor Networks 에서공인함 p.11

12 IEEE TG4 IEEE 802 LAN/MAN Standards Committee802.1Higher Higher Layer LAN Protocols Working Group Wireless Local Ar ea Network Work ing Group Wireless Personal Ar ea Network Worki ng Group MBWA W orking Gr oup TG1 WPAN/Bluetooth Task Group TG2 Coexistence Task Group TG3 WPAN High Rate Task Group TG4 WPAN Low Rate Task Group + ZigBee p.12

13 WSN 기술 WSN(Wireless Sensor Network) P2P 에서 M2M 으로변화 모든사물에컴퓨팅기술과통신기능부여 스탠포트대학 구조물의실시간무선계측시스템개발 버클리대학 모트 (Mote) 상용화 소형무선센서플랫폼으로 HW 와 SW 공개 무선센서네트워크운영체제 (TinyOS) 공개 p.13

14 WSN 응용 Home Networking Automotive Networks Industrial Networks Interactive Toys Remote Metering p.14

15 WSN 시스템개요 특정지역이나공간상에다수의소형센서노드설치 주변환경및사물인식정보수집 응용서비스에활용 기존네트워크와의차이점 기존네트워크 : 상호간의정보전달 센서네트워크 : 자동화된원격정보수집 무선과소형의센서노드구현기술필수 배터리로동작하는저전력의제한된환경고려 MCU, RF, 메모리, 저장소, 스마트센서, SW 무선통신소모전력 > 센싱, 데이터처리소모전력 p.15

16 WSN 시스템구성 무선센서네트워크시스템구성 스마트센서노드 (HW), 센서플랫폼 (SW), 무선네트워킹, 응용서비스를위한서버시스템 버클리대학의 Mote 시리즈유명 공개 HW Mica 계열 : Atmel 의 AVR 시리즈 Telos 계열 : TI 의 MSP430 시리즈 공개 SW 초소형운영체제 : TinyOS 초소형데이터베이스 : TinyDB 병행성을고려한 C 확장언어 : NesC 하드웨어시뮬레이터 : TOSSIM 기타툴 XBow(Crossbow) 에서 Mote 시리즈상용화 온도, 조도, 지자기센서등. 센서보드를스택형식으로장착 p.16

17 WSN 시스템구성 ( 계속 ) 센서노드하드웨어 MCU Atmel, ARM, TI, Motolora 등 저전력을위해 8 비트낮은클록의 RISC CPU Atmel 의 Atmega 시리즈가가장넓리사용 무선 RF 모듈 IEEE /ZigBee IEE 표준 PHY/MAC 레이어기반» 상위프로토콜로응용을규격화한단거리무선통신에적합 x, IEEE HR-WPAN, Bluetooth 보다구현측면에서훨씬간단 네트워크안에하나의코디네이터지정.» 송 / 수신활동을제외한나머지시간은대기모드로전환하여배터리절약 p.17

18 WSN 시스템구성 ( 계속 ) 센서노드하드웨어구조 p.18

19 WSN 시스템구성 ( 계속 ) 센서노드하드웨어변화 기존 : MCU 와무선 RF 독립 변경 : MCU 와무선 RF 를온 - 칩화 (SoC) TI CC2430, CC2530 CC MCU(8051) + 플래시 (32/64/128K) + 램 (8K) CC MCU(MSP430) + 플래시 (32/64/128K) + 램 (8K) Ember EM250 CC XAP2b(16bit MCU)+ 플래시 (128K) 센서노드하드웨어업체 국내 레디오펄스 1.0 Full Stack 을만족하는 ZigBee 싱글온칩생산 외국 TI(Chipcon), Motorola(Freescale), Ember TI 에인수된 Chipcon 의 CC2420 이대표적 Ember 는 CC2420 을라이선스받아 EM2420 생산 Xbow(Crossbow), Bust Networks, Arch Rock p.19

20 WSN 시스템구성 ( 계속 ) 센서노드 SW 플랫폼 : OS 스마트센싱, 데이터프로세싱, 무선통신기능 버클리대학의 TinyOS, ETRI 의 NanoOS, 일본의트론프로젝트 TinyOS NEST(Network Embedded Software Technology) 프로젝트에서출발 저전력, 안정적인운영, 네트워크접속기능, 분산처리, 개발자를위한편리한인터페이스제공 4KB 미만실행이미지, 컴포넌트형태로추상화된하드웨어지원, 센서노드를위한통신및제어기능제공 오픈소스프로젝트로버클리대학에서관장. 대부분의미국대학에서개발동참및교과과정에적용 XBow, Dust Networks, Arch Rock 등에서많은상용화실적 p.20

21 WSN 시스템구성 ( 계속 ) 센서노트 SW 플랫폼 : 미들웨어 사용자에게통합된서비스정보제공 수집한센싱데이터필터링 / 통합 / 분석 의미있는상황정보추출 / 저장 / 관리 / 검색 응용서비스로전달및서비스간연계통합 싱크노드 ( 코디네이터 ) 에탑재 센서노드갱신, 응용변화에따른프로그래밍조정수행 미들웨어기술 IEEE 1451 이기종센서네트워크로부터수집된센싱데이터들을응용프로그램수정없이같은방식으로전달하기위한공통인터페이스기술 스마트센서모니터링기술 센서네트워크구동 / 모니터링 / 제어 / 진단 / 복구 OSGi 미들웨어 자바기반 (J2SE, J2Me) 객체지향미들웨어프레임워크 통합개발환경인이클립스의기본프레임워크로채택 p.21

22 WSN 시스템구성 ( 계속 ) 센서노트 SW 플랫폼 : DB 기존센싱방법 환경과사물의변화를그대로수집 문제점 데이터유효성과패킷크기를고려하지않음. 해결책 DB 활용 센싱된데이터를원하는형태로필터링» 최적화된패킷크기로구현함으로써효율성극대화 일반적인파일시스템지향» SQL 과같은구조적인질의가가능한시스템으로발전» 더욱정확하고섬세한센싱데이터모니터링 TinyDB 버클리대학에서개발. 질의기능포함 p.22

23 WSN 시스템구성 ( 계속 ) 무선센서네트워크 LR-WPAN(Low Rate-Wireless Personal Area Network) 저속, 저가격, 저전력 소형화, 오류허용, 가변적인네트워크구조, 효율적인라우팅, 고장복구 IEEE 하위 2( 물리 (PHY), MAC) 계층만표준화 보완적인채널매핑 DSSS(Direct Sequence Spread Spectrum) FDMA(Frequency Division Multiple Access) CSMA-CA(Carrier Sense Multiple Access with Collision Avoidance) 스캐닝과리포팅내장 p.23

24 [ 참고 ] 무선통신기술용어 DSSS 양쪽모두가알고있는의사난수 (pseudo random: +1 or -1) 를데이터에곱해서실제비트보다훨씬길이가길어진 ( 높은주파수 ) 확산신호전송. 수신측은의사난수를다시곱해 (1x1=1, -1x-1=1) 원래신호복원. 확산신호는전송실패확률을낮춤. IEEE 는 32 비트로구성된 16 개의사난수중하나를선택. 4 비트데이터확 산. Input Data d t Spreading pn t tx o noise channel Despreading Output Data PN code PN code FDMA IEEE 에서는주파수를구분한다는의미보다, 정해진주파수대역폭안에서필요한대역폭단위로잘게나눠사용 CSMA-CA 확인신호 : 송신측은수신측에 RTS(Request to Send) 패킷전송, 수신측은송신측에 CTS(Clear to Send) 전송 송신측에서 CTS를받지못하면일정회수만큼 RTS 전송. 그래도 CTS를받지못할경우일정시간을대기한후다시 RTS 전송 데이터전송 : 송신측은수신측에데이터패킷전송, 수신측에송신측에 ACK 전송 rx o pn r d r p.24

25 WSN 시스템구성 ( 계속 ) ZigBee Alliance IEEE 에서제외된상위부분설계목표 IEEE /Zigbee 풀스택제공 네트워크구조, 라우팅, 보안등을표준화하여지그비스택에추가 각업체는이를바탕으로자사의프로파일작성, 서로다른업체에서만든디바이스간상호운용성과호환성보장 무선센서네트워크의표준은아님. 미국 국내 풀스택이너무무거움 TinyOS + IEEE 호환무선 RF 모듈 ZWave: 소규모오피스나가정을타깃 업계 : 지그비풀스택채택 정부 / 연구기관 : IPv6 기반의 IP-USN 프로토콜연구개발. p.25

26 WSN 시스템구성 ( 계속 ) TinyOS 기반 WSN 플랫폼구조 Smart Sensor Application & Services Protocols Link Radio Blocks Logs Files Flash Scheduling Management MCU, Bus, Streaming Drivers ADC Sensor I/F TinyOS (SW) Wireless RF WSN Mote Platform Storage Processor Sensors Sensor Note(HW) p.26

27 IEEE 개요 물리 (PHY) 계층과 MAC 계층으로구성 물리계층프레임최대크기는 133 바이트 주파수와전송속도 868Mhz: 1 채널 ( 유럽 ), 20kbps 915Mhz: 2Mhz 간격 10 채널 ISM 밴드, 40kbps 2.4GHz: 5Mhz 간격 16 채널 ISM 밴드, 250kbps 노드내최대 255 개디바이스연결 최대노드간통신거리는 100m PHY (Mhz) 868/ 915 Frequency Band (Mhz) Spreading parameter Chip rate (kchip/s) modulation Bit rate Data parameter Symbol rate (ksymbol/s) Symbols BPSK Bin 902~ BPSK Bin ~ O-QPST ary Orthogonal p.27

28 IEEE PHY 운영되는주파수대역 868Mhz(1)/916Mhz(10) PHY: 0 ~ 10 Channel 0 Channels MHz MHz 902 MHz 928 MHz 2.4Ghz(16) PHY Channels MHz 2.4 GHz GHz p.28

29 IEEE MAC 전기능디바이스 (FFD: Full function device) 임의의토폴로지 (Topology) 네트워크코디네이터역할 임의의다른디바이스와연결 축소기능디바이스 (RFD: Reduced function device) 스타 (Start) 토폴로지로제한 네트워크코디네이터가될수없음 네트워크코디네이터와만연결 매우간단히구현 p.29

30 IEEE MAC ( 계속 ) 스타토폴로지 Coordinator Master/slave Full function device Reduced function device Communications flow 피어투피어 (Peer to peer) 토폴로지 Point to point Cluster tree p.30

31 IEEE MAC ( 계속 ) 결합토폴로지 클러스터스타 (Clustered stars) Full function device Reduced function device Communications flow p.31

32 USN 적용사례

33 Environmental Applications 가장먼저시도된분야 활용분야 주거환경감시 산불감시 홍수감시 농업에관한환경감시 환경예측, 예보시스템 프로젝트 Great Duck Island (U.C Berkeley) PODS (University of Hawaii) CORIE ALERT p.33

34 Smart Home Applications Smart Home Home Information For useful life Home automation For convenient life Home Security For safe life Home Healthcare For well life Home Entertainment For enjoyment of life p.34

35 Healthcare Applications Healthcare 생리학적데이터를원격감시 탁상형원격진단시스템 원내의환자와의사의위치파악 원내의약물통제 사용자의상태를반영한입는 컴퓨터를활용한헬스케어 p.35

36 Military Applications 시나리오 아군의장비와무기감시 전장감시 반군이나지형의수색 전투손상의평가 생화학적공격에대한수색 p.36

37 Great Duck Island(1/2) 목적 바다새둥우리의환경과행동을감시 주요인 바다새는주변환경에민감. 반복되는스트레스는바다새군락전체가섬을떠나게할수도있음. 문제점 인간의참여를최소화하면서자연상태의관찰결과를얻을것인가 해결방안 sensor network p.37

38 Great Duck Island (2/2) 1 굴속에 4 인치크기의모트설치 2 게이트웨이에서센서정보수집 3 연구기지랩탑에서송신 4 다른랩탑에서위성으로송신 5 캘리포니아인텔 - 버클리랩에서수신 p.38

39 Golden Gate Bridge Hardware 2003 년 6 월까지 200 개의모트 (AVR 8Mhz) 배치 (Mica2(cc1000)) 가속도센서에의해돌풍에따른움직임측정 게이트웨이 (PXA Mhz) 에서데이터수집및중앙서버로전송 Software TinyOS 1 Time plot MEMS Piezo 0.5 Acceleration (g) Time (sec) p.39

40 Redwood Project p.40

41 Ubiquitous Home Service 응용 압력센서를집바닥에설치 압력센서가보내는정보를 기반으로사람의위치추적 사람이동경로에따른 video 와 audio 서비스제공 p.41

42 다양한 Ubiquitous Home Service 구현 응용 Camera, microphone, pressure, infra 센서등을집에설치하여다양한유비쿼터스서비스제공 여러센싱데이터는중앙서버에서통합하여상황에맞는서비스판단 판단된결과를바탕으로로봇이나가전제품, 보일러, 에어컨등을제어 p.42

43 BSN(Body Sensor Network) p.43

44 유비쿼터스포도원 Hardware Mica2 사양의모트 65 개구축 이른아침에서리가내리면관리자의랩탑컴퓨터에소리를내어신호 Software TinyOS

45 ZIGBEX 소개

46 Hanback ZigbeX Computing ATmel 8-bit RISC Microcontroller 128KByte Flash program memory, 4KByte SRAM SPI, UART 2, Timer, ADC 10Bit 8Chenel, External Flash 512KB, DS2401(Serial_ID), RTC4513 Radio Transceiver Chipcon CC2420 Radio range: 100m Data rate: 250 KBps Frequency range: 2.4 GHz (ISM) PCB 패턴안테나 ( 실외 130m, 실내 30m) TinyOS 1.X RFID Reader + RFID Tag (5) p.46

47 Hanback ZigbeX II Computing, Radio Transceiver 기존과동일 TinyOS 2.X SMA 형안테나추가 케이스제작 p.47

48 하드웨어구성 전면 CPU, RF, PCB Antenna, SMA Antenna connector 단자, Clock, ISP, Battery Power, External Power, Extend Connector, Cds( 조도센서 ), LED, Temp & Humidity, Photo Diode, RTC, 전원스위치, 전원표시 LED 뒷면 External Flash Memory, serial ID p.48

49 Hanback Option Sensor Boards ZigbeX ZigbeX II 움직임검출 초음파기상리모콘 블루투스 기상모터초음파 LCD 바이오 블루투스 혈압 릴레이 GPS 카메라 Co2 p.49

50 ZigbeX 게이트웨이 Ubi-BOX I, II ZigbeX 제품군전용게이트웨이 10dBm 파워로최대 300m 통신거리 임베디드리눅스 2.6 커널적용 블루투스통신지원 LAN 을이용한 USN 서버구축가능 WLAN 을이용한 USN 서버구축가능 ZigbeX, UbiCoin, Ubi-MSP430, Ubi-nanoLOC 완벽호환 p.50

51 유비하우스 II ZigbeX 를이용한 USN 기반의홈네트워크모델 임베디드시스템및모바일플랫폼을통해제어가능 EMPOS II, SM II, EMPOS III, CDMA II etc 홈네트워크를제어하기위한다양한동작명령어제공 문의열기 / 닫기제어 커튼제어 전원제어를통해 Lamp 제어 가스차단기제어 침입탐지등 p.51

52 유비하우스 II ( 계속 ) p.52

53 Ubi-HomeNet 유비하우스 (Ubi-House) II 기능을전용교육장비화시킴 유비하우스에적용된모트및센서와동일한구성 실제홈네트워크시스템실험실습환경제공 p.53

54 ZIGBEX 개발환경구축

55 순서 Cygwin 삭제 Cygwin 설치 TinyOS 2.x 설치 Install TinyOS 2.x Install ZigbeX PlatForm Graphviz 설치하기 설치프로그램목록 p.55

56 Cygwin 삭제 p.56

57 미리설치되어있는 Cygwin 삭제과정 1. 제어판 -> 프로그램추가 / 제거 -> Cygwin 이나 TinyOS 삭제 2. 윈도우 시작 -> 실행 창에서 regedit 실행 HKEY_CURRENT_USER -> Software -> cygnus Solutions 폴더삭제 HKEY_LOCAL_MACHINE -> Software -> cygnus Solutions 폴더삭제 3. Cygwin 폴더전체삭제 p.57

58 Cygwin 설치 p.58

59 Cygwin 설치 - 목적 TinyOS 는리눅스환경에서동작된다 윈도우상에서리눅스플랫폼을에뮬레이션할수있는 Cygwin 을통해 TinyOS 를동작시킨다.

60 Cygwin 설치 설치화면 제공된 CD 의 CD\cygwin 폴더안에 setup.exe 파일을실행 다음을클릭 p.60

61 Cygwin 설치 설치타입 Install from Local Directory 를선택 다음을클릭 p.61

62 Cygwin 설치 설치경로설정 Cygwin 설치폴더를설정 기본값인 c:\cygwin 으로설정 다음을클릭 p.62

63 Cygwin 설치 설치패키지경로설정 Cygwin 설치파일폴더설정 CD\cygwin\release 로설정 다음을클릭 p.63

64 Cygwin 설치 설치패키지선택 Cygwin 설치패키지를선택 기본값으로설정 다음을클릭 p.64

65 Cygwin 설치 - 완료화면 설치완료화면 바탕화면의바로가기만들기 시작메뉴에아이콘만들기 p.65

66 TinyOS 2.x 설치 p.66

67 TinyOS2X 및 ZigbeX 프로그램설치 설치파일복사 Cygwin 에서 mkdir /opt 명령을통해 /opt 폴더생성 CD 의 Install_TinyOS2X 폴더의 Install_TinyOS2X.sh 파일과 Install_TinyOS2X.zip 파일을 Cygwin 이설치된폴더의 /opt 폴더에복사. Cygwin 실행후다음명령수행 cd /opt./install_tinyos2x.sh Cygwin Update 1. CD 에 bin 폴더가없다면이미업데이트된버전 업데이트필요없음 2. CD 에 bin 폴더가있다면아래와같이업데이트작업이필요 열려있는모든 Cygwin 을종료 CD 의 bin 폴더의파일을 Cygwin 이설치된폴더의 /bin 에복사 ( 덮어쓰기 ) 설치완료 p.67

68 Install ZigbeX PlatForm 이미 TinyOS 2.x 가설치되어있을경우 ZigbeX PlatForm 설치 CD 의 hanback_zigbex_tinyos2x 폴더에 hanback_zigbex_tinyos2x.sh 파일과 hanback_zigbex_tinyos2x.zip 파일을 Cygwin 이설치된폴더의 /opt 에복사. Cygwin 실행후다음명령수행 cd /opt./hanback_zigbex_tinyos2x.sh Cygwin Update 1. CD 에 bin 폴더가없다면이미업데이트된버전 업데이트필요없음 2. CD 에 bin 폴더가있다면아래와같이업데이트작업이필요 열려있는모든 Cygwin 을종료 CD 의 bin 폴더의파일을 Cygwin 이설치된폴더의 /bin 에복사 ( 덮어쓰기 ) 설치완료 p.68

69 Graphviz 설치하기 p.69

70 Graphviz 설치하기 TinyOS 의예제중그래픽기반자바어플리케이션을실행하기위해설치 설치방법 CD 의 Tools 폴더에있는 graphviz-2.12 파일을실행

71 설치프로그램목록 p.71

72 설치프로그램목록 TinyOS 설치목록내용 TinyOS Tools TinyOS NesC 1.2.8a Cygwin Support Tools TinyOS 의컴포넌트기반의구조적인개념들과실행모델구현을위한 C 언어확장프로그래밍언어 윈도우기반리눅스환경 설치목록내용 Java 1.5 JDK Java COMM 2.0 Graphviz 호스트 PC 에서 JAVA 를이용한시리얼통신기능제공 호스트 PC 에서 JAVA 를이용한시리얼통신기능제공 make docs 에의해만들어지는파일을보여주는기능제공

73 설치프로그램목록 AVR Tools 설치목록 내 용 avr-binutils 어셈블러, 로더, 링커, 바이너리파일모음 avr-libc 크로스컴파일구축을위한라이브러리 avr-gcc 크로스컴파일용컴파일러 avi-insight GDB를위한사용자인터페이스패키지 TinyOS2.X 가설치된디렉터리 디렉터리내용 apps contrib support tos TinyOS 용기본프로그램폴더 ZigbeX 를위한예제폴더 컴파일, 자바프로그램들 다양한 TinyOS 컴포넌트와 TinyOS 인터페이스, 라이브러리등이포함된폴더

74 ZIGBEX 예제빌드및다운로드

75 순서 ZigbeX 예제빌드 BlinkTimer 예제 Programmer Tool 설치 AVR-Studio 4 Install AVR-ISP USB 드라이버설치 프로그램다운로드실습 p.75

76 ZigbeX 예제빌드 p.76

77 ZigbeX 예제빌드 - 1 BlinkTimer 예제를이용해서 Testing 바탕화면에를클릭하여 Cygwin 을시작 다음명령을실행 경로이동 기존의 build 폴더삭제 p.77

78 ZigbeX 예제빌드 - 2 Cygwin 에서 make zigbex 입력 빌드실행 파일생성 p.78

79 Programmer Tool 설치 p.79

80 AVR-Studio 4 Install - 1 CD\USB_ISP 폴더에있는 astudio4b623.exe 실행 Next 버튼을선택하여설치 p.80

81 AVR-Studio 4 Install - 2 License Agreement p.81

82 AVR-Studio 4 Install - 3 Destination Location p.82

83 AVR-Studio 4 Install - 4 USB 업그레이드 p.83

84 AVR-Studio 4 Install - 5 설치준비화면 설치중화면 설치완료화면 p.84

85 AVR-ISP USB 드라이버설치 p.85

86 AVR-ISP USB 드라이버설치 - I AVR-ISP 와 PC 연결하기 USB-ISP Button 설정 PC 와연결된 USB-ISP 의버튼을 SPI 쪽으로설정한다. UART : Asynchronous Serial Communication SPI : Program Download AVR-ISP Button 설정 PC 와연결된 AVR-ISP 의 버튼을 ISP 쪽으로설정한다. UART : Asynchronous Serial Communication ISP : Program Download p.86

87 AVR-ISP USB 드라이버설치 - II CD\USB_ISP\CDM 폴더를 PC 에복사 윈도우 새하드웨어검색 에서복사한폴더의위치로설정 p.87

88 프로그램다운로드실습 p.88

89 AVR-Studio 4 실행과 ISP 연결 AVR Studio 4 실행 바탕화면에를클릭하여 AVR-Studio 4 를시작 AVR Studio 에서 Tools -> Program AVR -> Connect 메뉴를선택하여 ISP 에접속한다. 각자의포트에맞추어서설정 연결버튼을누른후에업그레이드는취소를선택한다. p.89

90 AVRISP 선택및다운로드 Device 선택 ATmega 128 선택 Flash 창에서 Hex 파일선택 BlinkTimer 예제 BlinkTimer 예제에서컴파일한 main.hex 파일을연다. Program 버튼을클릭하여다운로드한다. 다운로드된모트의 Red LED 가점멸하는지확인한다. p.90

91 TINYOS

92 TinyOS 개요 (1) 세계적으로가장많이사용되는 USN 을위한운영체제 오픈소스개발환경 Hurry up and Sleep (Sleep as often as possible to save power) TinyOS 의특징 Component 객체개념의서비스블록단위로구성 NesC(Network Embedded System C) 언어사용 Task 를위해간단한 FIFO 스케줄링사용 Event/Command 기반의함수연결 Interfaces 지원 높은병행성과인터럽트위임 (no polling) p.92

93 TinyOS 개요 (2) Data Memory Model Static Memory Allocation No Heap(malloc) No Function Pointers Global Variables Available on a per-frame basis Local Variables Saved on the stack Declared within a method p.93

94 TinyOS 개요 (3) TinyOS Thread Model 2-Level Scheduling (Events and Tasks) Tasks Time flexible Longer background processing jobs Atomic with respect to other tasks(single threaded) Preempted by events Events Time critical Shorter duration (Hand off to task if need be) Do not confuse an event from the nesc event keyword p.94

95 TinyOS 개요 (4) Component Hierarchy Components are wired together by connecting users with providers Forms a hierarchy Commands Flow downwards Control returns to caller Events Flow upwards Control return to signaler Events can call Commands but not vice versa p.95

96 TinyOS 개요 (5) p.96

97 TinyOS 개요 (6) Scheduling p.97

98 TinyOS 개요 (7) 폴더구조 /opt/tinyos-2.x p.98

99 TinyOS 개요 (8) 폴더구조 interfaces: 구현된 Interface 를모아놓은곳 system : CPU 중심적컴포넌트와스케줄러 platform : TinyOS 를사용하는플랫폼을정의 types : TinyOS 메시지해더를정의 p.99

100 TinyOS 개요 (9) 빌드환경 제공된 CD 를이용하여환경구성 ncc: NesC 컴파일러 avr-gcc: ncc 컴파일결과파일 app.c 를컴파일 main.hex 생성 NesC 컴파일과정 p.100

101 TinyOS 개요 (10) 빌드환경 The make System From within the applications s directory make (re)install.<node id> <platform> <node id> is an interger between 0 and 255 <platform> may be zigbex make clean make docs Generates documentation p.101

102 TinyOS 개요 (11) Task: Event 가끝난후, FIFO 스케줄링에의해처리됨. p.102

103 TinyOS 개요 (12) Event 는 Interrupt 로부터시작된다. RF interrupt ADC interrupt Timer interrupt UART interrupt Interrupt 가발생되면, 그에대한처리함수가자동으로호출됨. 해당처리함수는상위컴포넌트에게 event 형식 type 의 interface 함수를사용하여전달한다. 즉, TinyOS 의모든동작은 interrupt 에의한 event 로시작된다. p.103

104 TinyOS 개요 (13) Group ID Makefile 에다음과같이정의하여사용한다 (default 0x7D) CFLAGS += -DDEFINED_TOS_AM_GROUP=0x22 Address AM_BROADCAST_ADDR(0xFFFF) 는 broadcast 를의미 TOS_NODE_ID make zigbex reinstall.# # 이 TOS_NODE_ID 을의미하는 mote ID 이다 p.104

105 NESC 구문이해

106 nesc(1) C 언어 가장보편적으로사용되는언어. 다른언어들에비해하드웨어제어가용이함 USN 과같은초소형프로그래밍에는적합하지않음 nesc Extended C Component 를기반으로하기때문에초소형프로그래밍가능 Configuration file : Component 간의연결을기술하는파일 Module file : 실제 Component 의동작구현을기술하는파일 p.106

107 nesc(2) Component 하나의기능을의미하는블록 Timer Component, RF Component, Light Component 하나의컴포넌트는 Configuration 파일과 Module 파일로구성됨 특별히취급되는 Component Main Component TinyOS 의시작코드가기술된컴포넌트로써모든예제프로그램은꼭 Main Component 를포함하고있어야한다. 최상위 Component 예제프로그램의이름을만들어지는컴포넌트로써, 예제의전반적인동작을제어하는컴포넌트이다. p.107

108 nesc(3) Interface 란? Component 사이의연결을위해존재하는함수들의모임을 interface 라고말한다. Interface 의선언 Uses 하부 Component 를사용할때, 하부 Component 의 interface 를 uses 한다고선언 Provide 상위 Component 에서자신의함수들을사용하도록 interface 를제공할때, interface 를 provide 한다고선언 p.108

109 nesc(4) Interface 의 Type Component 사이의연결을위해존재하는함수들의모임 Function Types: Command and Event Command : 상위 Component 에서하위 Component 에구현된함수를만들때사용되는 Type. Event: 하위 Component 에서상위 Component 에게정보나어떠한사실을알려주기위한함수를만들때사용되는 Type. interface Timer { command result_t start (char type, uint32_t interval); command result_t stop (); event result_t fired (); } p.109

110 nesc(5) Wiring between Interfaces Interface 1 = Interface 2 Interface 1 의구현은 Interface 2 에있다. Interface1 -> Interface2 Interface1는 Interface 2에링크된다. 상위 Component -> 하위 Component p.110

111 nesc(6) Components: 구성 Module C 로구현 인터페이스동작기술 이벤트핸들러작성 Configuration Component 선언 (select) Component 간의연결 (wire) 두개의 provides 를 uses 해서새로운 provides 를제공한다. Interfaces provides interface Uses interface p.111

112 nesc(7) modules: module C1 { uses interface red_triangle; } implementation {... } module C2 { provides interface red_triangle; uses { interface green_triangle; interface rectangle; } } implementation {... } C2 module C3 { provides interface green_triangle; provides interface rectangle; } implementation {... } p.112

113 기본예제를이용한실습

114 Timer 를이용한 LED 제어 p.114

115 Timer 를이용한 LED 제어개요 Timer 컴포넌트를이용하여일정시간마다 LED0( 적색 ) 을 Toggle 한다. 예제위치 \opt\tinyos-2.x\contrib\zigbex\blinktimer BlinkTimer -Configuration 작성법 Main Timer LED - Module 작성법 - Timer 설정방법 - LED 제어방법 p.115

116 BlinkTimer configuration 파일설명 BlinkTimer.nc configuration BlinkTimer {} implementation { // 사용될컴포넌트선언 components MainC, BlinkTimerM, LedsC, new TimerMilliC(); } // 인터페이스연결 BlinkTimerM.Boot -> MainC; BlinkTimerM.Leds -> LedsC; BlinkTimerM.Timer->TimerMilliC; p.116

117 BlinkTimer Module 파일설명 BlinkTimerM.nc module BlinkTimerM { // 사용될인터페이스선언 uses { interface Boot; interface Timer<TMilli>; interface Leds; } } // 구현부분 ( 실질적인프로그램 ) implementation { // 프로그램의시작부분 event void Boot.booted() { // Timer 의동작과시간을설정 call Timer.startPeriodic(1000); } // 설정한시간이되었을때의동작을기술 event void Timer.fired() { // LED 의동작을설정 call Leds.led0Toggle(); // red led toggle } } p.117

118 Timer 를이용한 LED 제어구조 BlinkTimer 의구조 - I (MainC.nc) p.118

119 MainC.nc - Component 컴포넌트 : MainC, BlinkTimerM, LedsC, new TimerMilliC() /opt/tinyos-2.x/tos/system/mainc.nc configuration MainC { // 상위컴포넌트에 Boot 라는이름의컴포넌트를제공. provides interface Boot; uses interface Init as SoftwareInit; } implementation { components PlatformC, RealMainP, TinySchedulerC; } RealMainP.Scheduler -> TinySchedulerC; RealMainP.PlatformInit -> PlatformC; // RealMainP.SoftwareInit = SoftwareInit ; SoftwareInit = RealMainP.SoftwareInit; Boot = RealMainP; p.119

120 MainC.nc - Wiring 하부컴포넌트 : PlatformC, RealMainP, TinySchedulerC p.120

121 RealMainP <-> BlinkTimerM.nc module RealMainP { provides interface Boot; uses interface Scheduler; uses interface Init as PlatformInit; uses interface Init as SoftwareInit; } implementation { int main() attribute ((C, spontaneous)) { //Init Schedule Queue call Scheduler.init(); call PlatformInit.init(); //Init CPU s Pins while (call Scheduler.runNextTask()); //Init Sofrware Components call SoftwareInit.init(); while (call Scheduler.runNextTask()); // Event Signal to Application signal Boot.booted(); call Scheduler.taskLoop(); } } module BlinkTimerM { uses { interface Boot; interface Timer<TMilli>; interface Leds; } } implementation { event void Boot.booted() { call Timer.startPeriodic(1000); } event void Timer.fired() { call Leds.led0Toggle(); //red led toggle } } as: Interface 나 component 의이름을변경할때사용 p.121

122 Boot Interface Boot interface \opt\tinyos-2.x\tos\interfaces\boot.nc interface Boot { } event void booted(); p.122

123 Timer 를이용한 LED 제어구조 BlinkTimer 의구조 - II (LedsC.nc) p.123

124 LedsC.nc - Component 컴포넌트 : MainC, BlinkTimerM, LedsC, new TimerMilliC() /opt/tinyos-2.x/tos/system/ledsc.nc configuration LedsC { // 상위컴포넌트에 Leds 라는이름의컴포넌트를제공. provides interface Leds; } implementation { components LedsP, PlatformLedsC; } Leds = LedsP; LedsP.Init <- PlatformLedsC.Init; LedsP.Led0 -> PlatformLedsC.Led0; // LedsP.nc 에서사용하는 Led0 에대한실제구현은 PlatformLedsC.nc 파일 // 에선언되어있다. LedsP.Led1 -> PlatformLedsC.Led1; LedsP.Led2 -> PlatformLedsC.Led2; p.124

125 LedsC.nc - Wiring 하부컴포넌트 : LedsP, PlatformLedsC p.125

126 module LedsP \opt\tinyos-2.x\tos\system\ledsp.nc module LedsP { // 상위컴포넌트에 Init, Leds 라는 // 이름의컴포넌트제공. provides { interface Init; interface Leds; } uses { interface GeneralIO as Led0; interface GeneralIO as Led1; interface GeneralIO as Led2; } } implementation { // Led port Init Function command error_t Init.init() { call Led0.makeOutput(); call Led0.set(); return SUCCESS; } async command void Leds.led0On() { call Led0.clr(); DBGLED(0); } async command void Leds.led0Off() { call Led0.set(); DBGLED(0); } async command void Leds.led0Toggle() { call Led0.toggle(); DBGLED(0); } async command uint8_t Leds.get() { } async command uint8_t Leds.set() { } } p.126

127 Leds Interface Leds interface \opt\tinyos-2.x\tos\interfaces\leds.nc interface Leds { async command void led0on(); async command void led0off(); async command void led0toggle(); async command void led1on(); async command void led1off(); async command void led1toggle(); async command void led2on(); async command void led2off(); async command void led2toggle(); async command uint8_t get(); async command void set(uint8_t val); } p.127

128 Timer 를이용한 LED 제어구조 BlinkTimer 의구조 - III (TimerMilliC.nc) p.128

129 BlinkTimer 의구조 III 컴포넌트 : MainC, BlinkTimerM, LedsC, new TimerMilliC() /opt/tinyos-2.x/tos/system/timermillic.nc #include Timer.h // /opt/tinyos-2.x/tos/system/timermillic.nc generic configuration TimerMilliC() { } provides interface Timer<TMilli>; implementation { } components TimerMilliP; Timer = TimerMilliP.TimerMilli[unique(UQ_TIMER_MILLI)]; generic : 여러컴포넌트들로부터동시에사용되는컴포넌트들은 generic 으로선언되며, 사용시 new 라는예약어를통해선언. p.129

130 TimerMilliC.nc - Wiring 하부컴포넌트 : TimerMilliP p.130

131 TimerMilliP.nc \opt\tinyos-2.x\tos\system\timermillip.nc configuration TimerMilliP { provides interface Timer<TMilli> as TimerMilli[uint8_t id]; } implementation { components HilTimerMilliC, MainC; MainC.SoftwareInit -> HilTimerMilliC; // 실질적인구현코드는 HilTimerMilliC 컴포넌트에구현. TimerMilli = HilTimerMilliC; } p.131

132 Timer Interface Timer interface \opt\tinyos-2.x\tos\lib\timer\timer.nc interface Timer<precision_tag> { command void startperiodic(uint32_t dt); // 주기적인 event 발생 command void startoneshot(uint32_t dt); // 한번만 event 발생 command void stop(); event void fired(); command bool isrunning(); command bool isoneshot(); command void startperiodicat(uint32_t t0, uint32_t dt); command void startoneshotat(uint32_t t0, uint32_t dt); command uint32_t getnow(); command uint32_t gett0(); command uint32_t getdt(); } p.132

133 3 개의 Timer 를이용한 LED 제어 p.133

134 TinyOS 실습 [ 최상위프로그램제작 ] 예제만들기 내용 타이머 3 개를사용하여 3 개의 LED 를각각제어할수있도록수정하여라. 폴더및파일만들기 \opt\tinyos-2.x\contrib\zigbex 에 Three_BlinkTimer 폴더생성 해당폴더에서 3 가지파일생성 Three_BlinkTimerC.nc : 최상위컴포넌트의 Configuration 파일 Three_BlinkTimerM.nc : 최상위컴포넌트의 Module 파일 Makefile : 최상위컴포넌트이름과컴파일패스설정 p.134

135 3 개의 Timer 를이용한 LED 제어개요 3 개의 Timer 를이용하여각각일정시간마다정해진 LED 를 Toggle 한다. 예제위치 : \opt\tinyos-2.x\contrib\zigbex\three_blinktimer Three_BlinkTimer - Configuration 작성법 Main LED - Module 작성법 Timer 1 Timer 2 Timer 3-3 개의 Timer 사용방법 - LED 제어방법 p.135

136 Three_BlinkTimer configuration 파일설명 Three_BlinkTimerC.nc configuration Three_BlinkTimerC{} implementation { // 사용될컴포넌트선언 components MainC, Three_BlinkTimerM, LedsC, new TimerMilliC() as TimerC1, new TimerMilliC() as TimerC2, new TimerMilliC() as TimerC3 ; // 인터페이스연결 Three_BlinkTimerM.Boot -> MainC; Three_BlinkTimerM.Leds -> LedsC; Three_BlinkTimerM.Timer1->TimerC1; Three_BlinkTimerM.Timer2->TimerC2; Three_BlinkTimerM.Timer3->TimerC3; } p.136

137 Three_BlinkTimer Module 파일설명 Three_BlinkTimerM.nc module Three_BlinkTimerM { // 사용될인터페이스선언 uses { interface Boot; interface Timer<TMilli> as Timer1; interface Timer<TMilli> as Timer2; interface Timer<TMilli> as Timer3; interface Leds; } } // 구현부분 ( 실질적인프로그램 ) implementation { // Timer 의동작과시간설정 Task 함수선언 task void runthreetimer(); // 프로그램의시작부분 event void Boot.booted() { post runthreetimer(); } // Timer 의동작과시간설정 Task 함수 task void runthreetimer(){ call Timer1.startPeriodic(1000); call Timer2.startPeriodic(2000); call Timer3.startPeriodic(3000); } // 설정한시간이되었을때의동작을기술 event void Timer1.fired() { // LED0 의동작을설정 call Leds.led0Toggle(); // red led toggle } event void Timer2.fired() { // LED1 의동작을설정 call Leds.led1Toggle(); // green led toggle } event void Timer3.fired() { // LED2 의동작을설정 call Leds.led2Toggle(); // yellow led toggle } } p.137

138 WSN 프로그램밍실습

139 ZIGBEX 와 PC 간 UART 통신 p.139

140 순서 Oscilloscope 예제를이용한조도값측정 ZigbeX 의조도센서 Oscilloscop 개요 프로그램설명 Oscilloscop 예제실습 ZigbeX 예제빌드 프로그램다운로드 시리얼모니터링 TOS Message p.140

141 OSCILLOSCOPE 예제를이용하여조도값측정 p.141

142 ZigbeX 의조도센서 조도센서 CDS ZigbeX 에장치되어있는조도센서 CDS 는 INT0 과 ADC0 사이에연결 CDS : 주변의광량에따라저항값이변함 INT0 에서부터들어오는 3V 전압이 CDS 의저항값에따라 ADC0 에들어가는입력전압이변동된다 p.142

143 Oscilloscope 예제 Oscilloscope 예제개요 Oscilloscope 예제는 256ms 마다조도센서로부터측정값을받은후, 그내용을시리얼케이블을통해 PC 로전달하는프로그램 Oscilloscope 예제프로그램의위치 /opt/tinyos-2.x/contrib/zigbex/oscillosco pe OscilloscopeAppC.nc OscilloscopeC.nc Oscilloscope.h p.143

144 OscilloscopeAppC.nc OscilloscopeAppC.nc Osilloscope 예제에서사용되는컴포넌트들 PC 와의시리얼통신을위한 SerialActiveMessageC 컴포넌트 조도센서값을얻기위한 PhotoSensorC 컴포넌트 주기적인알람과동작여부체크를위한 TimerMilliC, LedsC 컴포넌트 configuration OscilloscopeAppC { } implementation { components OscilloscopeC, MainC, LedsC, new TimerMilliC(), new PhotoSensorC() as Sensor, SerialActiveMessageC as Comm; OscilloscopeC.Boot -> MainC; OscilloscopeC.SerialControl -> Comm; OscilloscopeC.AMSend -> Comm.AMSend[AM_OSCILLOSCOPE]; OscilloscopeC.Receive -> Comm.Receive[AM_OSCILLOSCOPE]; OscilloscopeC.Timer -> TimerMilliC; OscilloscopeC.Read -> Sensor; OscilloscopeC.Leds -> LedsC; } p.144

145 OscilloscopeC.nc - I #include Timer.h #include Oscilloscope.h module OscilloscopeC { uses { // 사용할여러인터페이스선언 } } implementation { // 사용할여러변수및함수들선언 event void Boot.booted() { // 변수초기화 if (call SerialControl.start()!= SUCCESS) report_problem(); } p.145

146 OscilloscopeC.nc - II void starttimer() { call Timer.startPeriodic(local.interval); reading = 0; } event void SerialControl.startDone(error_t error) { starttimer(); } event void SerilControl.stopDone(error_t error){ } event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) { } event void Timer.fired() { } event void AMSend.sendDone(message_t* msg, error_t error) { } event void Read.readDone(error_t result, uint16_t data) { } p.146

147 OscilloscopeC.nc - III p.147

148 OSCILLOSCOPE 예제실습 p.148

149 시리얼통신모니터링 - I AVR-ISP 를 UART 모드로변경 Serial Forwarder 실행 ( 기존의 Cygwin 창이용 ) 경로이동명령어로실행파일이있는곳으로이동 cd /opt/tinyos-2.x/contrib/zigbex/oscilloscope/java Serial Forwarder 실행명령어 ( 대소문자주의 ) java net.tinyos.sf.serialforwarder -comm p.149

150 시리얼통신모니터링 - II 자바응용프로그램실행 ( 새로운 Cygwin 창생성 ) 경로이동명령어로실행파일이있는곳으로이동 cd /opt/tinyos-2.x/contrib/zigbex/oscilloscope/java 자바응용프로그램실행명령어 make./run p.150

151 TOS Message 구조 - I TOS_Message Sync byte(0x7e): TOS Message 의시작과끝을알림 0 항상 0x7E 1 0x43-0x41 에대한응답패킷 0x44 - ack 가필요한사용자패킷 0x45 - ack 가필요없는사용자패킷 0xFF - 형식이없는패킷 2 Dispatch ID 로항상 0x00 3 n-1 Payload Data n 항상 0x7E p.151

152 TOS Message 의구조 -II Oscilloscope.h typedef nx_struct oscilloscope { nx_uint16_t version; /* Version of the interval. */ nx_uint16_t interval; /* Samping period. */ nx_uint16_t id; /* Mote id of sending mote. */ nx_uint16_t count; /* The readings are samples count * NREADINGS onwards */ nx_uint16_t readings[nreadings]; } oscilloscope_t; p.152

153 Sync Byte 의문제와해결방안 Payload Data 에 Sync Byte 가포함된경우 탈출문자 (0x7E) 를지정하여 Sync Byte 가아님을표시 탈출문자가 Payload Data 에포함된경우 0x7D 다음데이터를 0x20 과 exclusive or 해서표시 0x7E -> 0x7D 0x5E 0x7D -> 0x7D 0x5D Point-to-Point Protocol - RFC1662 참조 Example 보내고싶은데이터 : FF FF A xx 7E 7D xx 실제전송되는데이터 : 7E FF FF A xx 7D 5E 7D 5D xx CRC1 CRC2 7E p.153

154 TOS Message 확인 - I Java Listen 프로그램실행환경변수설정명령어 export 프로그램실행명령어 ( 대소문자주의 ) java net.tinyos.tools.listen Sync Byte 와 Packet Type 필드삭제 0x7D 0x5E 와 0x7D 0x5D 의값을 0x7E 및 0x7D 로치환 p.154

155 TOS Message 확인 - II 시리얼파싱프로그램으로확인가능 CD\Program\SerialTest.exe 실제시리얼로들어오는데이터를출력한다. p.155

156 RAW Data Packet 실행결과 (TinyOS 에서전송 ) 7E FF FF C A 05 0D 05 0E C 05 0A A F 45 7E 1 Sync Byte 0x7E ( 패킷의시작 ) 2 Packet Type 0x45 3 DispatchID 0x00 ( 시리얼은 0x00) 4~N Payload Data 0xFFFF (Dest) 0x0000 (Src) 0x1C (Length) 0x00 (Group) 0x93 (Type) 0x00 ~ 0x22 (Data) CRC16(2Byte) 0x9F, 0x45 Sync Byte 0x7E ( 패킷의끝 ) p.156

157 ZIGBEX 와 ZIGBEX 간의 RF 통신 p.157

158 순서 OscilloscopeUltraredRF 예제를이용한적외선측정및 RF 통신실습 OscilloscopUltraredRF 개요 프로그램설명 OscilloscopUltraredRF 예제실습 ZigbeX 예제빌드 프로그램다운로드 시리얼모니터링 p.158

159 OSCILLOSCOPEULTRAREDRF 예제를이용하여적외선측정및 RF 통신실습 p.159

160 OscilloscopeUltraredRF 개요 두개의 ZigbeX 모트를이용하여 RF 통신을실습한다. ZigbeX 1 번모트에서 256ms 마다적외서센싱값을측정해서 RF 송신을하면 ZigbeX 0 번모트에서수신해서시리얼통신을이용해서 PC 에보내준다. ZigbeX 0 : BaseStation 을다운로드 ZigbeX 1 : OscilloscopeUltraredRF 를다운로드 주의 실습시에다른노드의패킷을받지않기위해서 Group ID 를수정 BaseStation 과 OscilloscopeUltraredRF 의 Makefile 을열어서아래의내용을추가» CFLAGS += -DDEFINED_TOS_AM_GROUP=0xXX p.160

161 OscilloscopeUltraredRF 개요 BaseStation 예제프로그램의위치 /opt/tinyos-2.x/contrib/zigbex/basestatio n BaseStationC.nc BaseStationP.nc OscilloscopeUltraredRF 예제프로그램의위치 /opt/tinyos-2.x/contrib/zigbex/oscillosco peultraredrf OscilloscopeAppC.nc OscilloscopeC.nc Oscilloscope.h p.161

162 OscilloscopeAppC.nc OscilloscopeAppC.nc OsilloscopeUltraredRF 예제에서사용되는컴포넌트들 모트간의 RF 통신을위한 ActiveMessageC, AMSenderC, AMReceiverC 컴포넌트 적외선센서값을얻기위한 UltraredSensor 컴포넌트 주기적인알람과동작여부체크를위한 TimerMilliC, LedsC 컴포넌트 configuration OscilloscopeAppC { } implementation { components OscilloscopeC, MainC, LedsC, new TimerMilliC(), new UltraredSensorC() as Sensor, ActiveMessageC, new AMSenderC(AM_OSCILLOSCOPE), new AMReceiverC(AM_OSCILLOSCOPE); } OscilloscopeC.Boot -> MainC; OscilloscopeC.RadioControl -> ActiveMessageC; OscilloscopeC.AMSend -> AMSenderC; OscilloscopeC.Receive -> AMReceiverC; OscilloscopeC.Timer -> TimerMilliC; OscilloscopeC.Read -> Sensor; OscilloscopeC.Leds -> LedsC; p.162

163 OscilloscopeC.nc - I #include Timer.h #include Oscilloscope.h module OscilloscopeC { uses { // 사용할여러인터페이스선언 } } implementation { // 사용할여러변수및함수들선언 event void Boot.booted() { // 변수초기화 if (call RadioControl.start()!= SUCCESS) report_problem(); } p.163

164 OscilloscopeC.nc - II void starttimer() { call Timer.startPeriodic(local.interval); reading = 0; } event void RadioControl.startDone(error_t error) { starttimer(); } event void RadioControl.stopDone(error_t error){ } event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len) { } event void Timer.fired() { } event void AMSend.sendDone(message_t* msg, error_t error) { } event void Read.readDone(error_t result, uint16_t data) { } p.164

165 OscilloscopeC.nc - III p.165

166 OSCILLOSCOPEULTRAREDRF 예제실습 p.166

167 시리얼통신모니터링 - I AVR-ISP 를 UART 모드로변경 Serial Forwarder 실행 ( 기존의 Cygwin 창이용 ) 경로이동명령어로실행파일이있는곳으로이동 cd /opt/tinyos-2.x/contrib/zigbex/oscilloscopeultraredrf/java Serial Forwarder 실행명령어 ( 대소문자주의 ) java net.tinyos.sf.serialforwarder -comm p.167

168 시리얼통신모니터링 - II 자바응용프로그램실행 ( 새로운 Cygwin 창생성 ) 경로이동명령어로실행파일이있는곳으로이동 cd /opt/tinyos-2.x/contrib/zigbex/oscilloscopeultraredrf/java 자바응용프로그램실행명령어 make./run p.168

169 End [Q & A] p.169