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

비밀번호

댓글 작성자
 




... 151  152  153  154  155  156  157  158  159  160  [161]  162  163  164  165  ...
NoWriterDateCnt.TitleFile(s)
1023정성태4/20/201130073.NET Framework: 210. Windbg 환경에서 확인해 본 .NET 메서드 JIT 컴파일 전과 후 [1]
1022정성태4/19/201125628디버깅 기술: 38. .NET Disassembly 창에서의 F11(Step-into) 키 동작파일 다운로드1
1021정성태4/18/201127920디버깅 기술: 37. .NET 4.0 응용 프로그램의 Main 함수에 BreakPoint 걸기
1020정성태4/18/201128562오류 유형: 117. Failed to find runtime DLL (mscorwks.dll), 0x80004005
1019정성태4/17/201129208디버깅 기술: 36. Visual Studio의 .NET Disassembly 창의 call 호출에 사용되는 주소의 의미는? [1]파일 다운로드1
1018정성태4/16/201132845오류 유형: 116. 윈도우 업데이트 오류 - 0x8020000E
1017정성태4/14/201127636개발 환경 구성: 115. MSBuild - x86/x64, .NET 2/4, debug/release 빌드에 대한 배치 처리파일 다운로드1
1016정성태4/13/201143678개발 환경 구성: 114. Windows Thin PC 설치 [2]
1015정성태4/9/201129034.NET Framework: 209. AutoReset, ManualReset, Monitor.Wait의 차이파일 다운로드1
1014정성태4/7/2011106458오류 유형: 115. ORA-12516: TNS:listener could not find available handler with matching protocol stack [2]
1013정성태4/7/201124271Team Foundation Server: 45. SharePoint 2010 + TFS 2010 환경에서 ProcessGuidance.html 파일 다운로드 문제
1012정성태4/6/201133018.NET Framework: 208. WCF - 접속된 클라이언트의 IP 주소 알아내는 방법 [1]
1011정성태3/31/201135390오류 유형: 114. 인증서 갱신 오류 - The request contains no certificate template information.
1010정성태3/30/201126150개발 환경 구성: 113. 응용 프로그램 디자인 스케치 도구 - SketchFlow [4]
1009정성태3/29/201138482개발 환경 구성: 112. Visual Studio 2010 - .NET Framework 소스 코드 디버깅 [4]
1008정성태3/27/201130857.NET Framework: 207. C# - Right operand가 음수인 Shift 연산 결과 [2]
1007정성태3/16/201131696개발 환경 구성: 111. Excel - XML 파일 연동 [5]파일 다운로드1
1006정성태3/15/201125467.NET Framework: 206. XML/XSD - 외래키처럼 참조 제한 거는 방법파일 다운로드1
1005정성태3/11/201135285개발 환경 구성: 110. 엑셀 매크로 함수 관련 오류 [2]
1004정성태3/3/201124480개발 환경 구성: 109. SharePoint Health Analyzer 디스크 부족 경고 제어
1003정성태3/3/201125509오류 유형: 113. SQL Server - DB Attach 시 Parameter name: nColIndex 오류 발생
1002정성태3/2/201123898Team Foundation Server: 44. TFS 설치 후, Team Portal의 Dashboard를 빠르게 확인하는 방법
1001정성태3/2/201127936Team Foundation Server: 43. TFS 2010 + SharePoint 2010 설치
1000정성태3/1/201132884오류 유형: 112. Remote FX RDP 연결 시 오류 유형 2가지 [5]
999정성태2/28/201146444개발 환경 구성: 108. RemoteFX - Windows 7 가상 머신에서 DirectX 9c 환경을 제공 [5]
998정성태2/27/201120140Team Foundation Server: 42. TFS Application-Tier만 재설치
... 151  152  153  154  155  156  157  158  159  160  [161]  162  163  164  165  ...