Microsoft MVP성태의 닷넷 이야기
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일

PC -> FTDI -> NodeMCU v1 ESP8266 기기를 UART 핀을 연결해 직렬 통신하는 방법

지난 글에서,

C# - Arduino IDE의 Serial Monitor 기능 구현
; https://www.sysnet.pe.kr/2/0/12646

UART 통신을 다뤄봤는데요, 그러고 보니 예전에 사둔 FTDI 장치가 생각이 납니다. ^^

PC에 연결해 동작하는 자신만의 USB 장치 만들어 보기
; https://www.sysnet.pe.kr/2/0/11606

위의 글에서는 FTDI Basic으로 테스트했지만, 이번에는 FT231X 칩이 있는 보드를 이용했고 대략 다음과 유사한 제품이었습니다.

FT231X breakout bob-13263
; https://robotscience.kr/goods/view?no=10122

아래는 실제로 찍은 사진입니다.

uart_ft231x_1.jpg

DTR    CB2  CB1  CB0  CB3  TX  5V  GND
RX
TX            3.3             CB2
VCC         VCC
CTS           5V              CB1
GND    CTS  DC0  DSR  R1   RX  RTS 3.3

uart_ft231x_2.jpg

               TX  CB3  CB0  CB1
010

270  FT231X     FTDI 1802-D ... FT231XS
270

010
               RX  RI   DSR  DCD  
                                   BLK




그러니까, 저 장치도 PC와 연결하면 COM 포트가 하나 열리게 되는데요,

ftdi_esp8266_uart_0.png

그리고 FTDI 장치에 있는 TXD, RXD 핀을 ESP8266 장치의 RXD, TXD에 각각 교차해서 연결하면 그것도 역시 UART 통신이 될 것입니다. (만약 PC에 직렬 포트와 적절한 케이블이 있다면 FTDI 장치 연결 없이 곧바로 직렬 케이블로 ESP8266에 연결해도 됩니다.)

물론, PC 입장에서는 새로운 COM 포트에 연결된 알 수 없는 UART 통신 장비에 불과하겠지만 그래도 장비가 정한 Serial 통신 I/O 규칙만 알면 PC에서 마찬가지로 제어를 할 수 있습니다. 검색해 보면, 결국 제가 실습하고 싶었던 것이 아래의 것과 유사합니다.

Connect ESP8266 from PC with 3.3V FTDI232 (usb-serial)
; https://www.youtube.com/watch?v=xwm53ZeqsiE

일단 제 경우에는 다음과 같은 식으로 보드 작업을 했는데요,

ftdi_esp8266_uart_1.png

위의 그림에서는 FTDI 부품이 basic 밖에 없어서 저렇게 표현했지만, 제가 가지고 있는 FTDI의 경우 5V 출력이 제공되기 때문에 그 5V를 ESP8266의 Vin 핀으로 연결해 ESP8266의 전원까지 FTDI 장치로부터 받는 것으로 했습니다.

저렇게 연결한 상태에서 Arduino IDE의 Serial Monitor를 FTDI가 열고 있는 COM 포트로 지정하면 Sketch에서 Serial.print...로 출력한 내용을 확인할 수 있습니다. 또는, 지난번에 만든 C# Serial Monitor 프로그램을 이용하는 것도 가능하고.

(첨부 파일은 이 글의 회로를 나타내는 Fritzing 파일입니다.)




그런데, 개인적으로 궁금한 점이 하나 있습니다. "Connect ESP8266 from PC with 3.3V FTDI232 (usb-serial)" 영상에 보면, "AT" 명령어를 이용해 상호작용하는 것을 볼 수 있는데요, 실제로 Arudino IDE의 Serial Monitor에서 저 명령어를 동일하게 전달해도 제 경우에는 아무런 반응이 없습니다.

저것만 되면, 굳이 외부 파일(NodeMCU v1 ESP8266 - 펌웨어 내 파일 시스템(SPIFFS, LittleFS) 및 EEPROM 활용) 없이도 AT 명령어를 이용해 WiFi 정보를 설정할 수 있는데,

Get Started With ESP8266 Using "AT Commands" Via Arduino
; https://www.instructables.com/Get-Started-With-ESP8266-Using-AT-Commands-Via-Ard/

Docs » AT Command Set » Wi-Fi AT Commands
; https://docs.espressif.com/projects/esp-at/en/latest/AT_Command_Set/Wi-Fi_AT_Commands.html

실습이 안 되는군요. ^^; (혹시, "AT" 명령어를 전달할 수 있는 특별한 조건이나... 방법을 아시는 분은 덧글 부탁드립니다. ^^)

참고로, ESP8266에 2개의 Serial이 제공된다고 합니다.

NodeMcu Serial Communication Tx and Rx
; https://stackoverflow.com/questions/55084188/nodemcu-serial-communication-tx-and-rx

ESP8266 Arduino Core - Serial
; https://arduino-esp8266.readthedocs.io/en/latest/reference.html#serial

Serial uses UART0, which is mapped to pins GPIO1 (TX) and GPIO3 (RX). Serial may be remapped to GPIO15 (TX) and GPIO13 (RX) by calling Serial.swap() after Serial.begin. Calling swap again maps UART0 back to GPIO1 and GPIO3.

Serial1 uses UART1, TX pin is GPIO2. UART1 can not be used to receive data because normally it’s RX pin is occupied for flash chip connection.


#define UART0    0
#define UART1    1
#define UART_NO -1

#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL)
HardwareSerial Serial(UART0);
#endif
#if !defined(NO_GLOBAL_INSTANCES) && !defined(NO_GLOBAL_SERIAL1)
HardwareSerial Serial1(UART1);
#endif

보다시피, 기본적으로 "Serial"과 "Serial1" 전역 변수가 존재하는데, "Serial"의 경우 UART0(상숫값 0)으로 GPIO01(TX), GPIO03(RX) 번에 매핑됩니다. 추가로 GPIO15(D8, TX), GPIO13(D7, RX)로 통신을 우회할 수 있는데 이런 경우에는 코드에서 Serial.swap() 함수를 Serial.begin 이후에 호출하면 됩니다. 그리고, 다시 한번 swap 함수를 호출하면 다시 원래의 GPIO01, GPIO03번으로 매핑이 됩니다.

반면 "Serial1"은 UART1(상숫값 1)이고, TX 핀만 GPIO02(D4, TX)와 연결이 되며 RX는 flash 칩 연결로 이미 사용하고 있기 때문에 사용할 수 없다고 합니다. 즉, Serial1로는 read... 기능을 사용할 수 없고 print... 기능만 가능한 것입니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 9/8/2023]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 31  32  33  34  35  36  37  38  39  40  41  [42]  43  44  45  ...
NoWriterDateCnt.TitleFile(s)
12586정성태4/5/20219533오류 유형: 710. Windows - Restart-Computer / shutdown 명령어 수행 시 Access is denied(E_ACCESSDENIED)
12585정성태4/5/20219287개발 환경 구성: 563. 기본 생성된 kubeconfig 파일의 내용을 새롭게 생성한 인증서로 구성하는 방법
12584정성태4/1/20219990개발 환경 구성: 562. kubeconfig 파일 없이 kubectl 옵션만으로 실행하는 방법
12583정성태3/29/202111473개발 환경 구성: 561. kubectl 수행 시 다른 k8s 클러스터로 접속하는 방법
12582정성태3/29/202110180오류 유형: 709. Visual C++ - 컴파일 에러 error C2059: syntax error: '__stdcall'
12581정성태3/28/202110098.NET Framework: 1031. WinForm/WPF에서 Console 창을 띄워 출력하는 방법 (2) - Output 디버깅 출력을 AllocConsole로 우회 [2]
12580정성태3/28/20218836오류 유형: 708. SQL Server Management Studio - Execution Timeout Expired.
12579정성태3/28/20218928오류 유형: 707. 중첩 가상화(Nested Virtualization) - The virtual machine could not be started because this platform does not support nested virtualization.
12578정성태3/27/20219191개발 환경 구성: 560. Docker Desktop for Windows 기반의 Kubernetes 구성 (2) - WSL 2 인스턴스에 kind가 구성한 k8s 서비스 위치
12577정성태3/26/202111250개발 환경 구성: 559. Docker Desktop for Windows 기반의 Kubernetes 구성 - WSL 2 인스턴스에 kind 도구로 k8s 클러스터 구성
12576정성태3/25/20219033개발 환경 구성: 558. Docker Desktop for Windows에서 DockerDesktopVM 기반의 Kubernetes 구성 (2) - k8s 서비스 위치
12575정성태3/24/20218115개발 환경 구성: 557. Docker Desktop for Windows에서 DockerDesktopVM 기반의 Kubernetes 구성
12574정성태3/23/202112140.NET Framework: 1030. C# Socket의 Close/Shutdown 동작 (동기 모드)
12573정성태3/22/20219950개발 환경 구성: 556. WSL 인스턴스 초기 설정 명령어 [1]
12572정성태3/22/20219505.NET Framework: 1029. C# - GC 호출로 인한 메모리 압축(Compaction)을 확인하는 방법파일 다운로드1
12571정성태3/21/20218650오류 유형: 706. WSL 2 기반으로 "Enable Kubernetes" 활성화 시 초기화 실패 [1]
12570정성태3/19/202112942개발 환경 구성: 555. openssl - CA로부터 인증받은 새로운 인증서를 생성하는 방법
12569정성태3/18/202111831개발 환경 구성: 554. WSL 인스턴스 export/import 방법 및 단축 아이콘 설정 방법
12568정성태3/18/20217416오류 유형: 705. C# 빌드 - Couldn't process file ... due to its being in the Internet or Restricted zone or having the mark of the web on the file.
12567정성태3/17/20218823개발 환경 구성: 553. Docker Desktop for Windows를 위한 k8s 대시보드 활성화 [1]
12566정성태3/17/20219148개발 환경 구성: 552. Kubernetes - kube-apiserver와 REST API 통신하는 방법 (Docker Desktop for Windows 환경)
12565정성태3/17/20216625오류 유형: 704. curl.exe 실행 시 dll not found 오류
12564정성태3/16/20217107VS.NET IDE: 160. 새 프로젝트 창에 C++/CLI 프로젝트 템플릿이 없는 경우
12563정성태3/16/20219092개발 환경 구성: 551. C# - JIRA REST API 사용 정리 (3) jira-oauth-cli 도구를 이용한 키 관리
12562정성태3/15/202110227개발 환경 구성: 550. C# - JIRA REST API 사용 정리 (2) JIRA OAuth 토큰으로 API 사용하는 방법파일 다운로드1
12561정성태3/12/20218829VS.NET IDE: 159. Visual Studio에서 개행(\n, \r) 등의 제어 문자를 치환하는 방법 - 정규 표현식 사용
... 31  32  33  34  35  36  37  38  39  40  41  [42]  43  44  45  ...