지금까지 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(;;) ; } }