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

비밀번호

댓글 작성자
 




... 76  77  78  79  [80]  81  82  83  84  85  86  87  88  89  90  ...
NoWriterDateCnt.TitleFile(s)
11934정성태6/7/201921177VC++: 133. typedef struct와 타입 전방 선언으로 인한 C2371 오류파일 다운로드1
11933정성태6/7/201919541VC++: 132. enum 정의를 C++11의 enum class로 바꿀 때 유의할 사항파일 다운로드1
11932정성태6/7/201918718오류 유형: 544. C++ - fatal error C1017: invalid integer constant expression파일 다운로드1
11931정성태6/6/201919258개발 환경 구성: 441. C# - CairoSharp/GtkSharp 사용을 위한 프로젝트 구성 방법
11930정성태6/5/201919790.NET Framework: 842. .NET Reflection을 대체할 System.Reflection.Metadata 소개 [1]
11929정성태6/5/201919326.NET Framework: 841. Windows Forms/C# - 클립보드에 RTF 텍스트를 복사 및 확인하는 방법 [1]
11928정성태6/5/201918118오류 유형: 543. PowerShell 확장 설치 시 "Catalog file '[...].cat' is not found in the contents of the module" 오류 발생
11927정성태6/5/201919296스크립트: 15. PowerShell ISE의 스크립트를 복사 후 PPT/Word에 붙여 넣으면 한글이 깨지는 문제 [1]
11926정성태6/4/201919892오류 유형: 542. Visual Studio - pointer to incomplete class type is not allowed
11925정성태6/4/201919699VC++: 131. Visual C++ - uuid 확장 속성과 __uuidof 확장 연산자파일 다운로드1
11924정성태5/30/201921312Math: 57. C# - 해석학적 방법을 이용한 최소 자승법 [1]파일 다운로드1
11923정성태5/30/201920966Math: 56. C# - 그래프 그리기로 알아보는 경사 하강법의 최소/최댓값 구하기파일 다운로드1
11922정성태5/29/201918504.NET Framework: 840. ML.NET 데이터 정규화파일 다운로드1
11921정성태5/28/201924348Math: 55. C# - 다항식을 위한 최소 자승법(Least Squares Method)파일 다운로드1
11920정성태5/28/201916014.NET Framework: 839. C# - PLplot 색상 제어
11919정성태5/27/201920256Math: 54. C# - 최소 자승법의 1차 함수에 대한 매개변수를 단순 for 문으로 구하는 방법 [1]파일 다운로드1
11918정성태5/25/201921124Math: 53. C# - 행렬식을 이용한 최소 자승법(LSM: Least Square Method)파일 다운로드1
11917정성태5/24/201922079Math: 52. MathNet을 이용한 간단한 통계 정보 처리 - 분산/표준편차파일 다운로드1
11916정성태5/24/201919918Math: 51. MathNET + OxyPlot을 이용한 간단한 통계 정보 처리 - Histogram파일 다운로드1
11915정성태5/24/201923044Linux: 11. 리눅스의 환경 변수 관련 함수 정리 - putenv, setenv, unsetenv
11914정성태5/24/201921978Linux: 10. 윈도우의 GetTickCount와 리눅스의 clock_gettime파일 다운로드1
11913정성태5/23/201918749.NET Framework: 838. C# - 숫자형 타입의 bit(2진) 문자열, 16진수 문자열 구하는 방법파일 다운로드1
11912정성태5/23/201918675VS.NET IDE: 137. Visual Studio 2019 버전 16.1부터 리눅스 C/C++ 프로젝트에 추가된 WSL 지원
11911정성태5/23/201917461VS.NET IDE: 136. Visual Studio 2019 - 리눅스 C/C++ 프로젝트에 인텔리센스가 동작하지 않는 경우
11910정성태5/23/201927118Math: 50. C# - MathNet.Numerics의 Matrix(행렬) 연산 [1]파일 다운로드1
11909정성태5/22/201921130.NET Framework: 837. C# - PLplot 사용 예제 [1]파일 다운로드1
... 76  77  78  79  [80]  81  82  83  84  85  86  87  88  89  90  ...