Presentation is loading. Please wait.

Presentation is loading. Please wait.

임베디드 프로그래밍 Lecture #07 2017. 11. 14.

Similar presentations


Presentation on theme: "임베디드 프로그래밍 Lecture #07 2017. 11. 14."— Presentation transcript:

1 임베디드 프로그래밍 Lecture #07

2 목 차 명령 기반(CLI) 장치 제어 구현 관제점(Control Point) 인터페이스 구현 관제점 기반 장치 클래스 구현
관제점 관리자 클래스 구현 CLI Console 구현

3 관제점(Control Point) (1) 관제점(CP: Control Point)
IoT 장치를 구성하는 센서(Sensor)와 액추에이터(Actuator)는 다양한 종류가 존재하며 인터페이스 방식도 다양함 센서와 엑추에이터 장치를 일관된 방법으로 제어할 수 있는 추상화된 인터페이스가 필요 기본 추상 인터페이스: 식별 정보 – 내부 식별 정보(정수) / 사용자 인식 식별 정보(문자열) 상태값 – 장치의 상태를 하나의 상태값으로 표시 상태값 접근(access) – Get(Input)/Set(Output) 상태값 변화 알림(push) 관제점(ControlPoint) : 상기의 추상 인터페이스를 제공하는 객체

4 관제점(Control Point) (2) 관제점(CP: Control Point) 종류 상태값에 따른 분류
디지털(Digital) 관제점 – 2가지 상태(0/1) 아날로그(Analog) 관제점 – 다양한 상태값을 가짐 입출력여부에 따른 분류 입력(Input) 관제점 - 읽기만 가능 출력(Output) 관제점 - 쓰기도 가능 관제점 타입(CP Type) DI(Digital Input) / DO(Digital Output) / AI(Analog Input) / AO(Analog Output)

5 관제점(Control Point) (3) 관제점 구현의 제약 사항(specification) 내부 관제점 식별자
관제점 생성 시에 자동 할당 외부에서 변경 불가능 사용자 인식 관제점 식별자 필요에 따라 외부에서 변경 가능 상태값 정수 타입 지정 디지털 관제점 – 0/1, 아날로그 관제점 – 주로 8~12 bit 정수 Thread Safe – 상호배제(Mutual Exclusion) 보장

6 관제점(Control Point) (4) 관제점 구현의 제약 사항 (specification)
관제점의 상태 변화 알림(Pushing) 출력 관제점 외부의 관제점 상태값 설정 요청에 의해 값이 변경될 때 현재의 상태값이 이전 상태값과 다를 때 입력 관제점 입력 변화에 의한 이벤트(Event) 발생 – DI CP 이벤트를 지원하지 않는 경우에는 주기적인 폴링(Polling) – AI CP 관제점의 정보를 요약하여 출력하는 인터페이스 제공

7 관제점(Control Point) (5) 관제점 구현의 제약 사항 (specification)
출력 관제점은 상태값에 대한 읽기/쓰기를 모두 지원 입력 관제점에 “상태값 쓰기” 인터페이스 추가

8 관제점 컨테이너(CP Container)
관제점 생성 및 관리 인터페이스를 제공하는 객체 관제점 일괄 생성 및 목록 유지 관제점 접근 인터페이스 관제점 목록 접근 인터페이스 관제점 일괄 종료(닫기) 관제점 컨테이너는 유일한 Instance가 존재하여야 한다 동일한 관제점을 여러 개 생성할 수 없으므로 관제점 컨테이너의 인스턴스도 여 러 개 생성될 수 없다

9 명령어 처리기(Command Interpreter)(1)
관제점은 객체로 존재하기 때문에 외부에서 접근하기에는 제약적 관제점에 대한 외부의 일관된 제어 인터페이스가 필요 명령어 처리기(Command Interpreter) 관제점에 대한 제어 동작을 명령어(command)로 정의 명령어 처리를 통해 관제점 제어 명령어 추가를 통해 기능 확장이 용이 명령어가 Text 형식 전달  다양한 사용자 인터페이스 또는 외부 통신 프로토콜 과의 접목이 용이

10 명령어 처리기(Command Interpreter)(2)
명령어 처리기-명령어 help – 현재 지원하는 명령어와 간단한 설명 출력 list – 관제점 목록 출력 set – 관제점의 상태값 설정 get – 관제점의 상태값 읽기 rename – 관제점의 사용자 인식 식별자 변경

11 콘솔(Console) 콘솔(Console)
CLI(Command Line Interface) 방식으로 사용자 인터페이스를 제공하는 객체 또는 프로그램 일반적으로 명령어 입력을 위한 prompt를 화면에 출력 사전에 정의된 명령어를 입력 받아 자체적으로 처리하거나 명령어 처 리기 객체를 통해 처리하고 결과를 화면에 출력 인터페이스 장치 또는 통신 방식에 따라 분류 Terminal Console – 터미널 장치로 사용 UART Console – UART 통신 채널 사용 Remote Console – 인터넷 기반의 통신 채널 사용, 다양한 통신 프로토콜 사용 가 능

12 명령 기반 장치 제어 프로그램 명령 기반 장치 제어 프로그램 터미널 장치에서 명령어를 사용하여 IoT 장치를 제어하는 프로그램
객체 구성: CP Container Command Processor Console CP #1 CP #2 CP #n • • •

13 테스트 하드웨어 구성(1) IoT 장치 구성 컨트롤러 : 라즈베리파이 + 아두이노 센서 액추에이터 온도/습도 센서(SHT11)
조도 센서(CDR Sensor) 먼지 센서 움직임 감지 센서(PIR Sensor) 버튼 2개 액추에이터 LED 3개 환풍팬(Vantilation Fan)

14 테스트 하드웨어 구성(2) IoT 장치 회로 구성 팬 맵 장치 핀 RaspberryPi Arduino 조도 센서 S
Analog #0 먼지 센서 VOUT Analog #1 LED GPIO18 움직임 센서 GPIO25 버튼 #1 S1 GPIO23 버튼 #2 S2 GPIO24 LED #1 GPIO17 LED #2 GPIO27 LED #3 S3 GPIO22 FAN IN1 GPIO5 IN2 GPIO6 UART0_RX 18(TX1) UART0_TX 19(RX1) 온습도센서 Data D2 SCK D3 IoT 장치 회로 구성 팬 맵

15 테스트 하드웨어 구성(3) IoT 장치 회로 구성

16 테스트 하드웨어 구성(4) IoT 장치 회로 구성

17 테스트 하드웨어 구성(5) IoT 장치 회로 구성

18 테스트 하드웨어 구성(6) IoT 장치 회로 구성

19 클래스 구성 (1) Input Control Point Classes Class Observable Interface
GPIOPinControlPoint AnalogInputPoint ExtendedInput DustSensor

20 GPIOPinOutputControlPoint
클래스 구성 (2) IO Control Point Classes Observable ControlPoint CommandExecutable OutputControlPoint UARTCommPoint GPIOPinOutputControlPoint VantilationFan

21 ControlPointContainer
클래스 구성 (3) Other Classes Observer ControlPointContainer CommandInterpreter CLIConsole

22 아두이노 제어 프로그래밍 아두이노 프로그램 UART Comm Test 실습의 아두이노 프로그램 적용
소스: mclab/jiot2/blob/master/Arduino/ReadSHT1xValues.ino

23 장치 제어 콘솔 프로그램 (1) 라즈베리파이 프로그래밍 - 테스트 프로젝트 생성
NetBeans IDE에서 새로운 프로젝트 생성 프로젝트명: jiot07-IoTCliApp Main Class: jiot07.iotcliapp.IoTCliApp 프로젝트 속성 설정에서 라이브러리 추가 프로젝트 속성에서 dio.jar 라이브러리 추가

24 장치 제어 콘솔 프로그램 (2) 라즈베리파이 프로그래밍 기존 장치 드라이버 패키지 추가
“jiot.raspi” 자바 패키지 생성 기존 장치 드라이버 패키지를 추가 i2c_dev i2c_dev/drivers spi_dev spi_dev/drivers uart_dev uart_dev/drivers

25 장치 제어 콘솔 프로그램 (3) 라즈베리파이 프로그래밍 ControlPoint 클래스 및 상속 클래스 구현
“jiot.raspi.thing” 자바 패키지 생성 클래스 구현 ControlPoint.java OutputControlPoint.java GPIOPinControlPoint.java GPIOPinOutputControlPoint.java AnalogInputPoint.java ExtendedInput.java CommandExecutable.java UARTCommPoint.java ControlPointComtainer.java

26 장치 제어 콘솔 프로그램 (4) 라즈베리파이 프로그래밍 확장된 ControlPoint 클래스 구현
“jiot.raspi.ext_dev” 자바 패키지 생성 클래스 구현 DustSensor.java VantilationFan.java

27 장치 제어 콘솔 프로그램 (5) 라즈베리파이 프로그래밍 CLI 관련 클래스 구현
“jiot.raspi.cli” 자바 패키지 생성 클래스 구현 CommandInterpreter.java CLIConsole.java

28 장치 제어 콘솔 프로그램 (6) 라즈베리파이 프로그래밍 메인 테스트 클래스 구현
“jiot07.iotcliapp.IotCliApp” 클래스 구현 소스: IotCliApp/src/jiot07/iotcliapp/IotCliApp.java

29 장치 제어 콘솔 프로그램 (7) 라즈베리파이 프로그래밍 - 설정 파일 추가 및 수정
“lib” 디렉토리에 장치 레지스트리 파일 및 보안 정책 파일 추가 build.xml 파일 수정 Jiot06-IoTCliApp

30 장치 제어 콘솔 프로그램 (8) 라즈베리파이 프로그래밍 – 장치 레지스트리 파일 수정
# RPi rev2 P1 header pins 4 = deviceType: gpio.GPIOPin, pinNumber:4, name:GPIO4, mode:4, direction:1, predefined:true 5 = deviceType: gpio.GPIOPin, pinNumber:5, name:GPIO5, mode:4, direction:1, predefined:true 6 = deviceType: gpio.GPIOPin, pinNumber:6, name:GPIO6, mode:4, direction:1, predefined:true 7 = deviceType: gpio.GPIOPin, pinNumber:7, name:GPIO7, mode:4, direction:1, predefined:true 8 = deviceType: gpio.GPIOPin, pinNumber:8, name:GPIO8, mode:4, direction:1, predefined:true 12 = deviceType: gpio.GPIOPin, pinNumber:12, name:GPIO12, mode:4, direction:1, predefined:true 13 = deviceType: gpio.GPIOPin, pinNumber:13, name:GPIO13, mode:4, direction:1, predefined:true 17 = deviceType: gpio.GPIOPin, pinNumber:17, name:GPIO17, mode:4, direction:1, predefined:true 18 = deviceType: gpio.GPIOPin, pinNumber:18, name:GPIO18, mode:4, direction:1, predefined:true 20 = deviceType: gpio.GPIOPin, pinNumber:20, name:GPIO20, mode:1, direction:0, trigger:3, predefined:true 21 = deviceType: gpio.GPIOPin, pinNumber:21, name:GPIO21, mode:1, direction:0, trigger:3, predefined:true 22 = deviceType: gpio.GPIOPin, pinNumber:22, name:GPIO22, mode:4, direction:1, predefined:true 23 = deviceType: gpio.GPIOPin, pinNumber:23, name:GPIO23, mode:1, direction:0, trigger:3, predefined:true 24 = deviceType: gpio.GPIOPin, pinNumber:24, name:GPIO24, mode:1, direction:0, trigger:3, predefined:true 25 = deviceType: gpio.GPIOPin, pinNumber:25, name:GPIO25, mode:1, direction:0, trigger:3, predefined:true 26 = deviceType: gpio.GPIOPin, pinNumber:26, name:GPIO26, mode:4, direction:1, predefined:true 27 = deviceType: gpio.GPIOPin, pinNumber:27, name:GPIO27, mode:4, direction:1, predefined:true

31 장치 제어 콘솔 프로그램 (9) 프로젝트 속성 설정 수정 원격 실행 Sources / Run 속성 수정
원격 실행을 통해 라즈베리파이로 배포 NetBeans 출력 화면에서는 키보드 입력을 지원하지 않으므로 테스트 할 수 없음 원격 접속하여 실행

32 장치 제어 콘솔 프로그램 (10) 원격 접속 실행 원격 접속을 통해 터미널 화면에서 실행 라즈베리파이로 ssh 접속
바이너리 배포 디렉토리로 이동 $ cd ~/NetBeansProjects/jiot07-IotCliApp/dist java 명령을 이용하여 실행 $ /home/pi/jiot/jre/bin/java -Djdk.dio.registry=lib/dio.properties -Djava.security.policy=lib/java.policy -jar jiot07-IotCliApp.jar


Download ppt "임베디드 프로그래밍 Lecture #07 2017. 11. 14."

Similar presentations


Ads by Google