임베디드 프로그래밍 Lecture #06 2017. 11. 07
목 차 UART 통신 테스트 UART Console 테스트 UART 장치 통신 테스트
UART 직렬 통신 (1) UART 직렬 통신 Universal Asynchronous Receiver/Transmitter 별도의 클럭 라인이 없이 양 장치 간에 정해진 클럭 속도에 맞추어 통 신하는 비동기식 직렬 통신 방식 동기식 직렬 통신 비동기식 직렬 통신 병렬 통신
UART 직렬 통신 (2) UART 직렬 통신 규칙(Rules) UART 직렬통신 Baud Rate Data bits Synchronization bits Parity bits Baud rate UART 직렬통신 Baud Rate 전송 속도 - how fast data is sent over a serial line bits-per-second (bps) 로 표시 표준 baud rate: 1200, 2400, 4800, 9600, 9200, 38400, 57600, 115200
UART 직렬 통신 (3) UART 직렬통신 data chunk 9600 8N1 9600 baud, 8 data bits, no parity, and 1 stop bit one of the more commonly used serial protocols “OK” 문자열 전송 비트열: LSB MSB
UART 직렬 통신 (4) UART 직렬 통신 – 연결 구조 및 전송 신호 TTL Serial Signals RS-232C Serial Signals 신호선 연결 구조
UART Console 테스트 (1) UART Console 테스트 라즈베리파이는 기본적으로 UART 포트를 콘솔 포트로 설정 연결 방식: Usb-Serial Cable PC – terminal program Raspberrypi 3
UART Console 테스트 (2) UART Console 테스트 Console 로그인 화면
UART Console 테스트 (3) 기본 설정 UART 포트를 사용하기 위해 우선 Bluetooth 기능을 중지하여야 함. 라즈베리파이로 ssh 접속 $ sudo nano /boot/config.txt config.txt 파일 끝에 다음 두 줄 추가 후에 저장 # disable Bluetooth dtoverlay=pi3-disable-bt $ sudo systemctl disable hciuart $ sudo reboot
UART Console 테스트 (4) 기본 설정 Bluetooth 기능 재설정 라즈베리파이로 ssh 접속 $ sudo nano /boot/config.txt config.txt 파일 끝에 추가한 두 줄을 제거 # disable Bluetooth # dtoverlay=pi3-disable-bt $ sudo systemctl enable hciuart $ sudo reboot
UART Console 테스트 (5) 기본 설정 UART console 포트 사용 설정 raspi-config 툴을 사용하여 설정
UART Console 테스트 (6) 기본 설정 UART console 포트 사용 설정
UART Console 테스트 (7) 기본 설정 UART console 포트 사용 설정 /boot/cmdline.txt 파일에서 console 설정 확인
UART Console 테스트 (8) 아두이노를 활용한 UART console 테스트 아두이노를 USB-Serial 케이블을 대용으로 사용 아두이노는 다수의 UART 채널을 제공(Software UART 포함) PC RaspberryPi UART #0 Arduino UART #1 UART USB
UART Console 테스트 (9) 아두이노를 활용한 UART console 테스트 Arduino MEGA를 이용한 연결 USB 연결 Pin 연결 18 10 19 8 GND 39
UART Console 테스트 (10) 아두이노를 활용한 UART console 테스트 Arduino sketch 프로그래밍 : MultiSerial 예제 활용
UART Console 테스트 (11) 아두이노를 활용한 UART console 테스트 Arduino Serial 모니터 화면
UART 장치 통신 테스트 (1) 라즈베리파이의 UART 장치 통신 (1) 라즈베리파이는 외부 장치와의 UART 통신 가능 주로 통신 모뎀, 영상입력장치 등을 연결할 때에 사용 raspi-config 툴을 이용하여 console 포트 기능을 중지(disable) 하여야 함
UART 장치 통신 테스트 (2) 라즈베리파이의 UART 장치 통신 (2)
UART 장치 통신 테스트 (3) 아두이노와의 UART 통신 실험 Arduino와의 UART 연결을 통한 데이터 통신 실험 SHT11 온습도 센서 값을 아두이노를 통해 읽어 오기 아두이노는 주기적으로 sht11 온도, 습도 값을 읽어 내부적으로 저장 값을 업데이 트한다. 라즈베리파이는 필요할 때에 UART 통신 장치를 통해 아두이노에게 온도,습도 값 을 요청한다. 아두이노는 라즈베리파이의 요청을 받으면 저장하고 있는 온도, 습도 값을 전송 한다.
UART 장치 통신 테스트 (4) 아두이노와의 통신 규약 아두이노와 라즈베리파이 사이의 연결은 앞의 예와 동일하게 구성 통신 규약: TMP\n - 온도 요청 HMD\n - 습도 요청 ACK\n - 연결 확인 RaspberryPi 요청 Arduino 응답 T=xx.xx\n - 온도 응답 H=xx.xx\n - 습도 응답 OK\n - 연결 확인 응답
UART 장치 통신 테스트 (5) SHT11(온/습도) 센서 (1) SENSIRION사의 SHT1x 시리즈의 SHT11 Humidity & Temperature Sensor 사용 디지털 출력 온/습도 센서 - 하나의 칩에 두 개의 센서를 집적화 특징: 측정 범위 : 0~100% RH 상대 습도 정밀도 +/- 3% 온도 정밀도: +/- 0.4°C @ 25 °C 보정된 디지털 출력 (2 와이어 인터페이스) 빠른 반응 속도 < 4 sec. 저전력 소비 (typ. 30 µW) 낮은 가격 대량 생산용으로 디자인 됨, 가격이 민감한 응용 제품용 뛰어난 장기 안정성 보정과 디지털 2 와이어 인터페이스 기능으로 사용이 쉬움
UART 장치 통신 테스트 (6) SHT11(온/습도) 센서 (2) %RH Sensor라고 표시되어 있는 부분과 Temp Sensor 라고 표시되어 있는 부 분을 통해 온도와 습도의 정도를 센싱(Sensing)
UART 장치 통신 테스트 (7) SHT11(온/습도) 센서 (3) 센싱된 수치는 14비트 A/D 변환기를 통해 아날로그 정보를 디지털 수치화 하고 I2C 를 통하여 정보를 처리할 MCU(CPU)로 전달 일반적인 회로구성 예
UART 장치 통신 테스트 (8) 아두이노 프로그램 – 온습도 정보 서비스 SHT11을 활용하여 온/습도를 센싱하여 저장하고, 라즈베리파이 요청에 대해 저장한 값을 제공한다. 온/습도 값은 노이즈에 의한 영향을 줄이기 위해 최근 10개의 값에 대한 평균값을 저 장한다.
UART 장치 통신 테스트 (9) 아두이노 프로그램 사용 모듈 및 회로도
UART 장치 통신 테스트 (10) 아두이노 프로그램 회로 연결 MEGA ADK 모듈의 20(SDA) 핀을 온/습도 센서 모듈의 DATA 핀에 연결 MEGA ADK 모듈의 21(SCL) 핀을 온/습도 센서 모듈의 SCK 핀에 연결
UART 장치 통신 테스트 (11) 아두이노 프로그램 SHT11 Arduino Library 라이브러리 설치 제어 핀의 설정과 센싱 값의 Read를 위한 함수 제공 참고 사이트: https://github.com/practicalarduino/SHT1x https://www.adafruit.com/product/246 라이브러리 설치 라이브러리 파일을 다운로드하고 아두이노 설치 폴더 내 “libraries” 폴더에 복사하여 압 축을 해제한다. 라이브러리 폴더 이름을 “SHT1x”로 변경한다. 아두이노 소프트웨어를 다시 실행하여야 한다. 예제 메뉴를 통해 라이브러리 설치 여부를 확인한다.
UART 장치 통신 테스트 (12) 아두이노 프로그램 스케치 프로그램 : ReadSHT1xValues.ino https://github.com/silla-mclab/jiot2/blob/master/Arduino/ReadSHT1xValues.ino Compile Flag “TESTING” : 아두이노 시리얼 모니터를 통해 테스트 & 디버깅
UART 장치 통신 테스트 (13) 라즈베리파이 프로그래밍 - 테스트 프로젝트 생성 NetBeans IDE에서 새로운 프로젝트 생성 프로젝트명: jiot06-UARTComm-test Main Class: jiot06.uartcomm.UARTCommTest 프로젝트 속성 설정에서 라이브러리 추가 프로젝트 속성에서 dio.jar 라이브러리 추가
UART 장치 통신 테스트 (14) 라즈베리파이 프로그래밍 jdk.dio.uar 패키지를 이용하여 UART 장치 드라이브 구현 “source packages” 내에 “uart_dev” 패키지 생성 “uart_dev” 패키지 내에 다음의 클래스 파일 생성 UARTRPi.java – UART Device wrapper class SHT11.java – SHT11 장치의 command enumerator 객체 정의 소스: https://github.com/silla-mclab/jiot2/tree/master/jiot06-UARTComm- test/src/uart_dev UARTRPi.java 구현 특징 UART 장치 객체가 유일하게 하나만 생성되도록 지원 데이터 수신 처리를 이벤트 리스너를 통해 비동기 처리
UART 장치 통신 테스트 (15) 라즈베리파이 프로그래밍 UART 장치 클래스를 이용하여 SHT11 장치 드라이브 구현 “source packages” 내에 “uart_dev.drivers” 패키지 생성 “uart_dev.drivers” 패키지 내에 다음의 클래스 파일 생성 SHT11Device.java – SHT11 장치 드라이브 클래스 소스: https://github.com/silla-mclab/jiot2/blob/master/jiot06-UARTComm- test/src/uart_dev/drivers/SHT11Device.java
UART 장치 통신 테스트 (16) 라즈베리파이 프로그래밍 jiot06.uartcomm.UARTCommTest.java 파일 작성 SHT11 장치 테스트 소스: https://github.com/silla-mclab/jiot2/blob/master/jiot06-UARTComm- test/src/jiot06/uartcomm/UARTCommTest.java
UART 장치 통신 테스트 (17) 라즈베리파이 프로그래밍 - 설정 파일 추가 및 수정 “lib” 디렉토리에 장치 레지스트리 파일 및 보안 정책 파일 추가 build.xml 파일 수정 Jiot06-UARTComm-test
UART 장치 통신 테스트 (18) 설정 파일 – 장치 레지스트리 파일 실행시간에 장치 설정을 변경 # RPi3 header pins 1 = deviceType: gpio.GPIOPin, pinNumber:4, name:GPIO4, predefined:true 2 = deviceType: gpio.GPIOPin, pinNumber:7, name:GPIO7, mode:4, direction:1, predefined:true 3 = deviceType: gpio.GPIOPin, pinNumber:17, name:GPIO17, predefined:true 4 = deviceType: gpio.GPIOPin, pinNumber:18, name:GPIO18, mode:4, direction:1, predefined:true 5 = deviceType: gpio.GPIOPin, pinNumber:22, name:GPIO22, predefined:true 6 = deviceType: gpio.GPIOPin, pinNumber:23, name:GPIO23, mode:2, direction:0, predefined:true 7 = deviceType: gpio.GPIOPin, pinNumber:24, name:GPIO24, mode:2, direction:0, predefined:true 8 = deviceType: gpio.GPIOPin, pinNumber:25, name:GPIO25, mode:4, direction:1, predefined:true 9 = deviceType: gpio.GPIOPin, pinNumber:27, name:GPIO27, predefined:true 100 = deviceType: uart.UART, controllerName:ttyAMA0, name:ttyAMA0, baudRate:19200, dataBits:8, parity:0, stopBits:1, flowControl:0, predefined:true 300 = deviceType: spibus.SPIDevice, name:SPI0.0, controllerNumber:0, address:0, csActive:1, wordLength:8, clockFrequency:500000, clockMode:1, bitOrdering:1, predefined:true gpio.GPIOPin = initValue:0, controllerNumber:0, direction:0, mode:2, trigger:1, predefined:true uart.UART = baudRate:19200, parity:0, dataBits:8, stopBits:1, flowControl:0, predefined:true
UART 장치 통신 테스트 (19) 설정 파일 – 보안 정책 파일 // policy for DIO framework grant { permission jdk.dio.DeviceMgmtPermission "*:*", "open"; permission jdk.dio.gpio.GPIOPinPermission "*:*"; permission jdk.dio.i2cbus.I2CPermission "*:*"; permission jdk.dio.spibus.SPIPermission "*:*"; permission jdk.dio.uart.UARTPermission "*:*"; };
UART 장치 통신 테스트 (20) build.xml 파일 수정
UART 장치 통신 테스트 (21) 프로젝트 속성 설정 수정 Sources / Run 속성 수정
UART 장치 통신 테스트 (22) 원격 실행 NetBeans Output 화면에서는 데이터 입력을 지원하지 않음 터미널 화면에서 실행 라즈베리파이로 ssh 접속 바이너리 배포 디렉토리로 이동 $ cd ~/NetBeansProjects/jiot06-UARTComm-test/dist java 명령을 이용하여 실행 $ /home/pi/jiot/jre/bin/java -Djdk.dio.registry=lib/dio.properties -Djava.security.policy=lib/java.policy -jar jiot06-UARTComm-test.jar
UART 장치 통신 테스트 (23)