ESP8266 모듈의 Serial 통신 속도 변경

ESP8266은 생산 당시에 115,200bps로 기본 세팅이 되어 있습니다.

하지만 Arduino와 Serial 통신을 할 경우 115200bps에서 오류가 빈발하여, 일반적으로 9600bps로 속도를 낮춰서 이용하는 것이 일반적입니다.

속도가 느려서 문제가 되지는 않습니다. 일반적으로 아두이노 기기에서 인터넷으로 주고 받는 정보가 매우 작기 때문에(단순히 센서로 측정한 값 정도죠?) 속도는 중요하지 않습니다.

그럼, ESP8266 모듈의 Serial 통신속도를 변경해보도록 하겠습니다.

STEP 1: 모듈-PC 간의 Serial 통신 연결

먼저, 통신속도를 변경하기 위해 ESP8266 모듈과 PC를 Serial 통신으로 바로 연결할 것입니다.

옛날 PC는 RX, TX 신호를 받을 수 있는 Serial 통신 포트가 있었습니다.

Amazon.com: DTECH DB9 RS232 Serial Cable Male to Female Extension Null  Modem Cord Cross TX RX line for Data Communication (5 Feet, Black):  Computers & Accessories
Serial 케이블

보통 위와 같은 케이블로 연결합니다. 옛날 모니터 RGB포트와 유사하게 생겼죠 (Serial 케이블은 9pin이고, RGB 케이블은 15pin 이므로 서로 같은 케이블은 아닙니다.)

하지만 최근에 생산되는 PC는 Serial 포트가 없는데요. 이 경우는 2가지의 방법을 이용할 수 있습니다.

  • 방법 1. PC – Arduino – 모듈 순으로 연결하여, Arduino를 경유하여 통신하는 방법
  • 방법 2. USB-Serial Converter를 사용하는 방법

방법 1. PC – Arduino – 모듈 순으로 연결하여, Arduino를 경유하여 통신하는 방법

이 방법은 널리 이용되는 방법입니다.

이 경우는 USB 포트를 시리얼 포트로 이용할 수 있게 해주는 USB to Serial (또는 USB to UART TTL) Converter를 이용해야 합니다.

준비물

  • Arduino UNO (기타 다른 보드도 가능하지만, 사용방법이 다를 수 있습니다.)
  • ESP8266 모듈(ESP-01, ESP-08, ESP-12 등)
  • Arduino IDE

먼저 다음과 같이 연결합니다.

ESP8266Arduino
RXD2~D13, A0~A5 (UNO)
D2~D53, A0~A15 (Mega)
TXD2~D13, A0~A5 (UNO)
D10~D15, D50~D53, A8~A15 (Mega)

SoftwareSerial을 이용해서 통신을 할 것인데, Arduino UNO와 달리 Arduino Mega는 사용가능한 핀이 정해져 있습니다. 위에 나온 핀들 중에서 하나를 선택하여 RX, TX를 연결합니다.

#include <SoftwareSerial.h>

SoftwareSerial Serial_Soft(8, 9); // 이 경우는 RX=8, TX=9

void setup() {
  Serial_Soft.begin(115200); // 아두이노<->모듈 간의 통신 속도
  Serial.begin(115200);  // 아두이노<->PC 간의 통신 속도
}

void loop() {
  int rec;
  if (Serial.available() > 0) {
    rec = Serial.read();
    Serial_Soft.write(rec);
  }
  if (Serial_Soft.available() > 0) {
    Serial.write(Serial_Soft.read());
  }
}

위 코드를 그대로 올리시면 안 됩니다. 본인의 상황에 맞추어 일부 변경해야 합니다.

  • 줄 3: RX와 TX를 본인이 연결한 포트로 변경하세요.
  • 줄 6: ESP8266의 기본 통신 속도는 115200bps입니다. 따라서 위 통신속도에 115200을 넣어주었습니다.
  • 줄 7: 아두이노는 모듈의 신호를 받아서 즉시 PC로 전송을 해주고 있으므로, 아두이노<->PC간의 속도도 동일하게 115200으로 맞춰줘야 합니다.

그 다음 코드를 업로드 합니다. 위 코드는 SoftwareSerial로 아두이노가 모듈로 부터 받은 신호들을 그대로 다시 PC로 출력하는 코드입니다. 즉, 아두이노는 신호를 토스하는 역할만 합니다. 이렇게 하면 PC에서 바로 모듈과 통신을 할 수 있게 되는 셈이죠?

그러면 이제 STEP 2로 갑니다!

방법 2. USB-Serial Converter를 사용하는 방법

방법 1에서와 달리 방법 2는 Arduino 보드 대신에 USB-Serial Converter를 사용합니다. (이 경우는 Arduino 보드에 코드를 업로드하는 과정이 없기 때문에, 사용이 더욱 간단합니다.)

먼저 들어가기 전에 아래 내용을 살펴보시기 바랍니다.

  • CH340 칩셋을 사용하는 HW-597에서는 정상작동하지 않았습니다. 다른 컴에서는 또 작동하네요. 원인을 찾고 있습니다.
  • CP2102 칩셋을 사용하는 제품에서는 잘 작동했습니다.

CH340 칩셋의 컨버터에서 제대로 작동하지 않는 이유에 대해서는 아직 파악을 하지 못했습니다. [방법1]을 이용하실 것을 추천합니다.

준비물

  • USB-Serial Converter – CP2102
  • ESP8266 모듈(ESP-01, ESP-08, ESP-12 등)
  • Hercules 3.2.8 Serial 통신 프로그램 [다운로드]
    (Arduino IDE에 내장된 Serial Monitor 또한 사용 가능)

하드웨어 연결

CP2102

USB-Serial Converter의 5V(또는 3V3), TXD, RXD, GND를 ESP 모듈과 연결합니다. ESP 모듈의 작동전압이 5V인 경우는 5V에 연결하고, 3.3V인 경우는 3V3에 연결합니다. 제가 가지고 있는 모듈은 LDO가 있어 5V, 3.3V를 모두 지원하기 때문에 아무곳에서나 연결할 수 있었습니다. 하지만 일반적으로 ESP모듈의 기본 작동 전압은 3.3V 입니다.

다음과 같이 연결합니다.

USB-Serial ConverterESP8266 Module
RXDTX
TXDRX
5V / 3V3VCC
GNDGND

주의해야 할 점은 RX와 TX를 교차로 연결해줘야 한다는 점입니다.

rx tx cross 이미지 검색결과

STEP 2: Serial 통신으로 모듈에 AT 명령어 전송

Serial 통신은 여러 가지 프로그램으로 가능합니다. Arduino IDE가 설치되어 있다면, Arduino IDE의 Serial 모니터를 이용하시면 됩니다. 만일 설치가 되어 있지 않다면, putty나 Hercules를 이용할 수 있습니다.

여기서는 Arduino IDE를 이용한 방법과 Hercules를 이용한 방법을 설명해드리겠습니다.

먼저, 장치의 COM Port를 확인합니다. 이 과정은 [여기]를 참고하시면 됩니다.

방법 1. Arduino IDE를 통한 Serial 통신

COM Port 선택

장치의 COM Port를 선택합니다.

그 다음 오른쪽 상단의 [시리얼 모니터] 버튼을 클릭합니다.

Serial 모니터의 보드레이트를 115200 보드레이트로 선택합니다. (현재 ESP8266 모듈이 115200bps로 설정이 되어 있기 때문)

그리고 왼편에 Both NL & CR을 선택합니다. (Enter로 전송을 하면, 작성한 문자열의 끝에 줄바뀜 표기로 NL, CR을 모두 넣겠다는 의미입니다.)

정상적으로 연결되었는지 확인하기 위해, “AT”를 입력하고 [Enter]를 누릅니다. “OK”라는 메시지가 출력되면 올바르게 잘 연결된 것입니다.

자, 이제 우리가 진짜 하려는 ESP8266 모듈의 속도를 바꿔보겠습니다. WiFi 속도를 9600bps로 바꾸는 명령어는

AT+UART_DEF=9600,8,1,0,0

입니다. 이를 입력하고 나서 “OK”가 나오면 정상적으로 잘 속도가 바뀐 것입니다. 이제 9600bps로 속도가 바뀌었으므로, 현재 115200bps에서는 통신이 더 이상 안 될 것입니다.

“AT”명령어를 입력해보세요. 아무런 응답이 없는 것이 정상입니다.

[성공]!

만일 정상작동을 확인하고 싶다면, 보드레이트를 9600bps으로 변경해보면 됩니다.

  • Arduino를 거쳐서 통신 중이라면, 위 소스코드의 6, 7번째 줄을 115200에서 9600으로 변경해서 다시 업로드해야 합니다.
  • USB to Serial Converter를 이용 중이라면, 시리얼 모니터 하단의 보드레이트만 9600bps로 바꾸면 됩니다.

“AT” 명령어를 입력해 보시면 됩니다. OK가 나온다면 보드레이트가 9600bps로 잘 바뀐 것입니다! 끝.

방법 2. Hercules를 통한 Serial 통신

이제 Hercules 실행합니다.

다음 순서로 진행합니다.

  1. [Serial] 탭에 들어간다.
  2. USB-Serial Converter의 통신 포트를 선택한다. (통신포트는 [장치 관리자]에 들어가서 확인 가능)
  3. Name에 앞서 확인한 COM 포트 번호를 선택
  4. Baud는 모듈에 현재 세팅되어 있는 속도를 선택 (ESP8266 모델의 공장출고 초기값은 115200bps 입니다.)
  5. [Open] 클릭

화면에 “Serial port COM3 opened”가 나타나면, 접속에 성공한 것입니다.

이 메세지 하단에 “AT+GMR”를 입력하고 [Enter]를 눌러봅니다.

접속 테스트

이와 유사한 메시지가 나타난다면 접속에 성공한 것입니다.

만약에 제대로 작동하지 않는다면?

“AT+GMR”을 오타 없이 한번에 입력해야 합니다. 중간에 오타가 발생해서 [Backspace]를 눌렀다면, 화면에는 AT+GMR이 정확하게 입력되었다 할지라도 오류를 야기시킵니다.

그래도 제대로 작동하지 않는다면 다른 사람이 이미 baud-rate를 바꿨을 가능성이 있습니다. 9600bps로 다시 시도해보세요.

baud-rate 변경

자, 이제 우리가 진짜 하려는 “baud-rate” 변경을 해봅시다.

ESP8266 모듈에서 baud-rate를 변경하는 명령은 “AT+UART_DEF=####,8,1,0,0″입니다. ####에 변경할 속도를 입력하시면 됩니다.

우리는 9600bps로 변경할 것이므로, “AT+UART_DEF=9600,8,1,0,0″을 입력합니다.

오타 없이 한번에 입력해야 합니다! [Backspace]를 눌러도 화면에만 지워질 뿐입니다. 타이핑에 자신이 없다면 [복사]-[붙여넣기]를 이용하세요.

OK가 출력되었다면~ baud-rate 변경은 성공한 겁니다!

이제는 무얼 입력해도 글자가 써지지 않을 것입니다. 왜냐하면 ESP 모듈은 9600bps로 통신이 설정되어 있는데, 우리는 115200bps의 속도로 접속을 했기 때문이죠.

그러면, 9600bps로 속도를 바꿔서 다시 접속합니다.

Baud에서 9600을 선택하고 [Open]을 누릅니다.

그럼, 9600bps에서 잘 통신을 하는지 확인하기 위해 “AT+GMR”로 명령을 보내보겠습니다

이야~ 잘 되네요~ 성공! 끝.


답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다