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

비밀번호

댓글 작성자
 




... 46  47  48  49  50  51  52  53  54  [55]  56  57  58  59  60  ...
NoWriterDateCnt.TitleFile(s)
12272정성태7/16/20208952.NET Framework: 929. (StrongName의 버전 구분이 필요 없는) .NET Core 어셈블리 바인딩 규칙 [2]파일 다운로드1
12271정성태7/16/202011063.NET Framework: 928. .NET Framework의 Strong-named 어셈블리 바인딩 (2) - 런타임에 바인딩 리디렉션파일 다운로드1
12270정성태7/16/202011827오류 유형: 633. SSL_CTX_use_certificate_file - error:140AB18F:SSL routines:SSL_CTX_use_certificate:ee key too small
12269정성태7/16/20209244오류 유형: 632. .NET Core 웹 응용 프로그램 - The process was terminated due to an unhandled exception.
12268정성태7/15/202010999오류 유형: 631. .NET Core 웹 응용 프로그램 오류 - HTTP Error 500.35 - ANCM Multiple In-Process Applications in same Process
12267정성태7/15/202012598.NET Framework: 927. C# - 윈도우 프로그램에서 Credential Manager를 이용한 보안 정보 저장파일 다운로드1
12266정성태7/14/202010335오류 유형: 630. 사용자 계정을 지정해 CreateService API로 서비스를 등록한 경우 "Error 1069: The service did not start due to a logon failure." 오류발생
12265정성태7/10/20209435오류 유형: 629. Visual Studio - 웹 애플리케이션 실행 시 "Unable to connect to web server 'IIS Express'." 오류 발생
12264정성태7/9/202018565오류 유형: 628. docker: Error response from daemon: Conflict. The container name "..." is already in use by container "...".
12261정성태7/9/202011514VS.NET IDE: 148. 윈도우 10에서 .NET Core 응용 프로그램을 리눅스 환경에서 실행하는 2가지 방법 - docker, WSL 2 [5]
12260정성태7/8/20209759.NET Framework: 926. C# - ETW를 이용한 ThreadPool 스레드 감시파일 다운로드1
12259정성태7/8/20209367오류 유형: 627. nvlddmkm.sys의 BAD_POOL_HEADER BSOD 문제 [1]
12258정성태7/8/202012544기타: 77. DataDog APM 간략 소개
12257정성태7/7/20209475.NET Framework: 925. C# - ETW를 이용한 Monitor Enter/Exit 감시파일 다운로드1
12256정성태7/7/20209969.NET Framework: 924. C# - Reflection으로 변경할 수 없는 readonly 정적 필드 [4]
12255정성태7/6/202010415.NET Framework: 923. C# - ETW(Event Tracing for Windows)를 이용한 Finalizer 실행 감시파일 다운로드1
12254정성태7/2/202010247오류 유형: 626. git - REMOTE HOST IDENTIFICATION HAS CHANGED!
12253정성태7/2/202011402.NET Framework: 922. C# - .NET ThreadPool의 Local/Global Queue파일 다운로드1
12252정성태7/2/202013382.NET Framework: 921. C# - I/O 스레드를 사용한 비동기 소켓 서버/클라이언트파일 다운로드2
12251정성태7/1/202011431.NET Framework: 920. C# - 파일의 비동기 처리 유무에 따른 스레드 상황 [1]파일 다운로드2
12250정성태6/30/202013950.NET Framework: 919. C# - 닷넷에서의 진정한 비동기 호출을 가능케 하는 I/O 스레드 사용법 [1]파일 다운로드1
12249정성태6/29/202010093오류 유형: 625. Microsoft SQL Server 2019 RC1 Setup - 설치 제거 시 Warning 26003 오류 발생
12248정성태6/29/20208465오류 유형: 624. SQL 서버 오류 - service-specific error code 17051
12247정성태6/29/202010064.NET Framework: 918. C# - 불린 형 상수를 반환값으로 포함하는 3항 연산자 사용 시 단축 표현 권장(IDE0075) [2]파일 다운로드1
12246정성태6/29/202010868.NET Framework: 917. C# - USB 관련 ETW(Event Tracing for Windows)를 이용한 키보드 입력을 감지하는 방법
12245정성태6/24/202011364.NET Framework: 916. C# - Task.Yield 사용법 (2) [2]파일 다운로드1
... 46  47  48  49  50  51  52  53  54  [55]  56  57  58  59  60  ...