임베디드 프로그래밍 Lecture #06 2017. 11. 06
목 차 IoT Protocol 개요 HTTP Protocol 개요 HTTP 기반 IoT Service 구현
IoT Protocols (1) IoT Protocols 개요 https://www.cse.wustl.edu/~jain/cse570-15/ftp/iot_prot.pdf
IoT Protocols (2) IoT Protocols 개요
IoT Protocols (3) IoT Protocols 개요 무선 통신 기술
IoT Protocols (4) IoT Protocols 개요 주요 IoT Session Protocols 참고: HTTP / HTTPS CoAP MQTT XMPP AMQP 등 참고: https://www.slideshare.net/paolopat/io-t-protocols- landscape?next_slideshow=1 https://www.slideshare.net/paolopat/mqtt-iot-protocols-comparison
HTTP Protocol (1) HTTP Protocol 개요 요청/응답(Request/Response) 기반의 무상태형(Stateless) 통신 프로토콜 https://www.ntu.edu.sg/home/ehchua/programming/webprogramming /HTTP_Basics.html 주요 특징: 요청/응답 방식 비연결지향성(Connetionless) 무상태형(Stateless) 미디어 독립적(Media-independent) 복잡도가 낮음(Simple)
Request/response 기반의 비연결지향성 HTTP Protocol (2) HTTP Protocol 개요 Request/response 기반의 비연결지향성
HTTP Protocol (3) HTTP Protocol 개요
HTTP Protocol (4) HTTP Protocol 개요 HTTP based on TCP/IP
HTTP Protocol (5) HTTP Protocol 개요 Request Message
HTTP Protocol (6) HTTP Protocol 개요 Response Message
HTTP Protocol (7) HTTPS Protocol 개요 HTTP의 보안이 강화된 버전 SSL이나 TLS 프로토콜을 통해 세션 데이터를 암호화
HTTP Protocol (8) HTTPS Protocol 개요 : TLS(Transfer Layer Security)
HTTP Protocol (9) SOA(Service Oriented Architecture) 웹 서비스(Web Service) : SOA를 통해 공개된 메소드 구현 방법: SOAP(Simple Object Access Protocol) REST(Representational State Transfer) https://www.slideshare.net/cesare.pautasso/rest-vs-soap-making-the- right-architectural-decision-1st-international-soa-symposium- amsterdam-october-2008-presentation
HTTP Protocol (10) SOA(Service Oriented Architecture) SOAP vs. REST
HTTP Protocol (11) SOA(Service Oriented Architecture) SOAP vs. REST
HTTP Protocol (12) HTTP 기반 IoT 서비스 구현 장점: 단점: 통신 프로토콜이 간단(Simple) 구현이 용이 방화벽(Firewall)에 대한 제약이 없다 단점: 메시지 크기가 크다 데이터 전송량이 많다 요청/응답 방식의 통신 경우에 따라 즉각적인 서비스나 주기적인 서비스 제공 이 어렵다
HTTP Protocol (13) HTTP 기반 IoT 서비스 구현 접근 #1 - IoT 단말 장치를 HTTP Client로 구현 Publish/subscribe pattern 접근 #2 - IoT 단말 장치를 HTTP Server로 구현 순간 값 서비스가 용이 / 방화벽 제약을 해결 접근 #3 – IoT 단말 장치를 HTTP Server/Client로 구현 복잡 UPnP(Universal Plug and Play)
HTTP 기반 IoT 서비스 구현 (1) 라즈베리파이의 웹 프로그래밍 플랫폼 Node.js Java-based web app. server Embedded Tomcat Glassfish / Jersey 다양한 web application server가 존재 최근 spring boot framework가 주목 이제는 Spring Boot를 써야할 때다
HTTP 기반 IoT 서비스 구현 (2) Spring boot 개발 환경 구축 STS 설치 Eclipse + STS Plugin Spring Tool Suite https://spring.io/tools NetBeans 등 STS 설치 https://spring.io/tools에서 압축파일을 다운로드 원하는 디렉토리에 압축 해제 실행 PATH에 경로 추가
HTTP 기반 IoT 서비스 구현 (3) Spring boot 프로젝트 생성 (1) STS 실행 파일 New Spring Start Project 메뉴 선택
HTTP 기반 IoT 서비스 구현 (4) Spring boot 프로젝트 생성 (2) 프로젝트 이름 설정 “raspi_iot” Package Group 설정 “com.example” 나머지 설정은 기본 설정에 따른다.
HTTP 기반 IoT 서비스 구현 (5) Spring boot 프로젝트 생성 (3) 프로젝트 종속성 선택 : “Web” Maven project 설정에 종속성 추가
HTTP 기반 IoT 서비스 구현 (6) Spring boot 프로젝트 생성 (4) 생성된 Maven Project
HTTP 기반 IoT 서비스 구현 (7) Spring boot 프로젝트 기본 실행 (1) 기본적으로 생성된 프로젝트 실행 프로젝트 팝업 메뉴 “Run As” “Spring Boot App”
HTTP 기반 IoT 서비스 구현 (8) Spring boot 프로젝트 기본 실행 (2) Home URL에 대한 서비스 페이지가 없음 Spring boot 프로젝트 기본 실행 (2) 웹브라우즈을 이용하여 GET 요청 전송 http://localhost:8080/
HTTP 기반 IoT 서비스 구현 (9) REST 서비스 클래스 생성 및 구현 (1) REST API 개요 : REST API 이해와 설계 Java POJO Class 생성 Class Name: “RaspiIotController”
HTTP 기반 IoT 서비스 구현 (10) REST 서비스 클래스 생성 및 구현 (2) RaspiIotController 클래스에 지시자(Annotation) 추가 @RestController @EnableAutoConfiguration
HTTP 기반 IoT 서비스 구현 (11) REST 서비스 클래스 생성 및 구현 (3) RaspiIotController 클래스에 Home URL 서비스 메소드 추가
HTTP 기반 IoT 서비스 구현 (12) REST 서비스 클래스 생성 및 구현 (4) 웹 서비스 포트 변경 : 8080 8081
HTTP 기반 IoT 서비스 구현 (13) REST 서비스 클래스 생성 및 구현 (4) 실행 테스트 “Run As” “Spring Boot App” 메뉴로 실행 브라우저로 GET 요청 전송
HTTP 기반 IoT 서비스 구현 (14) REST 서비스 클래스 생성 및 구현 (5) 라즈베리파이에서의 실행 테스트 배포 파일 생성 : “Run As” “Maven Install” 메뉴 실행
HTTP 기반 IoT 서비스 구현 (15) REST 서비스 클래스 생성 및 구현 (6) 라즈베리파이에서의 실행 배포 파일 복사 : samba 서비스를 이용하여 copy & paste 라즈베리파이 디렉토리 프로젝트 디렉토리/target drag & drop
HTTP 기반 IoT 서비스 구현 (16) REST 서비스 클래스 생성 및 구현 (7) 라즈베리파이에서의 실행 배포 파일 실행: 라즈베리파이에 ssh 접속하여 다음 명령 실행 #> java –jar raspi_iot_0.0.1_SANPSHOT.jar 단, JRE는 라즈베리파이에 기본적으로 설치된 버전을 사용 PC의 웹브라우즈에서 GET 요청 전송 http://my-raspi:8081/
HTTP 기반 IoT 서비스 구현 (17) HTTP 기반 IoT 서비스 (1) 웹 서비스를 통해 라즈베리파이에서 다음의 동작을 지원 3개 LED에 대한 on/off 제어 PCF8591 Breakout Board를 이용한 아날로그 입출력 지원 LED Dimming Potentiometer 값 읽기 Photoresistor 값 읽기 Themistor 값 읽기
HTTP 기반 IoT 서비스 구현 (18) HTTP 기반 IoT 서비스 (2) 라즈베리파이 회로 LED GPIO: GPIO17(11), GPIO27(13), GPIO22(15) PCF8591BB: SDA(3), SCL(5)
HTTP 기반 IoT 서비스 구현 (19) HTTP 기반 IoT 서비스 (3) 장치 제어 클래스를 위한 패키지 생성 : com.example.devices
HTTP 기반 IoT 서비스 구현 (20) HTTP 기반 IoT 서비스 (4) LED 제어 클래스 생성 LedController
Maven project에서 외부 라이브러리에 대한 종속성을 추가하기 위해서는 외부 라이브러리 설치를 요구함. HTTP 기반 IoT 서비스 구현 (21) HTTP 기반 IoT 서비스 (5) Device IO Library 추가 장치 입출력을 위한 라이브러리 추가 src/main/resources 디렉토리에 lib 디렉토리 생성 dio.jar 파일을 복사하여 붙여넣기 Maven project에서 외부 라이브러리에 대한 종속성을 추가하기 위해서는 외부 라이브러리 설치를 요구함.
HTTP 기반 IoT 서비스 구현 (22) HTTP 기반 IoT 서비스 (6) 외부 라이브러리의 로컬 메이븐 리포지토리에 설치 외부 라이브러리의 로컬 메이븐 리포지토리에 설치 pom.xml 파일에 다음 plugin 추가
HTTP 기반 IoT 서비스 구현 (23) HTTP 기반 IoT 서비스 (7) 외부 라이브러리에 대한 종속성 선언 pom.xml 파일에 다음을 추가
HTTP 기반 IoT 서비스 구현 (24) HTTP 기반 IoT 서비스 (8) LedController 클래스 구현 @Component 선언 Spring DI를 위해 component 클래스로 선언 장치 레지스트리에서의 LED 장치 이름
HTTP 기반 IoT 서비스 구현 (25) HTTP 기반 IoT 서비스 (9) LedController 클래스 구현 사용중인 장치는 종료 시에 반드시 닫아줘야 한다. @PreDestroy 지시자를 이용한 메소드 구현 객체가 제거되기 전에 호출
HTTP 기반 IoT 서비스 구현 (26) HTTP 기반 IoT 서비스 (10) LedController 클래스 구현 turnOn 메소드 : LED 장치를 켜는 메소드 turnOff 메소드 : LED 장치를 끄는 메소드
HTTP 기반 IoT 서비스 구현 (27) HTTP 기반 IoT 서비스 (11) LED 제어 REST API 구현 RaspiIoTController 클래스에 LedController 속성 추가 @Autowired 지시자를 이용하여 DI 선언
HTTP 기반 IoT 서비스 구현 (28) HTTP 기반 IoT 서비스 (12) LED 제어 REST API 구현 RaspiIoTController 클래스에 ledOn 서비스 메소드 추가 REST API URL 및 요청 메소드 정의 요청 파라메터 정의 : 경로변수 파라메터
HTTP 기반 IoT 서비스 구현 (29) HTTP 기반 IoT 서비스 (13) LED 제어 REST API 구현 RaspiIoTController 클래스에 ledOff 서비스 메소드 추가 REST API URL 및 요청 메소드 정의 요청 파라메터 정의 : 경로변수 파라메터
HTTP 기반 IoT 서비스 구현 (30) HTTP 기반 IoT 서비스 (14) LED 제어 REST API 구현 RaspiIoTApplication 클래스에 Component Scan Path 지정
HTTP 기반 IoT 서비스 구현 (31) HTTP 기반 IoT 서비스 (15) LED 제어 REST API 구현 배포 파일 생성 Maven Clean Maven Install
HTTP 기반 IoT 서비스 구현 (32) HTTP 기반 IoT 서비스 (16) LED 제어 REST API 구현 배포 파일 생성 오류 발생 배포 파일을 생성하기 위해 테스트 하는 과정에서 dio.jar 파일에서 호출하는 C-library을 찾지 못하여 발생
HTTP 기반 IoT 서비스 구현 (33) HTTP 기반 IoT 서비스 (17) LED 제어 REST API 구현 배포 파일 생성 과정에서 테스트를 생략하도록 설정 pom.xml 파일에서 테스트 생략 plugin 추가
HTTP 기반 IoT 서비스 구현 (34) HTTP 기반 IoT 서비스 (18) LED 제어 REST API 구현 배포 파일 배포 Samba 서비스를 이용하여 라즈베리파이로 배포 파일 복사 장치 레지스트리 파일 및 보안 정책 파일 배포 dio.properties java.policy 배포 파일 실행
dio.properties java.policy
HTTP 기반 IoT 서비스 구현 (35) HTTP 기반 IoT 서비스 (19) LED 제어 REST API 구현 PC 웹브라우저에서 테스트
HTTP 기반 IoT 서비스 구현 (36) HTTP 기반 IoT 서비스 (20) Analog IO REST API 구현 이전 실습에서 작성된 I2C 입출력 관련 파일을 다음 디렉토리에 복사 $(project_base_dir)/src/main/java/com/example
HTTP 기반 IoT 서비스 구현 (37) HTTP 기반 IoT 서비스 (21) Analog IO REST API 구현 복사한 소스 파일에서의 패키지 선언 수정 객체를 생성할 클래스 파일에 대해 @Component 지시자 추가
HTTP 기반 IoT 서비스 구현 (38) HTTP 기반 IoT 서비스 (22) Analog IO REST API 구현 AnalogIOController 클래스 생성
HTTP 기반 IoT 서비스 구현 (39) HTTP 기반 IoT 서비스 (23) Analog IO REST API 구현 AnalogIOController 클래스 구현
HTTP 기반 IoT 서비스 구현 (40) HTTP 기반 IoT 서비스 (24) Analog IO REST API 구현 RaspiIotController 클래스에 속성 추가
HTTP 기반 IoT 서비스 구현 (41) HTTP 기반 IoT 서비스 (25) Analog IO REST API 구현 RaspiIotController 클래스에 dimming 메소드 추가
HTTP 기반 IoT 서비스 구현 (42) HTTP 기반 IoT 서비스 (26) Analog IO REST API 구현 RaspiIotController 클래스에 potentiometer 읽기 메소드 추가
HTTP 기반 IoT 서비스 구현 (43) HTTP 기반 IoT 서비스 (27) Analog IO REST API 구현 Photoresistor 읽기 메소드 추가 Themistor 읽기 메소드 추가
HTTP 기반 IoT 서비스 구현 (44) HTTP 기반 IoT 서비스 (27) Analog IO REST API 구현 배포 파일 생성 및 배포 테스트
HTTP 기반 IoT 서비스 구현 (45) HTTP 기반 IoT 서비스 (28) Analog IO REST API 구현 테스트