정보나눔

오픈소스하드웨어 프로젝트에 대한 다양한 정보를 나누는 공간입니다.

weather cube에 대해서 질문드립니다.
asdnm41 | 2015-10-14

와이파이 연결은 잘되어서 다음과 같은 정보들은 뜹니다. 

IP Address Information:
IP Address: 192.168.43.126
MAC address: 78:C4:0E:02:B9:12
NetMask: 255.255.255.0
Gateway: 192.168.43.1
SSID: G3_2722
ret: 1
Host IP: 128.199.103.33

그런데 그후에 이미지에서 처럼 서버에 연결한다고 한뒤 소켓이 없다고 끝이납니다.

서버에 연결되지 않아 날씨정보가 나오지 않는데 왜 그런것인지 알려주시면 감사하겠습니다.

프로필사진

Klant 2015-10-14 20:59:51

안녕하세요

openweathermap API 사용시 사용법이 조금 달라졌습니다.

서버에게 날씨데이터를 호출할 때 별도의 API key를 요구하지 않았었는데요. 

현재는 openweathermap 홈페이지에 가입 후 api key를 할당받아야합니다. 

사용 방법은 날씨를 알려주는 무드 램프[part 1]에 언급했으니 참고하신 후 변경하시면 되겠네요 ;) 

화이팅입니다!

프로필사진

Klant 2015-10-15 11:26:02

Data_pharsing(){   } 안에 일부 코드가 날아갔네요... 

Data_pharsing(){   } 안의 코드를 아래 코드로 바꿔 주세요 ;)

 

if (client.connected()) {
    delay(1000);
    while (client.available()) {
      //전송된 데이터가 있을 경우 데이터를 읽어들인다.
      char inChar = client.read();
      // 읽어온 데이터를 inChar에 저장한다.
      currentLine += inChar; 
      //inChar에 저장된 Char변수는 currentLine이라는 String변수에 쌓이게 된다.
      Serial.print(currentLine);
      
      
      //라인피드(줄바꿈)문자열이 전송되면 데이터를 보내지 않는다.
      if (inChar == '\n') {
        //Serial.print("clientReadLine = ");
        //Serial.println(currentLine);
        currentLine = "";
      } 
      
      //온도 데이터가 전송되었는지 확인
      if ( currentLine.endsWith("<weather number=")) {
        //현재 스트링이 "<temperature value="로 끝났다면 온도데이터를 받을 준비를 한다.
        Serial.println("h");
        readingWeather = true; 
        weatherString = "";
      }      

      //<temperature value=뒤에 오는 문자열을 tempString에 저장한다.
      if (readingWeather) {
        if (inChar != 'v') { //전송될 문자가 'm'이 올때까지 온도값으로 인식
          weatherString += inChar;
        } 
        else { //전송된 문자가 'm'이라면 온도데이터를 그만 저장하고 온도값 출력
          readingWeather = false;
          weather = getInt(weatherString);
          Serial.print("-  weathercode: ");
          Serial.print(weather);
        }
      }

      if ( currentLine.endsWith("</current>")) { //현재 스트링이 </current>로 끝났다면 연결을 끊고 다시 서버와 연결을 준비한다.
        delay(10000); //10초뒤에 서버와 연결을 끊고 재연결을 시도한다.
        client.stop(); 
        connectToServer();
        //Serial.println("Disconnected from Server.\n");
      }
    }   

  }
  else if (millis() - lastAttemptTime > requestInterval) {
    //연결을 실패했다면 requestInterval(60초)이후에 다시 연결을 시도한다.
    connectToServer();
  }

이전글   |    weather cube와 관련해서 질문드립니다. 2015-10-14
다음글   |    RC 카 만들기 질문드립니다. 2015-10-15