성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Reordering on an Alpha processor ;...
[정성태] 공유 감사합니다. ^^ 참고로, WPF에서 WindowsF...
[Tom Lee] 답변 감사합니다. 나름의 해결책 연구해보고 여기에도 공유해봅니다...
[정성태] 아래의 글을 보면, MoveWindow 하면 될 듯한데요. ^^...
[Tom Lee] 안녕하세요 올려주신 글 참고하여 WPF 어플리케이션 안에 Uni...
[정성태] A graphical depiction of the steps ...
[정성태] 질문을 주셔서 출판사 측에 문의를 했습니다. 약 한 달 정도 후...
[Thorondor
] @정성태 개인 블로그인데도 거의 커뮤니티 급 인 것 같아요. 요...
[정성태] Roll A Lisp In C - Reading ; https...
[정성태] Java - How to use the Foreign Funct...
글쓰기
제목
이름
암호
전자우편
HTML
홈페이지
유형
제니퍼 .NET
닷넷
COM 개체 관련
스크립트
VC++
VS.NET IDE
Windows
Team Foundation Server
디버깅 기술
오류 유형
개발 환경 구성
웹
기타
Linux
Java
DDK
Math
Phone
Graphics
사물인터넷
부모글 보이기/감추기
내용
<div style='display: inline'> <h1 style='font-family: Malgun Gothic, Consolas; font-size: 20pt; color: #006699; text-align: center; font-weight: bold'>PC -> FTDI -> NodeMCU v1 ESP8266 기기를 UART 핀을 연결해 직렬 통신하는 방법</h1> <p> 지난 글에서,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > C# - Arduino IDE의 Serial Monitor 기능 구현 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/12646'>https://www.sysnet.pe.kr/2/0/12646</a> </pre> <br /> UART 통신을 다뤄봤는데요, 그러고 보니 예전에 사둔 FTDI 장치가 생각이 납니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > PC에 연결해 동작하는 자신만의 USB 장치 만들어 보기 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/11606'>https://www.sysnet.pe.kr/2/0/11606</a> </pre> <br /> 위의 글에서는 FTDI Basic으로 테스트했지만, 이번에는 FT231X 칩이 있는 보드를 이용했고 대략 다음과 유사한 제품이었습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > FT231X breakout bob-13263 ; <a target='tab' href='https://robotscience.kr/goods/view?no=10122'>https://robotscience.kr/goods/view?no=10122</a> </pre> <br /> 아래는 실제로 찍은 사진입니다.<br /> <br /> <img onclick='toggle_img(this)' class='imgView' alt='uart_ft231x_1.jpg' src='/SysWebRes/bbs/uart_ft231x_1.jpg' /><br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 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 </pre> <br /> <img onclick='toggle_img(this)' class='imgView' alt='uart_ft231x_2.jpg' src='/SysWebRes/bbs/uart_ft231x_2.jpg' /><br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > TX CB3 CB0 CB1 010 270 FT231X FTDI 1802-D ... FT231XS 270 010 RX RI DSR DCD BLK </pre> <br /> <hr style='width: 50%' /><br /> <br /> 그러니까, 저 장치도 PC와 연결하면 COM 포트가 하나 열리게 되는데요, <br /> <br /> <img alt='ftdi_esp8266_uart_0.png' src='/SysWebRes/bbs/ftdi_esp8266_uart_0.png' /><br /> <br /> 그리고 FTDI 장치에 있는 TXD, RXD 핀을 ESP8266 장치의 RXD, TXD에 각각 교차해서 연결하면 그것도 역시 UART 통신이 될 것입니다. (만약 PC에 직렬 포트와 적절한 케이블이 있다면 FTDI 장치 연결 없이 곧바로 직렬 케이블로 ESP8266에 연결해도 됩니다.)<br /> <br /> 물론, PC 입장에서는 새로운 COM 포트에 연결된 알 수 없는 UART 통신 장비에 불과하겠지만 그래도 장비가 정한 Serial 통신 I/O 규칙만 알면 PC에서 마찬가지로 제어를 할 수 있습니다. 검색해 보면, 결국 제가 실습하고 싶었던 것이 아래의 것과 유사합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Connect ESP8266 from PC with 3.3V FTDI232 (usb-serial) ; <a target='tab' href='https://www.youtube.com/watch?v=xwm53ZeqsiE'>https://www.youtube.com/watch?v=xwm53ZeqsiE</a> </pre> <br /> 일단 제 경우에는 다음과 같은 식으로 보드 작업을 했는데요,<br /> <br /> <img alt='ftdi_esp8266_uart_1.png' src='/SysWebRes/bbs/ftdi_esp8266_uart_1.png' /><br /> <br /> 위의 그림에서는 FTDI 부품이 basic 밖에 없어서 저렇게 표현했지만, 제가 가지고 있는 FTDI의 경우 5V 출력이 제공되기 때문에 그 5V를 ESP8266의 Vin 핀으로 연결해 ESP8266의 전원까지 FTDI 장치로부터 받는 것으로 했습니다.<br /> <br /> 저렇게 연결한 상태에서 Arduino IDE의 Serial Monitor를 FTDI가 열고 있는 COM 포트로 지정하면 Sketch에서 Serial.print...로 출력한 내용을 확인할 수 있습니다. 또는, 지난번에 만든 <a target='tab' href='https://www.sysnet.pe.kr/2/0/12646'>C# Serial Monitor 프로그램을 이용</a>하는 것도 가능하고.<br /> <br /> (<a target='tab' href='https://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?fid=1776&boardid=331301885'>첨부 파일은 이 글의 회로를 나타내는 Fritzing 파일</a>입니다.)<br /> <br /> <hr style='width: 50%' /><br /> <br /> 그런데, 개인적으로 궁금한 점이 하나 있습니다. "<a target='tab' href='https://www.youtube.com/watch?v=xwm53ZeqsiE'>Connect ESP8266 from PC with 3.3V FTDI232 (usb-serial)</a>" 영상에 보면, "AT" 명령어를 이용해 상호작용하는 것을 볼 수 있는데요, 실제로 Arudino IDE의 Serial Monitor에서 저 명령어를 동일하게 전달해도 제 경우에는 아무런 반응이 없습니다.<br /> <br /> 저것만 되면, 굳이 외부 파일(<a target='tab' href='https://www.sysnet.pe.kr/2/0/12638'>NodeMCU v1 ESP8266 - 펌웨어 내 파일 시스템(SPIFFS, LittleFS) 및 EEPROM 활용</a>) 없이도 AT 명령어를 이용해 WiFi 정보를 설정할 수 있는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Get Started With ESP8266 Using "AT Commands" Via Arduino ; <a target='tab' href='https://www.instructables.com/Get-Started-With-ESP8266-Using-AT-Commands-Via-Ard/'>https://www.instructables.com/Get-Started-With-ESP8266-Using-AT-Commands-Via-Ard/</a> Docs » AT Command Set » Wi-Fi AT Commands ; <a target='tab' href='https://docs.espressif.com/projects/esp-at/en/latest/AT_Command_Set/Wi-Fi_AT_Commands.html'>https://docs.espressif.com/projects/esp-at/en/latest/AT_Command_Set/Wi-Fi_AT_Commands.html</a> </pre> <br /> 실습이 안 되는군요. ^^; (혹시, "AT" 명령어를 전달할 수 있는 특별한 조건이나... 방법을 아시는 분은 덧글 부탁드립니다. ^^)<br /> <br /> 참고로, ESP8266에 2개의 Serial이 제공된다고 합니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > NodeMcu Serial Communication Tx and Rx ; <a target='tab' href='https://stackoverflow.com/questions/55084188/nodemcu-serial-communication-tx-and-rx'>https://stackoverflow.com/questions/55084188/nodemcu-serial-communication-tx-and-rx</a> ESP8266 Arduino Core - Serial ; <a target='tab' href='https://arduino-esp8266.readthedocs.io/en/latest/reference.html#serial'>https://arduino-esp8266.readthedocs.io/en/latest/reference.html#serial</a> </pre> <br /> <div style='BACKGROUND-COLOR: #ccffcc; padding: 10px 10px 5px 10px; MARGIN: 0px 10px 10px 10px; FONT-FAMILY: Malgun Gothic, Consolas, Verdana; COLOR: #005555'> 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.<br /> <br /> 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.<br /> </div><br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > #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 </pre> <br /> 보다시피, 기본적으로 "Serial"과 "Serial1" 전역 변수가 존재하는데, "Serial"의 경우 UART0(상숫값 0)으로 GPIO01(TX), GPIO03(RX) 번에 매핑됩니다. 추가로 GPIO15(D8, TX), GPIO13(D7, RX)로 통신을 우회할 수 있는데 이런 경우에는 코드에서 Serial.swap() 함수를 Serial.begin 이후에 호출하면 됩니다. 그리고, 다시 한번 swap 함수를 호출하면 다시 원래의 GPIO01, GPIO03번으로 매핑이 됩니다.<br /> <br /> 반면 "Serial1"은 UART1(상숫값 1)이고, TX 핀만 GPIO02(D4, TX)와 연결이 되며 RX는 flash 칩 연결로 이미 사용하고 있기 때문에 사용할 수 없다고 합니다. 즉, Serial1로는 read... 기능을 사용할 수 없고 print... 기능만 가능한 것입니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
1143
(왼쪽의 숫자를 입력해야 합니다.)