최근 개발을 하면서 Esp32 S3 모듈을 사용하게 되었다.
2025.04.16 - [개발] - 아두이노 IDE에서 Esp32 s3를 USB-OTG로 코딩하는 방법에 관하여
아두이노 IDE에서 Esp32 s3를 USB-OTG로 코딩 하는 방법에 관하여
Eps32 s3란? Esp32 s3는 Espressif 사의 Iot용 muc이다. 자세한 사양은 240MHz로 동작하는 dual-core XTensa LX7 MCU, 512 KB SRAM, s내장 2.4 GHz, 802.11 b/g/n Wi-Fi, Bluetooth 5 (LE) 연결을 지원한다. 또한 각각을 컨드롤 할 수
kimsj5025.tistory.com
위 글의 연장선인데, 이번 글에서는 esp32 s3계열의 칩을 usb d-,d+로 연결했을 때, 시리얼 모니터를 보는 방법과 esp32 내부의 uart0의 구조에 대해서 내가 공부한 내용을 정리해 보았다.
UART0와 USB OTG
esp32에는 내장 usb CDC 기능이 내장되어 있다. 따라서 우리는 이 기능을 통해 UART0에 접근할 수 있다.
쉽게 설명하자면,
나는 esp32말고 좀 딥하게 아두이노 커스텀을 해 본 경험이 있는데 이때에 코드를 업로드하고 시리얼 모니터를 통해 디버깅을 할 때,
예를 들어 내가 ATmega328p에 코드를 업로드하고 이 칩의 시리얼 모니터를 볼 때면,
이렇게 생긴 USB to TTL 시리얼 컨버터를 구매하여 사용하였다.
이 컨버터는 MCU(프로세서, ATmega328p나 esp32 같은)의 UART 신호를 usb에서 읽을 수 있도록 바꾸어 주는 모듈이다. 따라서 이 컨버터를 컴퓨터에 연결하고 아두이노 IDE, PlatformIO를 통해 코드를 업로드하면, 이 컨버터가 usb의 신호를 UART로 변한하여 코드를 업로드한다.
감이 좋은 사람이라면 눈치챘을 것인데, 바로 esp32에는 이 컨버터가 내장되어 있다고 생각하면 된다. 다시 ATmega328p의 경우로 돌아와서 이 칩을 쓸 때 uart0 핀이 따로 있고 여기에 usb to TTL 컨버터를 연하듯, eps32에도 똑같이 연결이 되어있는 것이다.
따라서 esp32의 UART0는 사실상 사용이 불가능 한 핀인 것이다.
위 사진처럼 UART0를 Lora 모듈에 연결해서 쓰겠다고 하면 안 된다는 것이다. 심지어 GPIO43, 44는 GPIO 메트릭스를 통해서 바꿔서 사용할 수도 없다. (가능하긴 하지만 이러면 USB CDC, 이따 설명할 내용을 사용하지 못한다)
Esp32 S3, 다른 Esp32류 보드에서 시리얼 모니터를 보는 방법
하지만 지금 당장 새로운 esp32 기반 자작 보드를 만들고 D-, D+를 연결한 당신은, 시리얼 모니터에 아무것도 뜨지 않는 현상을 경험할 것이다. 이는 esp32에 내장된 USB CDC 기능을 켜주지 않아서 그렇다. 따라서 빌드 시에 이 기능을 켜, esp32가 usb CDC를 사용하여 esp32의 UART0를 USB를 통해 내보낼 수 있도록 해 주면 된다.
Arduino IDE에서..
방법은 생각보다 아주 간단하다. 먼저 usb를 통해 esp32를 인식시키면
이런 게 뜰 텐데, 당연히 허용해 준다.
그다음 아두이노 IDE에서
Esp32 Family Device라고 뜰 텐데, 이것을
위 사진처럼 USB-OTG로 바꾸고,
도구 > USB Mode > Hardware CDC and JTAG로 바꿔주면 된다.
이렇게 하면 시리얼 모니터가 잘 나오는 것을 볼 수 있다.
PlatformIO에서...
아두이노 IDE에서보다 더 쉽다.
그냥 platformio.ini에
build_flags = -D ARDUINO_USB_MODE=1 -D ARDUINO_USB_CDC_ON_BOOT=1
이걸 한 줄 적어주고 빌드를 해 주면 된다.
또한
-DCORE_DEBUG_LEVEL=1
을 추가하면 어느 함수에서 실행되었는지도 시리얼 모니터로 볼 수 있으니 참고하자.
마치며
오늘 포스팅에서는 도대체 왜 안 나오는지 모를 시리얼 모니터를 나오게 하는, 누가 말해주지 않으면 절대로 모를 내용을 공유해 보았다. 이것 때문에 받자마자 고장 난 줄 알았다고..
그럼 이제 시리얼 모니터도 나오겠다 즐거운 임베디드 생활 하길 바라면서 글을 마친다.
글이 마음에 들었다면 내 유튜브 들어가서 구독을 좀 눌러달라 ㅎㅎ
'개발' 카테고리의 다른 글
Unity에서 MacOS의 시리얼 포트를 불러오는 방법 (0) | 2025.07.11 |
---|---|
아두이노 IDE에서 Esp32 s3를 USB-OTG로 코딩 하는 방법에 관하여 (0) | 2025.04.16 |
M1 8GB 맥북에어에 Deepseek R1 설치부터 Open Webui 설치까지 (0) | 2025.02.14 |
node.js 에서 api 호출하기 (0) | 2021.05.02 |