성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
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'>New NodeMCU v3(ESP8266)의 http 통신</h1> <p> 지난번에 ESP8266 보드에 대한 간단한 코딩을 해봤는데요.<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='http://www.sysnet.pe.kr/2/0/11595'>http://www.sysnet.pe.kr/2/0/11595</a> New NodeMCU v3 아두이노 호환 보드의 내장 LED 및 입력 핀 사용법 ; <a target='tab' href='http://www.sysnet.pe.kr/2/0/11605'>http://www.sysnet.pe.kr/2/0/11605</a> </pre> <br /> 사실 NodeMCU의 가장 큰 장점은 WiFi 지원이므로 이를 위한 소켓 통신 - 그중에서도 HTTP 통신을 빼놓을 수 없습니다. 지난 글에서 WiFiServer 클래스를 이용해 웹 서버로 동작하는 간단한 코드를 작성해 봤으니, 이번에는 WiFiClient를 이용한 다른 웹 서버로의 접속을 간단하게 작성해 봤습니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > // [참고 소스 코드] esp8266/Arduino // <a target='tab' href='https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/client-examples.rst'>https://github.com/esp8266/Arduino/blob/master/doc/esp8266wifi/client-examples.rst</a> #include <ESP8266WiFi.h> #include <ESP8266WiFiAP.h> #include <ESP8266WiFiGeneric.h> #include <ESP8266WiFiMulti.h> #include <ESP8266WiFiScan.h> #include <ESP8266WiFiSTA.h> #include <ESP8266WiFiType.h> #include <WiFiClient.h> #include <WiFiClientSecure.h> #include <WiFiServer.h> #include <WiFiServerSecure.h> #include <WiFiUdp.h> const char *ssid = "...무선 ssdi..."; const char *password = "...무선 password..."; int _buildLedPin = 2; void setup() { Serial.begin(115200); delay(10); Serial.printf("%d: Connecting to %d\n", millis(), ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print("."); } Serial.printf("\n%d: WiFi connected: %s\n", millis(), WiFi.localIP().toString().c_str()); pinMode(_buildLedPin, OUTPUT); } void loop() { <span style='color: blue; font-weight: bold'>WiFiClient client;</span> String host = "www.naver.com"; <span style='color: blue; font-weight: bold'>bool connected = client.connect(host, 80);</span> Serial.printf("%d: Connected - %d\n", millis(), connected); do { if (connected == false) { break; } client.print(String("GET /") + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n" + "\r\n"); int readBytes = 0; <span style='color: blue; font-weight: bold'>while (client.connected() == 1)</span> { <span style='color: blue; font-weight: bold'>if (client.available())</span> { // 아래의 코드 영역만 원하는 용도에 맞게 재구성 <span style='color: blue; font-weight: bold'>String line = client.readStringUntil('\n'); readBytes += line.length();</span> } } Serial.printf("%d: # of recv bytes: %d\n", millis(), readBytes); Blink(2000); } while (false); <span style='color: blue; font-weight: bold'>client.stop();</span> } void Blink(int ledOnTime) { digitalWrite(_buildLedPin, LOW); delay(ledOnTime); digitalWrite(_buildLedPin, HIGH); delay(ledOnTime); } </pre> <br /> (<a target='tab' href='https://www.sysnet.pe.kr/bbs/DownloadAttachment.aspx?fid=1393&boardid=331301885'>첨부 파일은 이 글의 예제를 vscode 양식으로 포함</a>합니다.)<br /> <br /> <hr style='width: 50%' /><br /> <br /> <a target='tab' href='http://www.sysnet.pe.kr/2/0/11753'>개발 환경으로 Visual Studio Code를 사용</a>하는 경우, 빌드 후 배포한 다음 소스 코드 변경 없이 다시 Verify나 Upload를 하게 되면 다음과 같은 경고를 보게 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > [Warning] Output path is not specified. Unable to reuse previously compiled files. Upload could be slow. See README. </pre> <br /> 왜냐하면, Visual Studio Code는 "Output" 경로가 명시되어 있지 않으면 임시 폴더를 사용하게 되고 이게 빌드 때마다 생성하기 때문에 전체적으로 바이너리 생성 속도가 상당히 느립니다. 사용하게 되는 임시 폴더의 경로는 빌드 출력 결과에 보면 다음과 같은 식으로 찾을 수 있습니다. (빌드 완료 후 해당 폴더는 삭제됩니다.)<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > Uploading 262496 bytes from <span style='color: blue; font-weight: bold'>%LOCALAPPDATA%\Temp\arduino_build_200452</span>/http_get.ino.bin to flash at 0x00000000 </pre> <br /> 빌드 중간 결과물을 보존하게 되면 이후의 빌드에서 좀 더 빠르게 작업이 진행되는데 이를 위해 arduino.json 파일의,<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > ./.vscode/arduino.json </pre> <br /> 설정에 "output" 항목을 다음과 같이 추가하면 됩니다.<br /> <br /> <pre style='margin: 10px 0px 10px 10px; padding: 10px 0px 10px 10px; background-color: #fbedbb; overflow: auto; font-family: Consolas, Verdana;' > { "sketch": "http_get.ino", "board": "esp8266:esp8266:d1", "configuration": "CpuFrequency=80,...[생략]...", "port": "COM3", <span style='color: blue; font-weight: bold'>"output": "../build"</span> } </pre> <br /> 쉽게 말해, output 설정은 거의 필수 항목이라고 봐도 무방합니다.<br /> </p><br /> <br /><hr /><span style='color: Maroon'>[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]</span> </div>
첨부파일
스팸 방지용 인증 번호
5469
(왼쪽의 숫자를 입력해야 합니다.)