코코아팹은 누구나 창의적 아이디어를 현실로 만들어 낼 수 있도록
만들고, 공유하고, 배울 수 있는 터전이
되고자 합니다.
아이디와 비밀번호를 잊으셨나요?아이디 / 비밀번호 찾기
코코아팹 회원이 아니신가요? 회원가입
데이터 베이스 서버 연결
김덕수 | 2016-10-04
|
|
---|---|
http://kocoafab.cc/make/view/359 이글을 보고 데이터 베이스 서버에 연결을 시도 하고있습니다. 일단 연결은 됩니다만 굉장히 느리게 연결이되어 읽어오는 속도가 너무느려서 혹시 그 속도를 빠르게 할 수 있나 여쭤보고 싶습니다. 읽어올 데이터의 양이 큰것은 아니고 40글자 정도 되는 텍스트입니다. 하지만 읽는 속도가 너무 느립니다. 왜이렇게 느린지 이해가 안되는데 혹시 원래 느린것인지 알고 싶습니다. 저는 5~10초 주기(loop)로 데이터 입력과 출력을 하고 싶은데, 원래의 글은 주르륵 읽고 바로 떠있습니다만 저는 서버를 연결하는데 오래걸리는 것인지 약 1~2분정도 걸려서 연결이 되더군요. 혹시 왜이러는지 알려주실수 있으신가요? 웹페이지로 연결할 시에는 굉장히 빠른속도로 뜨는데, 물론 다른분들도 이렇게 걸리시는지는 직접 구동하는 모습을 보지 못하여 잘 모르겠습니다. 그리고 한번의 연결이 끝나고 No Socket available 이라는 말이 계속뜨면서 다시 연결, 즉 또다시 연결하여 읽어오는 행동을 못하는데 만약 이 소스코드에서 setup에서 connectToServer 함수가 불려오는데 loop안에서 그 함수를 실행시킨다면 계속해서 읽어올 수 있을까요? 정리하자면 1. 위의 페이지를 보고 따라하고 있으나 얼마 되지 않는 텍스트를 읽어오는 속도가 1~2분 정도로 상당히 느린속도로 읽어옵니다, 이 속도를 빠르게 하고 싶은데 어떻게 해야할까요? 웹페이지에서 서버를 접속시에는 바로바로 뜹니다.. 2. 지속적으로 일정 주기를 가지고 루프를 돌면서 계속 읽어오게 하고 싶습니다. 예를 들면 5~10초 주기로 계속 데이터 베이스에 접근하여 데이터를 읽어오고 몇 초뒤 다시 루프를 돌아 읽어오게 하고 싶습니다. 어떻게 하는것이 좋을지 여쭤보고 싶습니다. 3. No Socket available 이 문제는 client.flush() 와 client.stop()으로 해결하라는 댓글을 보아 그렇게 하면 될것같습니다. 감사합니다 소스코드와 실행 화면을 첨부합니다.
--------------------------소스코드----------------------------------- #include <SPI.h>
#include <WiFi.h> char ssid[] = "***"; // your network SSID (name)
char pass[] = "***"; // your network password (use for WPA, or use as key for WEP) int keyIndex = 0; // your network key Index number (needed only for WEP) String location = "Gangnam"; //날씨정보를 보고싶은 지역 //인스턴스 변수 초기화 WiFiServer server(80); WiFiClient client; const unsigned long requestInterval = 60000; // 요구 시간 딜레이(1 min)
IPAddress hostIp;
uint8_t ret; unsigned long lastAttemptTime = 0; // 마지막으로 서버에서 데이터를 전송받은 시간 void setup() {
Serial.begin(115200); delay(10); //WiFi연결 시도 Serial.println("Connecting to WiFi...."); WiFi.begin(ssid, pass); //WiFi가 패스워드를 사용한다면 매개변수에 password도 작성 server.begin(); Serial.println("Connect success!"); Serial.println("Waiting for DHCP address"); //DHCP주소를 기다린다 while(WiFi.localIP() == INADDR_NONE) { Serial.print("."); delay(300); } Serial.println("\n"); printWifiData(); connectToServer(); } void loop()
{ if (client.connected()) { while (client.available()) { //전송된 데이터가 있을 경우 데이터를 읽어들인다. char inChar = client.read(); Serial.write(inChar); } } else if (millis() - lastAttemptTime > requestInterval) { //연결을 실패했다면 requestInterval(60초)이후에 다시 연결을 시도한다. connectToServer(); } } //서버와 연결
void connectToServer() { Serial.println("connecting to server..."); String content = ""; if (client.connect(hostIp, 80)) { Serial.println("Connected! Making HTTP request to api.openweathermap.org for "+location+"..."); //Serial.println("GET /data/2.5/weather?q="+location+"&mode=xml"); client.println("GET /arduino_command.php?room=401 HTTP/1.0"); //위에 지정된 주소와 연결한다. client.print("HOST: dsk.dlinkddns.com\n"); //client.println("User-Agent: launchpad-wifi"); client.println("Connection: close"); client.println(); Serial.println("Weather information for "+location); } //마지막으로 연결에 성공한 시간을 기록 lastAttemptTime = millis(); } void printHex(int num, int precision) { char tmp[16]; char format[128]; sprintf(format, "%%.%dX", precision); sprintf(tmp, format, num); Serial.print(tmp); } void printWifiData() {
// Wifi쉴드의 IP주소를 출력 Serial.println(); Serial.println("IP Address Information:"); IPAddress ip = WiFi.localIP(); Serial.print("IP Address: "); Serial.println(ip); //MAC address출력 byte mac[6]; WiFi.macAddress(mac); Serial.print("MAC address: "); printHex(mac[5], 2); Serial.print(":"); printHex(mac[4], 2); Serial.print(":"); printHex(mac[3], 2); Serial.print(":"); printHex(mac[2], 2); Serial.print(":"); printHex(mac[1], 2); Serial.print(":"); printHex(mac[0], 2); Serial.println(); //서브넷 마스크 출력 IPAddress subnet = WiFi.subnetMask(); Serial.print("NetMask: "); Serial.println(subnet); //게이트웨이 주소 출력 IPAddress gateway = WiFi.gatewayIP(); Serial.print("Gateway: "); Serial.println(gateway); Serial.print("SSID: "); Serial.println(WiFi.SSID()); ret = WiFi.hostByName("dsk.dlinkddns.com", hostIp); Serial.print("ret: "); Serial.println(ret); Serial.print("Host IP: "); Serial.println(hostIp); Serial.println(""); } -------------------------실행화면----------------------------------- Connecting to WiFi....
Connect success! Waiting for DHCP address IP Address Information:
IP Address: *** MAC address: *** NetMask: *** Gateway: *** SSID: *** ret: 1 Host IP: ***.***.*** connecting to server...
connecting to server... //이런식으로 두번이나 연결할 시간을 기다려야만 이 밑으로처럼 값이 뜨더군요 .. Connected! Making HTTP request to api.openweathermap.org for Gangnam... Weather information for Gangnam HTTP/1.1 200 OK Content-Type: text/html; charset=UTF-8 Server: Microsoft-IIS/10.0 X-Powered-By: PHP/5.6.24 Date: Tue, 04 Oct 2016 04:20:03 GMT Connection: close Content-Length: 88 chkcode:cs;<br> command:000;<br>to_ave1:350,100!;<br>to_ave2:0,0!;<br>to_ave3:0,0!;<br>*
|
|
이전글 | 정량펌프에 관한 질문2 | 2016-10-03 |
다음글 | HC-06 거리 측정, 신호 세기 측정법. | 2016-10-04 |