성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] VT sequences to "CONOUT$" vs. STD_O...
[정성태] NetCoreDbg is a managed code debugg...
[정성태] Evaluating tail call elimination in...
[정성태] What’s new in System.Text.Json in ....
[정성태] What's new in .NET 9: Cryptography ...
[정성태] 아... 제시해 주신 "https://akrzemi1.wordp...
[정성태] 다시 질문을 정리할 필요가 있을 것 같습니다. 제가 본문에...
[이승준] 완전히 잘못 짚었습니다. 댓글 지우고 싶네요. 검색을 해보...
[정성태] 우선 답글 감사합니다. ^^ 그런데, 사실 저 예제는 (g...
[이승준] 수정이 안되어서... byteArray는 BYTE* 타입입니다...
글쓰기
제목
이름
암호
전자우편
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'>NodeMCU v1 ESP8266 CP2102 Module을 이용한 WiFi UDP 통신</h1> <p> 역시, 직업 또는 꾸준한 취미 활동으로 삼지 않는 한 어떤 것에 대한 지식을 유지하는 것이 ^^; 힘들군요.<br /> <br /> 오랜만에 IoT 관련 코드를 해보고 싶어, 묵혀 두었던 장비를 꺼냈는데 뭐가 어떻게 되는지 하나도 모르겠습니다. 다행히 유사한 모듈에 대해 개발 환경을 기록한 것이 있는데,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > New NodeMCU v3 아두이노 호환 보드의 기본 개발 환경 구성 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/11595'>https://www.sysnet.pe.kr/2/0/11595</a> </pre> <br /> 제가 지금 가지고 있는 v1 보드랑 뭔가 맞지 않습니다. 장치 관리자의 인식이 "USB-SERIAL CH340"이 아닌, "Silicon Labs CP210x USB to UART Bridge"라는 이름으로 잡히는데요, 보드를 자세하게 살펴보니,<br /> <br /> <img alt='node_mcu_1.png' src='/SysWebRes/bbs/node_mcu_1.png' /><br /> <br /> <img alt='node_mcu_2.png' src='/SysWebRes/bbs/node_mcu_2.png' /><br /> <br /> 각각의 면에 다음과 같은 문자들을 확인할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > NODEMCU AMICA WWW.NODEMCU.COM OPEN-SOURCE IOT PLATFORM 1. Install CP2102 driver 2. Use 9600 baud rate 3. Connect Wi-Fi and enjoy Vin +5V Recommended +10V MAX </pre> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > MODEL VENDOR ESP8266MOD ISM 2.4GHz PA +25dBm 802.11b/g/n A0 W D0 RSV i D1 RSV F D2 SD3 i D3 SD2 C D4 SD1 h 3V3 CMD i GND SD0 p D5 CLK D6 GND D7 3V3 D8 EN RX RST TX GND GND Vin 3V3 RST FLASH SILABS CP2102 DCL00X 1806+ </pre> <br /> 이러한 정보를 기반으로 검색해 보면 칩의 구성과 프린팅된 텍스트와 정확히 일치하는 다음의 제품이 나옵니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > 아두이노 NodeMCU V1.0 와이파이 보드 /Lua WiFi ESP8266 - 12E CP2102 칩셋 ; <a target='tab' href='https://eduino.kr/product/detail.html?product_no=239'>https://eduino.kr/product/detail.html?product_no=239</a> CP210x USB to UART Bridge VCP Drivers ; <a target='tab' href='https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers'>https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers</a> </pre> <br /> <img alt='nodemcu_silabs_cp2102_1.png' src='/SysWebRes/bbs/nodemcu_silabs_cp2102_1.png' /><br /> <br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > SPI 관련 핀: SDIO_DATA1(MOSI), SDIO_DATA0(MISO), SDIO_CLK(SCLK), SDIO_CMD(CS), SDIO_DATA2(GPIO9), SDIO_DATA3(GPIO10) GPIO14 (HSCLK), GPIO15(HMISO), GPIO16(HMOSI), GPIO17(HCS) MISO (Master In Slave Out) MOSI (Master Out Slave In) SCLK (Serial Clock) CS (Chip Select) NodeMCU SPI with Arduino IDE ; <a target='tab' href='https://www.electronicwings.com/nodemcu/nodemcu-spi-with-arduino-ide'>https://www.electronicwings.com/nodemcu/nodemcu-spi-with-arduino-ide</a> UART 관련 핀: GPIO13(CTS0), GPIO15(RTS0), GPIO3(RXD0), GPIO1(TXD0) I2C (data pin, click pin): GPIO4(SDA), GPIO5(SCL) PWM 핀: GPIO4, GPIO14, GPIO12, GPIO15 SDIO(SD Card Interface): GPIO10(SDD3), GPIO9(SDD2), GPIO8(SDD1), GPIO11(SDCMD), GPIO7(SDD0), GPIO6(SDCLK) Insight Into ESP8266 NodeMCU Features & Using It With Arduino IDE ; <a target='tab' href='https://lastminuteengineers.com/esp8266-nodemcu-arduino-tutorial/#esp8266-nodemcu-pinout'>https://lastminuteengineers.com/esp8266-nodemcu-arduino-tutorial/#esp8266-nodemcu-pinout</a> </pre> <br /> 친절하게도 <a target='tab' href='https://eduino.kr/product/detail.html?product_no=239'>위의 사이트</a>에서 아두이노 IDE에 어떻게 보드 설정을 하는지 자세하게 소개하고 있습니다. 간략하게 정리하면, "File" / "Preferences" 메뉴에서 "Additional Board Manager URLs"에 "<a target='tab' href='http://arduino.esp8266.com/stable/package_esp8266com_index.json'>http://arduino.esp8266.com/stable/package_esp8266com_index.json</a>" 값을 입력해 설정하고, "Tools" / "Board: ..." / "Boards Manager..."에서 "esp8266 by ESP8266 Community"라고 검색되는 항목을 설치합니다.<br /> <br /> 마지막으로, 다시 "Tools" / "Port: ..."에서 장치 관리자의 "Silicon Labs CP210x USB to UART Bridge" 항목에 표시된 COM 포트 번호를 설정합니다.<br /> <br /> 그럼 "Tools" / "Get Board Info" 메뉴를 선택했을 때 다음과 같은 식의 결과가 출력되는 것을 확인할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Board Info BN: Unknown board VID: 10C4 PID: EA60 SN: Upload any sketch to obtain it </pre> <br /> (참고로, 위의 과정은 "<a target='tab' href='https://www.sysnet.pe.kr/2/0/11595#board_type'>New NodeMCU v3 아두이노 호환 보드의 기본 개발 환경 구성</a>" 글에서도 동일하게 설명했습니다.)<br /> <br /> 간단하게 (부품이 그사이 고장 나지 않았는지 확인하기 위해 ^^) 동작 테스트를 다음의 BLINK 예제로 시작할 수 있습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > void setup() { pinMode(<span style='color: blue; font-weight: bold'>16</span>, OUTPUT); } void loop() { digitalWrite(<span style='color: blue; font-weight: bold'>16</span>, HIGH); delay(5000); digitalWrite(<span style='color: blue; font-weight: bold'>16</span>, LOW); delay(5000); } </pre> <br /> NodeMCU 보드의 경우 16번 핀의 출력은 보드의 RST 핀 옆에 있는 LED가 깜빡입니다. 재미있는 것은, 해당 보드에는 프로그램을 업로드하는 등의 상태를 알리는 LED가 별도로 제공되는데, 그 LED는 2번 출력으로 제어가 됩니다. 따라서 다음과 같이 번호를 바꾸면,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > void setup() { pinMode(<span style='color: blue; font-weight: bold'>2</span>, OUTPUT); } void loop() { digitalWrite(<span style='color: blue; font-weight: bold'>2</span>, HIGH); delay(5000); digitalWrite(<span style='color: blue; font-weight: bold'>2</span>, LOW); delay(5000); } // 핀 구성 <a target='tab' href='https://www.sysnet.pe.kr/2/0/11767#pin_layout'>https://www.sysnet.pe.kr/2/0/11767#pin_layout</a> </pre> <br /> 이제는 보드의 D0(GPIO 16) 핀 옆에 있는 LED가 깜빡입니다.<br /> <br /> <hr style='width: 50%' /><br /> <br /> Blink 예제만 하고 이 글을 끝내기에는 좀 아쉽죠. ^^ 일단 TCP 기반의 WiFiClient 통신은 지난 글에서 다뤄봤으니,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > New NodeMCU v3(ESP8266)의 http 통신 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/11762'>https://www.sysnet.pe.kr/2/0/11762</a> New NodeMCU v3(ESP8266)의 https 통신 ; <a target='tab' href='https://www.sysnet.pe.kr/2/0/11763'>https://www.sysnet.pe.kr/2/0/11763</a> </pre> <br /> 이번에는 UDP 통신을 해보겠습니다. 이에 대해서는 이미 다음의 글에서 자세하게 소개하고 있으므로,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ESP8266 UDP SEND & RECEIVE EXAMPLE (STEP-BY-STEP TUTORIAL) ; <a target='tab' href='https://siytek.com/esp8266-udp-send-receive/'>https://siytek.com/esp8266-udp-send-receive/</a> </pre> <br /> 여기선 그냥 베끼기만 하면 됩니다. ^^<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > #include <ESP8266WiFi.h> <span style='color: blue; font-weight: bold'>#include <WiFiUdp.h></span> #define WIFI_SSID "...ssid..." #define WIFI_PASS "...wifipassword..." #define UDP_PORT 1194 #define PACKET_SIZE 8 int _buildLedPin = 16; <span style='color: blue; font-weight: bold'>WiFiUDP UDP;</span> <span style='color: blue; font-weight: bold'>const char udpServer[] = "...udp_dns_server...";</span> char packet[PACKET_SIZE + 1]; void setup() { // Setup serial port Serial.begin(115200); Serial.println(); // Begin WiFi WiFi.begin(WIFI_SSID, WIFI_PASS); // Loop continuously while WiFi is not connected while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } // Connected to WiFi Serial.println(); Serial.print("Connected! IP address: "); Serial.println(WiFi.localIP()); pinMode(_buildLedPin, OUTPUT); } void loop() { memset(packet, 0, PACKET_SIZE); <span style='color: blue; font-weight: bold'>UDP.beginPacket(udpServer, UDP_PORT); UDP.write(packet, PACKET_SIZE); UDP.endPacket();</span> delay(1000); <span style='color: blue; font-weight: bold'>int packetSize = UDP.parsePacket();</span> if (packetSize) { <span style='color: blue; font-weight: bold'>int len = UDP.read(packet, PACKET_SIZE);</span> if (len > 0) { packet[len] = 0; } } Blink(2000); } void Blink(int ledOnTime) { digitalWrite(_buildLedPin, LOW); delay(ledOnTime); digitalWrite(_buildLedPin, HIGH); delay(ledOnTime); } </pre> <br /> 위의 예제는 UDP 서버에 (빈 내용으로) 8바이트를 보내고, 그 응답으로 8바이트를 (해석하지는 않지만) 받고 있습니다.<br /> <br /> <hr style='width: 50%' /><br /> <a name='upload_log'></a> <br /> 참고로, 기록을 위해 프로그램 업로드 시 출력되는 내용은 다음과 같습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Executable segment sizes: IROM : 228640 - code in flash (default or ICACHE_FLASH_ATTR) IRAM : 26756 / 32768 - code in IRAM (ICACHE_RAM_ATTR, ISRs...) DATA : 1248 ) - initialized variables (global, static) in RAM/HEAP RODATA : 688 ) / 81920 - constants (global, static) in RAM/HEAP BSS : 24880 ) - zeroed variables (global, static) in RAM/HEAP Sketch uses 257332 bytes (24%) of program storage space. Maximum is 1044464 bytes. Global variables use 26816 bytes (32%) of dynamic memory, leaving 55104 bytes for local variables. Maximum is 81920 bytes. esptool.py v2.8 Serial port COM4 Connecting.... <span style='color: blue; font-weight: bold'>Chip is ESP8266EX</span> <span style='color: blue; font-weight: bold'>Features: WiFi</span> Crystal is 26MHz <span style='color: blue; font-weight: bold'>MAC: 50:5d:2a:12:6d:23</span> Uploading stub... Running stub... Stub running... Configuring flash size... <span style='color: blue; font-weight: bold'>Auto-detected Flash size: 4MB</span> Compressed 261488 bytes to 193147... Wrote 261488 bytes (193147 compressed) at 0x00000000 in 17.1 seconds (effective 122.2 kbit/s)... Hash of data verified. Leaving... Hard resetting via RTS pin... </pre> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
3096
(왼쪽의 숫자를 입력해야 합니다.)