6. 시리얼 통신 제어 - 스마트 폰으로 제어하는 아두이노 -.

Slides:



Advertisements
Similar presentations
6 장. printf 와 scanf 함수에 대한 고찰 printf 함수 이야기 printf 는 문자열을 출력하는 함수이다. – 예제 printf1.c 참조 printf 는 특수 문자 출력이 가능하다. 특수 문자의 미 \a 경고음 소리 발생 \b 백스페이스 (backspace)
Advertisements

Progress Report YoonMo Yeon
7. 스마트 폰으로 아두이노 제어하기 기능을 확장하기 위한 다양한 종류의 쉴드 보드 적층형 구조 블루투스나 WiFi 쉴드
재료수치해석 HW # 박재혁.
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
2장. 프로그램의 기본 구성. 2장. 프로그램의 기본 구성 2-1"Hello, World!" 들여다 보기 /* Hello.c */ #include int main(void) { printf("Hello, World! \n"); return 0;
자바실험실 이동준 우리 곁으로 다가온 사물 컴퓨팅 자바실험실 이동준.
13. 인터럽트 제어 - 스마트 폰으로 제어하는 아두이노 -.
아두이노 센서의 연결 디지털 및 아날로그 센서값의 특징 디지털 센서 핀 구조 및 연결하기 아날로그 센서 핀 구조 및 연결하기
AOE-212 설치방법 MANUAL & FAQ 작성일자:2012년02월20일 INTER-M C/S팀
아날로그 입력과 출력.
아두이노 기반 펌웨어 개발 FUTURE INNOVATOR 강사: 김 영 준 ㈜헬로앱스
네트워크 스캔하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
AP 모드 활용하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
2. 아두이노의 개발환경 만들기 - 스마트 폰으로 제어하는 아두이노 -.
SqlParameter 클래스 선문 비트 18기 발표자 : 박성한.
컴퓨터 프로그래밍 기초 #02 : printf(), scanf()
Error Detection and Correction
Ubiquitous Computing Practice (RFID)
DK-128 ADC 실습 아이티즌 기술연구소
부트로더와 Self Programming
임베디드 실습 # LED, 7’Segment 제어
DK-128 실습 EEPROM 제어 아이티즌 기술연구소
타이머카운터 사용법 휴먼네트웍스 기술연구소
PSW : PROGRAM STATUS WORD
Arduino 101 using NodeJS Korea University of Technology and Education
ATmega128 FND 실습 휴먼네트웍스 기술연구소
DK-128 FND 실습 아이티즌 기술연구소 김태성 연구원
Ubiquitous Computing Practice (RFID)
NodeMCU를 이용한 SmartPot 제작
11장. 1차원 배열.
사용자 함수 사용하기 함수 함수 정의 프로그램에서 특정한 기능을 수행하도록 만든 하나의 단위 작업
어서와 C언어는 처음이지 제14장.
3장 상수 변수 기본 자료형 키워드와 식별자 상수와 변수 기본 자료형 형변환 자료형의 재정의.
5. 아두이노로 LED와 스위치 제어하기 - 스마트 폰으로 제어하는 아두이노 -.
아두이노 프로그래밍 5일차 – Part2 아두이노 보드간 통신 강사: 김영준 목원대학교 겸임교수.
DK-128 FND 실습 아이티즌 기술연구소
임베디드 시스템 개론 임베디드 타겟 보드 포팅 및 H/W 제어 3일차 강의 자료 Embedded System Lab.
Chapter6 : JVM과 메모리 6.1 JVM의 구조와 메모리 모델 6.2 프로그램 실행과 메모리 6.3 객체생성과 메모리
연산자 (Operator).
2016년 2학기 PULSE 4 Experiment 12 – 블루투스 통신.
DK-128 실습 내부 EEPROM 제어 아이티즌 기술연구소 김태성 연구원
DK-128 실습 타이머카운터 사용법 아이티즌 기술연구소
10차시: 크리스털 LCD 명령어 기초 준비물 SPL-Duino 보드 개요: 크리스털 LCD의 기초 명령어를 익혀 봅니다.
패러럴 포트를 이용한 Text LCD 제어 6월 17일 허정수 나선웅.
PSD센서 명령어 이해하기 목차 재료준비 및 브레드 보드 배선 구성하기 PSD센서 명령어 이해 및 실습 응용 작품 만들기.
02강 아두이노 LED 기본 개념 LED Example1 LED Example2 LED Example3
클라우드 서버로 사용자 데이터 전송하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
클라우드 서버로 부터 값 읽어오기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
아두이노 연결하기 WiFi 시리얼 보드 활용가이드 김영준 헬로앱스 (
GM7 PLC 모니터링 프로그램 한국 폴리텍 항공대학 항공정보통신과 송 승 일.
문자열 컴퓨터시뮬레이션학과 2015년 봄학기 담당교수 : 이형원 E304호,
웹서버 기능으로 데이터 읽기 및 제어하기 WiFi 시리얼 보드 활용가이드 김영준
컴퓨터 계측 및 실습 디지털 출력 영남대학교 기계공학부.
계산기.
CHAP 21. 전화, SMS, 주소록.
과제 1 4bit x 4 SRAM이 있다 아래 (1), (2) 두 입력에 대한 출력값 [3:0] Dout을 나타내시오 (1)
시보기 / PC 연결설정방법 광주 직영 임성환 사원.
아두이노 프로그래밍 5일차 – Part1 블루투스 통신 강사: 김영준 목원대학교 겸임교수.
DK-128 개발환경 설정 아이티즌 기술연구소
4장. 데이터 표현 방식의 이해. 4장. 데이터 표현 방식의 이해 4-1 컴퓨터의 데이터 표현 진법에 대한 이해 n 진수 표현 방식 : n개의 문자를 이용해서 데이터를 표현 그림 4-1.
DK-128 직렬통신 실습 아이티즌 기술연구소
Homework #12 (1/2) 프로그램을 작성하고, 프로그램과 실행 결과를 프린트하여 제출한다.
농구 로봇 따라해 보기.
다양한 아두이노 개발툴 및 H/W 한국기술교육대학교 아두이노 개발 SW 비교 1 스크래치 2 SPL 블록 3 SPL 스크립트
AdcRead API 함수 분석 마이크로프로세서.
IPC 펌웨어 업그레이드 방법 안내 ** 반드시 IPC를 NVR POE 포트 연결 전에 작업 하시기 바랍니다. IPC를 NVR POE 포트에 연결 하실 경우 IP 대역폭을 마추셔야 하는 작업이 필요합니다. **
동적메모리와 연결 리스트 컴퓨터시뮬레이션학과 2016년 봄학기 담당교수 : 이형원 E304호,
사물인터넷(IoT) 프로그래밍 기초 5. 시리얼통신.
Progress Seminar 양승만.
Presentation transcript:

6. 시리얼 통신 제어 - 스마트 폰으로 제어하는 아두이노 -

강의 개요 아두이노 보드는 개발용 PC 등과 같이 외부의 다른 시스템과 데이터를 주고받기 위하여 시리얼 통신을 일반적으로 이용 이장에서는 시리얼 통신을 활용한 방법을 공부해 보자.

6.1 시리얼 통신 직렬통신(Serial Communication) 시리얼 통신의 일반적인 특징과 아두이노 보드의 적용 시리얼 통신은 송신(TX), 수신(RX)의 2개 데이터 선을 이용하여 통신을 하기 때문에 비교적 간단하게 통신 연결이 가능 바이트(8비트)의 데이터를 비트 단위로 나누어 차례대로 전송하므로 통신시간이 느림 아두이노 보드와 개발용 PC사이의 시리얼 통신은 USB 포트 통해 가능 시리얼 통신을 하기 위해서는 속도(bps), 패리티(Parity), 스탑비트(Stop bit), 데이터 비트(Data bits) 설정이 필요 일반적으로 속도는 9,600bps, 패리티는 No parity, 1 스탑비트, 8데이터 비트를 사용

아두이노 UNO보드의 시리얼 통신 아두이노 UNO보드는 디지털입출력 핀 0번과 1번을 시리얼 통신을 위한 RX와 TX 신호로 사용

6.2 아두이노 시리얼 모니터 사용법 아두이노 개발환경에서는 개발용 PC의 시리얼 통신을 모니터할 수 있는 툴을 제공 아두이노 개발환경의 시리얼 모니터 기능과 사용법 아두이노 개발환경 실행창에서 기본으로 제공하는 "ASCIITable" 예제 활용 예제 위치 : "파일→예제→04.Communication→ASCIITable"

예제 실행 USB 케이블을 이용하여 개발용 PC와 아두이노 보드를 연결하고, "ASCIITable"를 안드로이드 보드에 업로드 스케치 창의 툴바 오른쪽 끝의 클릭을 하면 시리얼 모니터 창이 나타나며 아두이노 보드에서 보낸 ASCII Table ~ Character Map이 출력

시리얼 통신 설정 "Serial.begin(9600);" USART0를 사용하고 통신 속도는 "9600bps“ 의미 현재 아드이노 보드가 연결된 개발용 PC의 시리얼 포트를 확인 만일 시리얼 모니터에서 출력되는 문자가 깨져서 나온다면 통신속도가 "2400" 등으로 "ASCIITable"의 통신속도가 맞기 않기 때문 "Arduino UNO on COM10" 메시지를 확인 USART0는 통신 포트임과 동시에 아두이노 보드에 업로드를 하는 포트로도 사용. USART0를 시리얼 모니터 프로그램으로 사용하면, 아두이노 보드에 다시 업로드가 되지 않음, 이미 개발용 PC에서 USART0를 시리얼 포트로 사용 중이기 때문. 이 경우 아두이노 보드에 업로드를 하기 위해서는 반드시 시리얼 모니터 프로그램을 종료해야 함.

6.3 아두이노 시리얼 모니터를 사용한 제어 아두이노의 시리얼 모니터를 이용하여 개발용 PC와 통신하며 제어 하는 방법을 살펴보자.

예제 6.1 아두이노 보드에서 시리얼 통신으로 메시지 보내기 주요개념 개발용 PC를 사용하여 스케치를 작성하고 아두이노 보드에 업로드하기 위하여 2장에서 개발환경을 구축하면서, 개발용 PC에는 시리얼 통신을 위한 설정을 해 놓은 상태 필요 아두이노 보드에서 PC로 시리얼 통신 속도 설정 아두이노의 스케치의 setup( ) 함수에서 Serial.begin( ) 함수 사용 개발용 PC의 모니터로 문자열 전송 Serial.println( )나 Serial.print( ) 사용 void setup() { Serial.begin(9600); } 시리얼 통신을 위한 전송속도 9600 설정 void loop() { Serial.println("Hello world!"); delay(1000); 개발용 PC의 모니터로 문자열 전송

예제 6.1의 실행 스케치 창의 툴바 오른쪽 끝의 클릭 시리얼 모니터 창이 띠워지며 아두이노 보드에서 보낸 "Hello world!"라는 문자가 출력

예제 6.2 한 개의 문자를 받아서 시리얼 모니터에 출력하기 개발용 PC의 시리얼 모니터 창의 "send"로부터 1개의 문자를 입력 받아 시리얼 모니터에 다시 출력 주요개념 Serial.available( ) 사용 시리얼 통신을 통하여 아두이노 보드로 입력이 있을 때만 실행이 가능하도록 입력이 있는지 검사하는 함수 Serial.read( ) 사용 시리얼 통신을 통하여 입력을 받아드리는 함수 void setup() { Serial.begin(9600); } 시리얼 통신을 위한 전송속도 9600 설정 void loop() { if( Serial.available() ){ 입력된 문자가 하나 이상 있는지 검사 char ch = Serial.read(); PC로부터 1개의 문자를 받아 저장 Serial.println(ch); 저장된 문자를 PC의 시리얼 모니터에 출력

예제 6.2의 실행 스케치 업로드 후 개발용 PC의 시리얼 모니터 창을 열면 입력 대기 상태 1개 이상의 문자를 키보드를 통하여 입력한 후 "Send"를 클릭 하면 입력한 문자가 시리얼 모니터에 출력 "HELLO"라 문자열을 입력하고 "Send"를 클릭 하면 한 줄에 한 자씩 연속하여 HELLO 표시

예제 6.3 시리얼 통신 제어 시리얼 통신을 통하여 개발용 PC의 키보드로 부터 "1, 2, 3"을 입력 받아, 아두이노 보드로 전송하여 LED 제어 입력 값이 "1"이면 LED를 1초 간격으로 1번 깜빡임 입력 값이 "2"이면 LED를 1초간 간격으로 2번 깜빡임 입력 값이 "3"이면 LED를 1초간 간격으로 3번 깜빡임 주요개념 시리얼 통신을 통하여 개발용 PC의 키보드로 부터 "1, 2, 3"을 입력 받아들이고, switch( )함수의 case 조건으로 사용

예제 6.3의 스케치1 int LED=13; int i; 디지털입출력 핀 13에 연결된 uno 보드의 LED 사용 void setup() { Serial.begin(9600); pinMode(LED, OUTPUT); } 시리얼 전송 속도 9600bps void blink(){ digitalWrite(LED, HIGH); delay(1000); digitalWrite(LED, LOW); LED를 깜박이는 부분을 blink()함수로 정의

예제 6.3의 스케치2 void loop() { loop()의 시작 Serial.println("Enter 1,2,3 !"); if( Serial.available() ){ 입력된 문자가 하나 이상 있는지 검사 char select = Serial.read(); PC로부터 1개의 문자를 받아 저장 Serial.print("Selcet Number ="); Serial.println(select); 선택된 숫자를 표시 switch(select) { 시리얼통신으로 받은 문자를 case조건으로 사용 case '1': for (i=0; i<1; i++) blink(); break; case '2': for (i=0; i<2; i++) blink(); case '3': for (i=0; i<3; i++) blink(); blink() 함수 1번 호출 blink() 함수 2번 호출 blink() 함수 3번 호출 } switch()의 끝 Serial.available()의 끝 loop()의 끝

예제 6.3의 실행 스케치 업로드 후 개발용 PC의 시리얼 모니터 창을 열면, 시리얼 모니터에 "Enter 1,2,3 !" 을 출력하며 입력 대기 상태 "1, 2, 3" 가운데 하나의 문자를 키보드를 통하여 입력한 후 "Send"를 클릭 하면 "Selcet Number = (입력한 숫자)"가 시리얼 모니터에 출력 되고, 지정된 LED 제어 지정된 LED 제어가 완료되면 다시 시리얼 모니터에 "Enter 1,2,3 !" 을 출력하며 입력 대기 상태

6.4 아두이노 Mega 보드의 COMMUNICATION 핀 ATmega2560은 직렬 통신포트 USART 4개 내장 USART0, USART1, USART2, USART3 USART는 3가지의 인터럽트 제공 송신 완료(TX Complete) 송신 데이터 레지스터 준비완료(TX Data Register Empty) 수신완료(RX Complete)

아두이노 Mega보드의 통신 핀 시리얼 통신을 위하여 디지털입출력 핀 0번, 1번과 14~21번을 COMMUNICATION 핀으로 사용 COMMUNICATION 핀은 비동기식 시리얼 통신을 위한 4개의 하드웨어 UART와 동기식 시리얼 통신을 위한 TWI로 구분 MEGA 2560 R3 pin COMMUNICATION UART0 RX0 TX0 1 UART3 TX3 14 RX3 15 UART2 TX2 16 RX2 17 UART1 TX1 18 RX1 19 TWI/SPI SDA 20 SCL 21

6.5 HBE-MCU-Multi의 스위치 모듈 HBE-MCU-Multi의 UART 모듈 PC나 다른 임베디드 시스템과의 UART 통신을 위하여 RS232와 USB를 통한 가상 UART 2가지 제공

예제 6.4 UART로 Hello 보내기 개발용 PC와 아두이노 Mega 보드의 연결 개발용 PC와 Mega 보드를 USB 케이블로 연결하지 않고, Mega 보드와 UART 모듈을 2핀 커넥터를 사용하여 연결 UART 모듈과 개발용 PC는 USB 케이블을 이용하여 연결 개발용 PC의 장치관리자에서 UART 모듈을 통해 연결된 USB 포트 설정 UART 모듈 : 스케치의 작성된 문장을 개발용 PC의 시리얼 모니터에 뿌려주는 역할 담당

HBE-MCU-Multi의 UART 모듈의 통신 포트설정 HBE-MCU-Multi의 UART 모듈은 통신 속도가 115,200bps로 되어 있으므로 통신을 위하여 개발용 PC의 통신 포트를 ⓒ와 같이 다시 설정 HBE-MCU-Multi의 UART 모듈과 개발용 PC를 연결하면 ⓐ와 같이 새로운 통신 포트가 할당

아두이노 개발환경의 시리얼포트 변경 아두이노 개발환경에서 시리얼 통신을 위하여 도구의 시리얼 포트를 새로운 통신포트로 선택

예제 6.4의 주요개념 아두이노 Mega 보드의 COMMUNICATION 핀 중 USART1인 TX1(핀 18번)와 RX1(핀 19번)을 각각 UART 모듈의 TXD0와 RXD0 포트에 연결 UART 모듈의 USB 포트와 개발용 PC의 USB 포트를 연결 아두이노 보드 사용 모듈 COMMUNICATION 핀 19번(RX1) 출력 모드 UART 모듈 RXD0 18번(TX1) TXD0 [주의] - 작성된 스케치는 기존의 전송 UART0를 통하여 아두이노 Mega 보드에 전송 (아두이노 보드에 내장된 시리얼 포트를 통하여 기존의 방법으로 스캐치를 전송) - 스케치 업로드가 완료되면, UART0가 연결된 UBS 케이블을 제거하고, URAT 모듈을 통해 연결된 USB 케이블을 연결한 후 Mega 보드의 리셋 스위치를 눌러 보드를 초기화

예제 6.4의 스케치 byte text[ ] = "Hello! World!!\r\n"; 배열 text에 UART로 출력할 문자열 저장 void setup() { byte i; Serial1.begin(115200); 원하는 baud rate로 UART1을 초기화 while( text [ i ] ! = ‘ \ 0 ‘ ){ Serial1.write ( text [ i++ ] ); } delay(500); 배열 text의 문자열을 한 문자(1byte)씩 UART1으로 전송 Serial1.print("Hello! World!!\r\n"); 문자열을 UART1으로 전송 Serial1.println("Hello! World!!"); 입력 문자열에 0x0d(CR) 0x0a(LF)를 포함하여 setup()의 끝 void loop() { 전원 OFF까지 무한히 반복 실행

예제 6.4의 실행 앞에서는 USART0를 사용하였기 때문에 시리얼 포트가 "COM3"였지만, 이번 실습예제에서는 UART 모듈을 사용하기 때문에 시리얼 포트가 "COM4"이다.

예제 6.5 UART로 PC와 데이터 주고받기 아두이노 Mega 보드와 개발용 PC를 UART 통신을 연결하고, 개발용 PC에서 받은 문자열을 그대로 되돌려 전송해주는 프로그램 주요개념 아두이노 Mega 보드의 USART1 핀들을 UART 모듈에 연결 COMMUNICATION 핀들 중 "RX1"인 19번 핀을 UART 모듈의 RXD0에, TX1"인 18번 핀을 UART 모듈의 TXD0에 연결 UART 모듈의 USB 포트를 통해 개발용 PC의 USB 포트와 연결 setup()에서 USART1의 통신 속도인 115,200bps로 설정 if(Serial1.available()) 구문 사용 Serial1.available( )함수는 USART1으로 수신된 데이터가 수신 버퍼에 몇 개 있는가를 반환하는 함수이므로 구문은 문자가 수신되어야 조건이 "참"이 되어 Serial1.write(Serial1.read()); 명령을 수행 Serial1.read()함수로 수신 버퍼로부터 데이터를 읽어온 뒤 그 값을 다시 Serial1.write() 함수를 통해 전송 즉, PC로부터 수신된 데이터를 그대로 다시 PC로 전송하는 역할

예제 6.5의 스케치 void setup() { Serial1.begin(115200); Serial1.println("\r\nWelcome! \r\nUSART 1 Test Program"); Serial1.print("ECHO >> "); } void loop() { if(Serial1.available()) Serial1.write(Serial1.read());

연습과제 개발용 PC에서 문자를 입력하면 그 문자에 해당하는 아스키 코드(ASCII) 를 10진수로 PC에 다시 전송하여 표시하는 스케치를 작성하시오. (예: 시리얼 모니터 창에 'a'를 입력하고 <Send> 버튼을 누르면 'I received : 97'이표시 되도록 한다.) 개발용 PC에서 0에서 9사이의 숫자를 입력하면 그 값을 FND에 표시하고, 그 외 값을 입력하면 FND를 끄는 스케치를 작성하시오. 개발용 PC에서 문자열(2개 이상의 문자)을 입력하여 화면에 다시 표시하는 프로그램을 작성하시오. 개발용 PC에서 2개의 숫자열(A, B 값)을 입력 받아 두 수를 더하고, 빼는 계산 결과를 출력하는 프로그램을 작성하시오.

함수정리 아두이노 보드와 개발용 PC사이의 전송속도를 value로 설정 Serial.begin(value); 아두이노 보드와 개발용 PC사이의 전송속도를 value로 설정 -value : 4,800bps, 9,600bps, 14,400bps, 19,200bps, (예) Serial.begin(9600); 시리얼 통신 전송속도를 9,600bps로 설정 Serial.available( ) { A } 시리얼 모니터를 통하여 입력된 문자가 하나 이상 있는지 검사하여 입력이 있으면 A를 실행 Serial.print("text"); 시리얼 통신을 통하여 아두이노 보드에서 개발용 PC의 모니터로 text전송(줄 바꿈 하지 않음) -text : 문자열 (예) Serial.print("a = "); 개발용 PC의 모니터에 "a = "표시하고 줄 바꿈하지 않음

함수정리 Serial.println("text"); 시리얼 통신을 통하여 아두이노 보드에서 개발용 PC의 모니터로 text전송하고 줄바꿈 -text : 문자열 (예) Serial.println("Hello world!"); 개발용 PC의 모니터에 "Hello world!" Serial.println(rx, type); 시리얼 통신을 통하여 아두이노 보드에서 개발용 PC의 모니터로 데이터 rx를 type형식으로 전송 -rx : 1바이트 데이터 -type : DEC(ASCII코드), (예) Serial.println(rx, DEC); 1바이트 데이터에 해당하는 ASCII코드 출력 Serial.read( ); 시리얼 통신을 통하여 입력된 -value : a1~a2사이의 정수형 값 (예) rx = Serial.read( ); 시리얼 통신을 통하여 입력된 데이터를 변수 rx에 저장

Serial.print(val, format)의 사용 예 함수정리 Serial.print(val, format)의 사용 예 Serial.print(78) "78" 이 전송 Serial.print('N') "N" 이 전송 Serial.print("Hello world.") "Hello world." 전송 Serial.print(78, BIN) 2진수 ASCII로 "1001110" 전송 Serial.print(78, OCT) 8진수 ASCII로 "116" 전송 Serial.print(78, DEC) 10진수 ASCII로 "78" 전송 Serial.print(78, HEX) 16진수 ASCII로 "4E" 전송 Serial.print(1.23456, 0) "1" 전송, 실수 출력의 경우 소수점 이하 자릿수 지정 가능 Serial.print(1.23456, 2) "1.23" 전송, 소수점 둘째 자리까지 출력 Serial.print(1.23456, 4) "1.2346" 전송, 소수점 넷째 자리까지 출력 Serial.print(1.23456) "1.23" 전송, 두번째 인자가 없는 경우 소수점 둘째 자리 출력