아두이노 그대로 따라하기 - 10.실시간 시간 및 날씨계
지금까지 1~9 번까지의 문서들을 통해 아두이노에서 제어할 수 있는 여러가지 방법을을 살펴보았다. 이제 이것들을 토대로 아이디어를 실제 아두이노 상에서 구현 가능한지 확인해보도록 하자.
동작 시나리오
- 날씨 사이트에 접속해서 날씨와 기온, 습도 정보를 받아온다.
- 5분에 한번씩 접속하여 값을 업데이트한다.
- 받아온 값을 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(;;)
;
}
}