ESP32 DevKit
ESP-WROOM-32 core를 장착하고 듀얼 CPU, Clock Speed가 240 Mhz인
아두이노 IDE 개발환경에서 사용할 수 있는 개발보드이다.
보드의 성능과 각종 기능 및 GPIO 핀 갯수등이 NodeMcu보다 좋지만,
NodeMcu와는 달리 아두이노 우노에서 사용했던 몇몇 라이브러리등은 바로 사용할 수가 없고
라이브러리 이름이나 설정방법등이 상이한게 있어
ESP32 아두이노 코어에서 제공하는 기본 예제를 확인하고 코딩해야만 한다.
이런 불편한 점이 있기는 하지만 저렴한 가격대의 성능과 확장성 면에서
이보다 좋은 개발보드는 없을 것 같다.
시리얼 통신의 경우
아두이노 우노는 하드웨어 시리얼 1개를 제공하고
소프트웨어 시리얼 라이브러리를 통해 추가로 시리얼을 사용할 수 있도록 했다면
ESP32는 하드웨어 시리얼 3개를 제공하면서 소프트웨어 시리얼 라이브러리 대신
하드웨어 시리얼 라이브러리를 통해 시리얼 관련 설정을 하도록 하고 있다.
ESP32에는 아두이노에서 익숙한 소프트웨어 시리얼 라이브러리가 없는 것이다.
#include <HardwareSerial.h> // 하드웨어 시리얼 라이브러리
ESP32에서 시리얼을 사용하기 위해서는 하드웨어 시리얼을 상황에 맞게 설정해주는 방법을 알아아만 한다.
Serial (UART0),
Serial1 (UART1),
Serial2 (UART2) 3개의 하드웨어 시리얼을 제공한다.
시리얼 통신에 할당된 기본 핀번호
GPIO01 TX0 - HardwareSerial (0), 핀번호 변경 불가
GPIO03 RX0 - HardwareSerial (0), 핀번호 변경 불가
GPIO10 TX1 - HardwareSerial (1), FLASH 연결에 사용, 핀번호 변경 가능
GPIO09 RX1 - HardwareSerial (1), FLASH 연결에 사용, 핀번호 변경 가능
GPIO17 TX2 - HardwareSerial (2), 핀번호 변경 가능
GPIO16 RX2 - HardwareSerial (2), 핀번호 변경 가능
하지만 GPIO 6, 7, 8, 9, 10, 11 (the integrated SPI flash)은
플레시 메모리연결에 할당되어 있어서 해당핀을 사용할 수 없는데,
하드웨어 Serial1의 TX1과 RX1에 할당된 GPIO 핀의 번호는 10번과 9번이다.
이 핀을 이용해서는 Serial1을 사용할 수 없다
.
그러므로 Serial1을 위한 TX1과 RX1에 플래시 메모리에 사용되지 않은 핀을 할당해주어야 한다.
이를 위한 규칙이 있는데 아래와 같다.
1. 시리얼 장치의 이름으로 Serial, Serial1, Serial2를 사용하고
기본 할당핀을 사용 할 경우 setup() 함수에서만 시작하면 된다.
Serial.begin(115200); // UART0 -> usb 연결과 공유, 핀번호 변경 불가
Serial1.begin(115200); // 통신에 할당된 기본핀이 플래시 메모리에 할당된 GPIO 10번과 9번이므로 사용불가
Serial2.begin(115200); // UART2
2. 시리얼 장치의 이름을 Serial, Serial1, Serial2이 아닌 사용자 이름을 사용할 경우
장치명을 선언해주고 setup() 함수에서 시작시 핀번호를 포함하는 통신 규칙을 설정해주어야 한다.
HardwareSerial mySerial(1); // 장치명 선언(시리얼 번호)
HardwareSerial dfSerial(2); // 장치명 선언(시리얼 번호)
// (통신속도, UART모드, RX핀번호, TX핀번호) - 핀번호 지정가능
mySerial.begin(115200,SERIAL_8N1, 4, 2);
// 핀번호는 기본으로 할당된 번호도 사용할 수 있다.
dfSerial.begin(115200, SERIAL_8N1, 16, 17);
하드웨어 시리얼 3개를 동시에 사용하기 위해서는
Serial1을 사용자 장치명으로 선언해주고 시작시 규칙을 설정 해주어야 하는데,
이 때에는 사용상 주의가 필요하다.
스케치 업로드시 발생할 수 있는 "A fatal error occurred: Timed out waiting for packet header" 에러
상기에러는 하드웨어 "Serial1"을 사용하기 위해
gpio 6 ~ 11번을 제외한 핀번호를 할당하고 사용할 때
전원이 들어가 있는 연결된 장치의 통신용 핀이 스케치 업로드시 연결되어 있을경우 발생 한다.
기본 할당된 시리얼 통신용 핀에서는 연결장치가 연결되고
전원이 들어가 있는 상태에서도 오류없이 스케치 업로드가 잘된다.
mySerial.begin(115200,SERIAL_8N1, 4, 2); // "Serial1"을 시리얼 통신용 사용자 핀번호(4, 2)로 지정하고 전원이 인가된 연결장치의 통신선이 연결되어 있다. -> 스케치 업로드시 오류 발생
해결 방법
1. 꼭 필요한 경우가 아니면 하드웨어 시리얼 1번을 사용하지 않는다.
2. 시리얼 1번을 사용자 핀번호 지정으로 사용할 경우 연결장치의 전원을 끄거나
시리얼 통신의 연결을 제거하고 스케치를 업로드 해본다.
출처: https://postpop.tistory.com/35
UART(Serial) 통신
ESP32에는 Serial 통신 핀이 3가지가 있지만
그중 한 가지는 업로드때 사용해서 못 쓰고,
다른 한가지는 쓸 수 없는 핀에 연결되어 있어서 다른 방법으로 핀을 바꿔줘야 쓸 수 있어서
쉽게 쓸 수 있는 Serial 통신 핀은 한 가지밖에 없다.
Serial
RX : RXD
TX : TXD
Serial 1 *이거 쓰고 싶으면 핀을 바꿔야 한다.
RX : SD2
TX : SD3
Serial2
RX : 16번
TX : 17번
*컴퓨터에서 소스코드를 업로드할 때 RXD, TXD를 이용해서 통신하고,
SD2, SD3는 ESP32 Flash 메모리와 연결되어있어서
RXD, TXD, SD2, SD3를 이용하면 업로드 오류가 날 수도 있어서
ESP32에서는 보통 Serial2를 이용해야 한다.
*ESP32에서는 SoftwareSerial을 지원하지 않음
#include <HardwareSerial.h>
HardwareSerial mySerial(2); //3개의 시리얼 중 2번 채널을 사용
void setup() {
Serial.begin(115200); //기존의 기본 시리얼
mySerial.begin(115200, SERIAL_8N1, 12, 13);
//추가로 사용할 시리얼. RX:12 / TX:13번 핀 사용
}
void loop() {
if(mySerial.available() > 0)
{
String command = mySerial.readStringUntil('\n');
//추가 시리얼의 값을 수신하여 String으로 저장
Serial.println(command);
//기본 시리얼에 추가 시리얼 내용을 출력
}
}
[출처] [ESP32, Serial] ESP32 시리얼 통신 (1)|작성자 초초
'ESP32' 카테고리의 다른 글
ESP32 웹 서버를 만드는 방법 (0) | 2022.02.21 |
---|---|
ESP32 + XY-K485 + PZEM-016 Modbus RTU 마스터 RS485(라이브러리 제외) (0) | 2021.09.06 |
How to work with RS485 interface on ESP32 (0) | 2021.08.23 |
Inexpensive RS485 module with ESP32 (hardware serial) (0) | 2021.08.23 |
Connection of Thermocouple (K-Type) to ESP8266/ESP32/Arduino (0) | 2021.08.23 |