미친해커

[Arduino] 디지털 핀을 시리얼 포트로 사용하기 (SoftwareSerial) 본문

Arduino

[Arduino] 디지털 핀을 시리얼 포트로 사용하기 (SoftwareSerial)

미친해커 2022. 1. 16. 00:12
반응형

아두이노(우노)를 보면 기본적으로 Tx/Rx 포트가 존재한다. 이는 UART 방식 통신을 하기 위한 포트이다. 다른 말로 시리얼 통신이라고 불린다. 이 포트를 통해 우리는 PC 또는 기타 장치와 UART 방식의 시리얼 통신을 할수 있다. 우리가 아두이노에 프로그래밍한 코드를 업로드 하는 것도 이 시리얼 통신을 활용해 하는 것이다. 여기서 Tx/Rx 포트란?

Tx : Tranmission
Rx : Receiver

 

즉 Tx는 데이터를 보내는 포트이며 Rx는 데이터를 받는 포트이다. 아두이노에는 다음과 같은 곳에 Tx/Rx 포트가 존재한다.

이렇게 아두이노에도 Rx/Tx 포트가 존재한다. 우리는 이 시리얼 포트로 프로그래밍한 코드를 업로드한다. 하지만 여기서 몇몇 사람들은 이런 의문을 던질 수도 있다. '우리가 코드를 업로드 할때는 저 Rx/Tx 포트를 사용하지 않고 아두이노 USB 케이블을 사용하지 않나?' 하지만 Rx/Tx 포트를 사용하는 것이 맞다. 아두이노 USB 케이블을 이용한 시리얼 통신과 저 Rx/Tx 시리얼 통신은 같은 포트를 사용한다. 그렇기 때문에 우리가 아두이노 우노에서 사용할 수 있는 시리얼 포트는 1개이다. 그렇다면 아두이노 우노는 2개 이상의 장치와 통신하지 못한다. 하지만 아두이노에 있는 디지털 핀을 시리얼 포트로 사용한다면 2개 이상의 장치와 통신할 수 있게된다. 그것을 도와주는 라이브러리가 SoftwareSerial 이다.

 

Arduino - SoftwareSerial

The Arduino hardware has built-in support for serial communication on pins 0 and 1 (which also goes to the computer via the USB connection). The native serial support happens via a piece of hardware (built into the chip) called a UART. This hardware allows

www.arduino.cc

SoftwareSerial 라이브러리는 아두이노의 디지털 핀을 이용하여 시리얼 통신을 할수 있도록 도와준다.

예제 코드

#include <SoftwareSerial.h>

#define PIN_TX 2
#define PIN_RX 3

SoftwareSerial Serial2(PIN_TX, PIN_RX);

void setup()
{
    Serial.begin(115200);
    Serial2.begin(115200);
}

void loop()
{
    if (Serial2.available() > 0)
    {
        String string = Serial.readString();
        Serial.print(string);
    }
}

SoftwareSerial 클래스의 생성자는 다음과 같다.

SoftwareSerial(RxPin, TxPin, inverse_logic)

 

그런데 위 코드를 보면 첫번째 인자로 PIN_TX가 들어가있다. 이는 잘못된 것이 아니라. 시리얼 포트에서 첫번째 인자는 데이터를 수신할 핀이다. 그렇다면 다른 장치의 Tx와 연결해줘야 하는 것이다. 다음 그림을 보면 이해가 보다 쉬울 것이다.

즉 다른 장치의 Tx가 디지털 핀 2번의 연결되어 있고 Rx는 디지털 핀 3번에 연결되어 있다. 그러면 SoftwareSerial 입장에서 RxPin은 디지털 핀 2번이되고 TxPin은 디지털 핀 3번이 된다. 함수와 사용법은 일반적인 Serial 클래스와 같다. 그 외에는 위 SoftwareSerial 라이브러리 홈페이지를 참고하면 좋을 것 같다.

반응형
Comments