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

Slides:



Advertisements
Similar presentations
Progress Report YoonMo Yeon
Advertisements

Format String Attack! 포맷 스트링 공격 경일대학교 사이버보안학과 학년 남주호.
컴퓨터와 인터넷.
목 차 C# 언어 특징 .NET 프레임워크 C# 콘솔 프로그램 C# 윈도우 프로그램 실습 프로그래밍세미나 2.
                                  9장 컴퓨터 기반 데이터 수집의 기초.
Chapter 16 : Struts 프레임워크 2. chapter 16 : Struts 프레임워크 2.
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
임베디드 프로그래밍 Lecture #
임베디드 프로그래밍 Lecture #
Image & Video processing
IoT(사물인터넷) 보안 2016년 2학기 2. 라즈베리파이 준비.
Power Java 제3장 이클립스 사용하기.
1. Windows Server 2003의 역사 개인용 Windows의 발전 과정
아두이노 기반 펌웨어 개발 FUTURE INNOVATOR 강사: 김 영 준 ㈜헬로앱스
임베디드 프로그래밍 Lecture #
임베디드 프로그래밍 Lecture #
Social Engineer Toolkit
나민영 서경대학교 컴퓨터공학과 CGVR Lab 같이만들어보자 5주차 OpenCV 설정 및 기초.
UNIT 06 JTAG Debugger 로봇 SW 교육원 조용수.
8.1 인터페이스 개요와 인터페이스 정의 8.2 인터페이스의 사용 8.3 인터페이스의 상속 8.4 인터페이스 참조
Pincom Study team ARDUINO of IOT Members : 이학성, 김도건.
독립형 모션제어기 사양 - Catalog (optional) XMC-PO04-MOD
CHAPTER 02 OpenCV 개요 PART 01 영상 처리 개요 및 OpenCV 소개.
Root Filesystem Porting
FTP 프로그램 채계화 박재은 박수민.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
Root Filesystem Porting
DK-128 ADC 실습 아이티즌 기술연구소
                              데이터베이스 프로그래밍 (소프트웨어 개발 트랙)                               퍼스널 오라클 9i 인스톨.
모바일 자바 프로그래밍 JDBC / WAP Ps lab 오민경.
소프트웨어 분석과 설계 Struts2 & JBOSS 설치하기
WinCE Device Driver 실습 #3
WinCE Device Driver 실습 #2
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
ATmega128 FND 실습 휴먼네트웍스 기술연구소
10장. 예외처리.
[INA470] Java Programming Youn-Hee Han
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
1차 프로젝트 발표 GAME ENGINE 게임 공학과 이성진.
리눅스 시스템 & 커널 기초 P.46 – P.53 이름: nsh009 학번: 112 1/20.
Device Driver 임베디드 시스템 I.
임베디드 프로그래밍 Lecture #
HTTP 프로토콜의 요청과 응답 동작을 이해한다. 서블릿 및 JSP 를 알아보고 역할을 이해한다.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
USN(Ubiquitous Sensor Network)
윈도우 컨트롤.
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
웹디자인
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
AUTODESK AUTOCAD ELECTRICAL 전기제어 2D 설계 소프트웨어 표준기반 설계 생산성 도구 구조도 설계
UNIT 25 SPI 로봇 SW 교육원 조용수.
PMIS 서버 설정 환경설정 작성자 : 배경환.
학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성. 학습목표 처음 만드는 비주얼 베이직 프로그램 프로그램 실행과 실행 파일 생성.
안드로이드 앱 개발과정 Step1. 기초과정 강사 : 정 훈 희.
DK-128 직렬통신 실습 아이티즌 기술연구소
AT MEGA 128 기초와 응용 I 기본적인 구조.
.Net Web Application 2007 컴퓨터공학실험(Ⅰ)
UNIT 25 SPI 로봇 SW 교육원 조용수.
01. 분산 파일 시스템의 개요 네트워크에 분산된 파일을 사용자가 쉽게 접근하고 관리할 수 있게 해준다.
JSP Programming with a Workbook
기초C언어 제2주 실습 프로그래밍의 개념, 프로그램 작성 과정 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원
시스템 인터페이스 Lab1 X-window 및 명령어 사용.
엔트리-아두이노 블록 코딩 평원중학교 이동준 자바실험실 JavaLab.org.
다자간 채팅프로그램 김형도 허영민
IO-Link 통신 기술 소개 산업 Ethernet 필드버스 게이트웨이 접속 IO-Link 마스터 IO-Link 통신
아두이노 프로그래밍 2일차 – Part4 아날로그 키패드 활용하기 강사: 김영준 목원대학교 겸임교수
CDMA / LTE LoRa /CAT.m/NbIoT LTE 기지국 STA 모드 WiFi / 유선 네트워크 SKT
7 생성자 함수.
임베디드 프로그래밍 Lecture #
1. 실습 시간에 수행한 avd 생성 및 실행, adb shell 접속 및 명령어 수행 결과를 제출한다.
Presentation transcript:

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

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

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

관제점(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)

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

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

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

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

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

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

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

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

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

테스트 하드웨어 구성(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 장치 회로 구성 팬 맵

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

장치 제어 콘솔 프로그램 (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 …

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

장치 제어 콘솔 프로그램 (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