성태의 닷넷 이야기
홈 주인
모아 놓은 자료
프로그래밍
질문/답변
사용자 관리
사용자
메뉴
아티클
외부 아티클
유용한 코드
온라인 기능
MathJax 입력기
최근 덧글
[정성태] Java - How to use the Foreign Funct...
[정성태] 제가 큰 실수를 했군요. ^^; Delegate를 통한 Bein...
[정성태] Working with Rust Libraries from C#...
[정성태] Detecting blocking calls using asyn...
[정성태] 아쉽게도, 커뮤니티는 아니고 개인 블로그입니다. ^^
[정성태] 질문이 잘 이해가 안 됩니다. 우선, 해당 소스코드에서 ILis...
[양승조
] var대신 dinamic으로 선언해서 해결은 했습니다. 맞는 해...
[양승조
] 또 막혔습니다. ㅠㅠ var list = props[i].Ge...
[양승조
] 아. 감사합니다. 어제는 안됐던것 같은데....정신을 차려야겠네...
[정성태] "props[i].GetValue(props[i])" 코드에서 ...
글쓰기
제목
이름
암호
전자우편
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>
첨부파일
스팸 방지용 인증 번호
1397
(왼쪽의 숫자를 입력해야 합니다.)