지금까지 1~9 번까지의 문서들을 통해 아두이노에서 제어할 수 있는 여러가지 방법을을 살펴보았다. 이제 이것들을 토대로 아이디어를 실제 아두이노 상에서 구현 가능한지 확인해보도록 하자.

동작 시나리오

  1. 날씨 사이트에 접속해서 날씨와 기온, 습도 정보를 받아온다.
  2. 5분에 한번씩 접속하여 값을 업데이트한다.
  3. 받아온 값을 LCD 창에 출력한다.
#include <TextFinder.h>
 
#include <LiquidCrystal.h>                             //  LCD 제어를 하기 위한 라이브러 추가
#include <SPI.h>         // 라이브러리 추가
#include <Ethernet.h>         // 라이브러리 추가
 
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};     // 아두이노 MAC 주소 지정
byte ip[] = { 1, 1, 1, 2};                           // IP 주소 할당
//byte server[] = {74, 125, 235, 71};             // 접속할 google.com IP 주소
byte server[] = {87,248,122,181};
 
 
EthernetClient client;
TextFinder  finder( client );  
 
LiquidCrystal lcd(8, 9, 4, 5, 6, 7);          // 추가한 부분
 
int result;
 
const int BUF_SIZE=30;
char buffer[BUF_SIZE+1];
 
 
void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
//  lcd.print("hello, world!");
 
   Serial.begin(9600);
  Ethernet.begin(mac, ip);         // google.com 접속 준비
  delay(1000);                     // 이더넷 하드웨어를 초기화 하는 동안 잠깐 기다린다
 
  Serial.println("connecting");
 
  if(client.connect(server, 80))              // google.com 서버에 80번 포트로 접속
  {
    Serial.println("connected");
//    client.println("GET /search?q=arduino HTTP/1.0");    // google.com 서버에 arduino 검색하도록 쿼리를 보냄
    client.println("GET /forecastrss?p=KSXX0050&u=c HTTP/1.0");    // google.com 서버에 arduino 검색하도록 쿼리를 보냄
    client.println("HOST:weather.yahooapis.com\n\n");
    client.println();
  }
  else
  {
    Serial.println("connection failed");
  }  
 
}
 
void loop() {
 // lcd.setCursor(0, 1);
 // lcd.print(millis()/1000);
 
    if(client.available())             // 연결이 된 상태라면
  {
  //  char c = client.read();           // 서버로부터의 메세지를 읽어들인다. 수신된 모든 데이터를 시리얼 모니터에 표시함
  //  Serial.print(c);
  }
 
   if(client.connected())
  {
    if(finder.find("text="))
    {
      memset(buffer,0, sizeof(buffer));
      client.readBytesUntil('c', buffer, BUF_SIZE);
      Serial.println(buffer);
      lcd.print(buffer);
      lcd.setCursor(0, 1);
    }
 
//    if(client.find("temp="))
    if(finder.find("temp=") )
    {
    //  if(client.find("="))
      {
//        result = client.parseInt();
        result = finder.getValue();
//        Serial.print("50 km is ");
//        Serial.print(result);
//        Serial.print(" miles");
        lcd.print(result);
      }
    }
    else
    Serial.println("result not found");
    client.stop();
    delay(10000);
  }
 
  if(!client.connected())          //  연결이 끊어진 상태라면
  {
    Serial.println();
    Serial.println("disconnecting");
    client.stop();                               // 접속을 끊는다
    for(;;)
    ;
  }
}
  • computer/embedded/아두이노_그대로_따라하기_-_10.실시간_시간_및_날씨계.txt
  • Last modified: 4 years ago
  • by likewind