본문 바로가기

ESP32

ESP32의 시리얼 포트(UART) 사용 방법

반응형

블로그 작업, 글쓰기, 이런 것들이 대단히 하찮게 느껴진다. 예전처럼 재미가 붙지 않는다. 가속도도 붙지 않고 귀찮은 일이 되어가는 중이라는 현실적인 생각이 든다. 언제쯤 다시 제정신으로 돌아올까. 자신이 무얼 하는지 모른다면, 적들은 더더욱 아무것도 모른다. 그러니 적들이 실수할 때는 절대 방해하지 말고 내버려 둔다. 

 

이 자료의 출처에 보면 ESP32 강좌를 참고하기 위해 포스팅을 한다.

 

 

ESP32의 시리얼 포트(UART) 사용 방법

 

UART, 또는 아두이노 세계에서 흔히 알려진 직렬 포트는 장치 간 비동기 데이터 송수신을 가능하게 하는 통신 프로토콜 입니다.

 

SPI나 I2C와 같은 동기식 통신과는 달리, UART는 추가적인 클록 신호를 필요로 하지 않습니다 . 이러한 특징 덕분에 UART는 매우 다양한 응용 분야에서 유연하고 널리 사용되는 통신 방식입니다.

 

UART 포트를 사용하면 다른 마이크로컨트롤러, 컴퓨터, 센서, GPS 모듈, 일부 유형의 디스플레이 등과 같은 다른 장치와 통신할 수 있습니다.

 

ESP32의 UART

 

ESP32는 사용 중인 모델에 따라 하나 이상의 UART를 가지고 있습니다. 구체적으로는 다음과 같습니다.

 

  • ESP32와 ESP32-S3에는 3개의 UART가 있습니다.
  • ESP32-S3와 ESP32-C3에는 2개의 UART가 있습니다.

이 포트들은 UART0, UART1, UART2라고 불립니다. 각 포트는 RX, TX, CTS, RTS의 네 개의 핀을 사용할 수 있습니다 (하지만 아두이노 환경에서는 RX와 TX만 사용합니다) .

 

ESP32가 기존 아두이노와 다른 또 다른 점은 멀티플렉서 덕분에 성능 저하 없이 UART를 어떤 핀으로든 재할당할 수 있다는 것입니다.

 

UART는 특정 핀을 사용하도록 사전 구성되어 제공됩니다. 하지만 우리는 핀을 변경할 수 있으며, 때로는 변경해야 합니다 .

 

이것들은 ESP32의 기본 설정값입니다.

 

UART 포트 TX RX RTS CTS
UART0 1 3 22 19
UART1 10 9 11 6
UART2 17 16 7 8

 

 

보시다시피, UART1의 TX 및 RX 핀은 SPI 플래시 메모리 연결에 사용되는 핀과 일치합니다 . 따라서 UART를 사용하려면 해당 핀을 재할당해야 합니다.

 

다음은 ESP32-S3의 기본 설정값입니다.

 

UART Port TX RX RTS CTS
UART0 49 50 15 16
UART1 17 18 19 20
UART2 - - - -

 

 

이 경우 UART2는 기본적으로 어떤 핀에도 연결되어 있지 않습니다 . 따라서 사용하려면 원하는 핀으로 다시 할당해야 합니다.

 

아두이노 환경에서 ESP32의 UART를 사용하는 방법

 

아두이노 환경에서 ESP32의 UART를 사용하는 것은 (우리가 무엇을 하고 있는지 명확히 알고 있다면) 그다지 복잡하지 않습니다 .

 

기본적으로 print(), println(), read(), available() 등 데이터를 송수신하는 데 사용하는 함수들을 포함해, 일반적인 아두이노에서 사용할 수 있는 것과 동일한 기능들을 이용할 수 있습니다.

 

Serial.println("Hello, UART!");

 

ESP32에서 여러 개의 UART 사용하기

 

유일하게 신경 써야 할 부분은 UART1과 UART2 핀 설정입니다. 간단히 말해서, 아두이노 메가처럼 ESP32 코어는 세 개의 UART를 Serial, Serial1, Serial2로 정의합니다.

 

"일반" 시리얼 포트 는 UART0의 별칭이며 문제없이 작동합니다 . 이 포트는 보드의 USB를 통한 프로그래밍 및 통신에 사용되므로 핀을 변경할 필요도 없고 권장하지도 않습니다 .

 

Serial1과 Serial2를 사용할 때는 상황이 달라집니다. ESP32 모델과 보드에 따라 Serial1 및 Serial2 구문이 작동하지 않는 것은 정상적인 현상입니다 .

 

여러 개의 UART를 사용하려면 핀을 수동으로 정의하는 것이 가장 좋습니다 . 실제로 UART1이나 UART2를 사용할 때는 어떤 핀에 연결할지 지정해야 합니다.

 

다행인 점은 이들을 연결하는 것이 매우 쉽다는 것입니다. 이를 위해서는 라이브러리가 필요한데 HardwareSerial, 이 라이브러리가 바로 아두이노에서 '시리얼'이라고 부르는 기능의 핵심입니다.

 

필요한 단계는 다음과 같습니다.

 

  • 라이브러리를 포함하세요
  • 새로운 HardwareSerial을 정의합니다.
  • 다음으로 초기화하세요begin(...)

다음은 예시입니다.

 

include <HardwareSerial.h>

HardwareSerial MySerial(1); // define a Serial for UART1
const int MySerialRX = 16;
const int MySerialTX = 17;

void setup() 
{
	// initialize the Serial to the pins
    MySerial.begin(11500, SERIAL_8N1, MySerialRX, MySerialTX);
}

void loop() 
{
	// here we could use our MySerial normally
    while (MySerial.available() > 0) {
        uint8_t byteFromSerial = MySerial.read();
        //and whatever else
    }
   
    MySerial.write(...);
}

 

 

알았지? 문서 시작 부분의 링크를 참고하도록 한다. 세상은 지루하고, 또 지루하다. 더욱 지겹게 지루해진다.

 

반응형

캐어랩 고객 지원

취업, 창업의 막막함, 외주 관리, 제품 부재!

당신의 고민은 무엇입니까? 현실과 동떨어진 교육, 실패만 반복하는 외주 계약, 아이디어는 있지만 구현할 기술이 없는 막막함.

우리는 알고 있습니다. 문제의 원인은 '명확한 학습, 실전 경험과 신뢰할 수 있는 기술력의 부재'에서 시작됩니다.

이제 고민을 멈추고, 캐어랩을 만나세요!

코딩(펌웨어), 전자부품과 디지털 회로설계, PCB 설계 제작, 고객(시장/수출) 발굴과 마케팅 전략으로 당신을 지원합니다.

제품 설계의 고수는 성공이 만든 게 아니라 실패가 만듭니다. 아이디어를 양산 가능한 제품으로!

귀사의 제품을 만드세요. 교육과 개발 실적으로 신뢰할 수 있는 파트너를 확보하세요.

지난 30년 여정, 캐어랩이 얻은 모든 것을 함께 나누고 싶습니다.

카카오 채널 추가하기

카톡 채팅방에서 무엇이든 물어보세요

당신의 성공을 위해 캐어랩과 함께 하세요.

캐어랩 온라인 채널 바로가기

캐어랩