SoftwareSerial.h 라이브러리 : 디지털 핀을 시리얼 포트로 사용
시리얼 포트가 부족 할 때 SoftwareSerial 클래스를 사용하여 시리얼 통신 포트를 추가하는 방법과 예제
에 대해 작성하였습니다.SoftwareSerial.h
SoftwareSerial 은 아두이노 보드의 디지털 핀을 시리얼 포트로 사용할 수 있게 해주를 라이브러리입니다. Arduino Uno 보드에는 기본적으로 1개의 시리얼 포트만 제공되지만, SoftwareSerial 라이브러리를 사용하여 시리얼 포트를 확장이 가능 합니다. 1
아두이노 우노 시리얼 포트 확장
라이브러리 추가 방법
SoftwareSerial.h 은 아두이노 설치시 포함되어 있어, 별도의 라이브러리 설치 과정 없이 코드 선언 부에 #include <SoftwareSerial.h> 선언만 해주시면 됩니다.
SoftwareSerial 사용 방법
디지털 핀을 시리얼 통신 포트로 사용 하는 방법은 아래와 순서로 진행 하시면 됩니다.
- 시리얼 포트 초기화 예시
SoftwareSerial mySerial(2,3): RX 2번핀, TX 3번핀으로 사용하는 mySerial 객체 생성mySerial.begin(9600): mySerial 의 Buadrate 를 9600 으로 설정 후 시리얼 포트 활성화- 시리얼 출력 : 기존 Serial 클래스와 사용법 동일
mySerial.write(): 바이트 단위 데이터 출력mySerial.print(): 문자열 출력mySerial.println(): 개행문자가 포함된 문자열 출력- 시리얼 수신 : 기존 Serial 클래스와 사용법 동일
mySerial.available(): 시리얼 수신 버퍼에 데이터가 있는지 확인-
mySerial.read(): 시리얼 수신 데이터 1바이트를 읽고, 수신 버퍼에서 읽은 데이터를 지움
SoftwareSerial 클래스
Syntax
- SoftwareSerial objectName(rxPin, txPin);
Parameters
- objectName : 지정된 rxPin, txPin 의 시리얼 객체 이름
- rxPin : RX 로 사용될 핀 번호
- txPIN : TX 로 사용될 핀 번호
Returns : 반환 값 없음
Example
SoftwareSerial portOne(2,3): 2(RX),3(TX)번 핀으로 시리얼 통신하는portOne객체 생성SoftwareSerial portTwo(4,5): 4(RX),5(TX)번 핀으로 시리얼 통신하는protTwo객체 생성
SoftwareSerial 써먹어보기
예제1 : SoftwareSerial 로 PC "Hello World!" 출력
SoftwareSerial 로 시리얼 포트 생성 후 1초 간격으로 "Hello World" 를 하는 코드 입니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | #include<SoftwareSerial.h> const int rxPin = 2; const int txPin = 3; SoftwareSerial mySerial(rxPin, txPin); void setup(){ mySerial.begin(9600); } void loop(){ mySerial.println("Hello World!"); delay(1000); } | cs |
SoftwareSerial로 PC와 시리얼 통신을 하기 위해서는 UART to USB 보드가 필요합니다. UART to USB 보드는 쇼핑사이트에서 UART to USB, CP2102, FT232R 등의 키워드를 검색하면 쉽게 찾으실 수 있습니다. 사용하시는 UART to USB 보드 바다 핀맵이 다르기 때문에 확인이 필요합니다. 아두이노의 TX는 변환보드의 RX, 아두이노의 RX는 변환보드의 TX에 연결되어야 합니다.
Arduino Uno 보드와 UART to USB 보드 연결
예제1 프로그램 실행 결과는 아래와 같습니다. 시리얼 모니터 프로그램은 Hercules 를 사용하였습니다. 2
예제2 : PC -> Software Serial -> Serial -> PC
아래 그림과 같이 PC에서 출력 된 데이터가 SoftwareSerial 포트와 Serial 포트를 거쳐 PC 로 되돌아 오는 프로그램입니다. 이 방법을 응용하여 UART로 AP명령을 하는 모듈 제어 및 디버깅이 가능합니다. 참고해주세요.
예제2 데이터 흐름
코드
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #include<SoftwareSerial.h> const int rxPin = 2; const int txPin = 3; SoftwareSerial mySerial(rxPin, txPin); int iReceiveData; void setup(){ Serial.begin(9600); mySerial.begin(9600); mySerial.println("Echo Program Start...\n"); } void loop(){ if(mySerial.available()>0){ mySerial.write(mySerial.read()); } if(Serial.available()>0){ Serial.write(Serial.read()); } } | cs |
예제2 회로 연결
실행 결과
Hercules 프로그램의 Recieved/Sent Data 창에 보라색은 키보드를 입력하여 송신되는 데이터, 검은색은 시리얼 포트로 수신된 데이터 입니다.
SoftwareSerial 참고사항
SoftwareSerial.h 라이브러리는 디지털 핀을 소프트웨어 적으로 시리얼 통신이 가능 하도록 구현 하여 아래의 제약 사항이 있습니다. 프로그래밍에 참고해주세요.
SerialEvent()와 같은 수신 인터럽트 지원하지 않음- 수신 인터럽트를 사용하기 위해 EXTI 인 2,3 번 핀에 RX 핀을 설정하여 별도로 구현 가능 함
- 시리얼 포트를 여러개 사용하는 경우 한번에 하나의 시리얼 포트에서만 출력이 가능
- Arduino Board 의 종류 별로 SoftwareSerial 사용 가능 핀이 정해져 있음 3
마무리
'Embedded > Arduino' 카테고리의 다른 글
아두이노 팁 #3. Visual Studio Code로 아두이노 코딩 사용법과 나노팁 (0) | 2020.07.16 |
---|---|
아두이노 팁 #2. Visual Studio Code로 아두이노 프로그래밍 장점 (feat. Arduino IDE 불편해) (1) | 2020.07.15 |
아두이노 강좌 #14 타이머 인터럽트 MsTimer2.h (1) | 2020.07.13 |
아두이노 강좌 #13 아날로그 출력 PWM 와 analogWrite() (0) | 2020.07.11 |
아두이노 강좌 #12 아날로그 입력 analogRead() 와 map() 함수 (1) | 2020.07.11 |