ハイパー・マイコン mbedでインターネット 電子工作 5章 リスト5-3 SPXmlWeather

Dependencies:   EthernetInterface HTTPClient TextLCD mbed-rtos mbed spxml

Committer:
sunifu
Date:
Sun Jul 13 11:31:43 2014 +0000
Revision:
0:798ebca9033c
2014.7.13

Who changed what in which revision?

UserRevisionLine numberNew contents of line
sunifu 0:798ebca9033c 1 #include "mbed.h"
sunifu 0:798ebca9033c 2 #include "rtos.h"
sunifu 0:798ebca9033c 3
sunifu 0:798ebca9033c 4 #include "TextLCD.h"
sunifu 0:798ebca9033c 5
sunifu 0:798ebca9033c 6 #include "EthernetInterface.h"
sunifu 0:798ebca9033c 7 #include "HTTPClient.h"
sunifu 0:798ebca9033c 8
sunifu 0:798ebca9033c 9 #include "spdomparser.hpp"
sunifu 0:798ebca9033c 10 #include "spxmlnode.hpp"
sunifu 0:798ebca9033c 11 #include "spxmlhandle.hpp"
sunifu 0:798ebca9033c 12
sunifu 0:798ebca9033c 13 TextLCD lcd(p24, p26, p27, p28, p29, p30);
sunifu 0:798ebca9033c 14 char buf[3000];
sunifu 0:798ebca9033c 15
sunifu 0:798ebca9033c 16 int main() {
sunifu 0:798ebca9033c 17 EthernetInterface eth;
sunifu 0:798ebca9033c 18 int retEth;
sunifu 0:798ebca9033c 19 HTTPClient http;
sunifu 0:798ebca9033c 20 int retHttp;
sunifu 0:798ebca9033c 21 SP_XmlDomParser parser;
sunifu 0:798ebca9033c 22
sunifu 0:798ebca9033c 23 printf("Setting up ...\r\n");
sunifu 0:798ebca9033c 24 lcd.cls();
sunifu 0:798ebca9033c 25 lcd.locate(0,0);
sunifu 0:798ebca9033c 26 lcd.printf("Setting Up...");
sunifu 0:798ebca9033c 27
sunifu 0:798ebca9033c 28 eth.init();
sunifu 0:798ebca9033c 29 retEth = eth.connect();
sunifu 0:798ebca9033c 30
sunifu 0:798ebca9033c 31 lcd.locate(0,0);
sunifu 0:798ebca9033c 32 if (!retEth) {
sunifu 0:798ebca9033c 33 printf("Network Setup OK\r\n");
sunifu 0:798ebca9033c 34 lcd.printf("Network Setup OK");
sunifu 0:798ebca9033c 35 } else {
sunifu 0:798ebca9033c 36 printf("Network Error %d\r\n", retEth);
sunifu 0:798ebca9033c 37 lcd.printf("Network Error %d");
sunifu 0:798ebca9033c 38 return -1;
sunifu 0:798ebca9033c 39 }
sunifu 0:798ebca9033c 40
sunifu 0:798ebca9033c 41 while(true)
sunifu 0:798ebca9033c 42 {
sunifu 0:798ebca9033c 43 retHttp = http.get("http://weather.yahooapis.com/forecastrss?w=28426187&u=c", buf, sizeof(buf));
sunifu 0:798ebca9033c 44
sunifu 0:798ebca9033c 45 lcd.locate(0,1);
sunifu 0:798ebca9033c 46 switch(retHttp){
sunifu 0:798ebca9033c 47 case HTTP_OK:
sunifu 0:798ebca9033c 48 printf("Read completely\r\n");
sunifu 0:798ebca9033c 49 lcd.printf("Read completely ");
sunifu 0:798ebca9033c 50 break;
sunifu 0:798ebca9033c 51 case HTTP_TIMEOUT:
sunifu 0:798ebca9033c 52 printf("Connection Timeout\r\n");
sunifu 0:798ebca9033c 53 lcd.printf("Timeout ");
sunifu 0:798ebca9033c 54 break;
sunifu 0:798ebca9033c 55 case HTTP_CONN:
sunifu 0:798ebca9033c 56 printf("Connection Error\r\n");
sunifu 0:798ebca9033c 57 lcd.printf("Connection Error");
sunifu 0:798ebca9033c 58 break;
sunifu 0:798ebca9033c 59 default:
sunifu 0:798ebca9033c 60 printf("Error\r\n");
sunifu 0:798ebca9033c 61 lcd.printf("Error ");
sunifu 0:798ebca9033c 62 }
sunifu 0:798ebca9033c 63
sunifu 0:798ebca9033c 64 parser.append( buf, strlen(buf)); // stream current buffer data to the XML parser
sunifu 0:798ebca9033c 65 wait(5.0);
sunifu 0:798ebca9033c 66 printf("\r\n----------%s----------\r\n",buf);
sunifu 0:798ebca9033c 67
sunifu 0:798ebca9033c 68 SP_XmlHandle rootHandle( parser.getDocument()->getRootElement() );
sunifu 0:798ebca9033c 69
sunifu 0:798ebca9033c 70 /*
sunifu 0:798ebca9033c 71 SP_XmlCDataNode * title = rootHandle.getChild( "channel" ).getChild("title").getChild(0).toCData();
sunifu 0:798ebca9033c 72 printf("\r\n === Title:%s === \r\n",title->getText());
sunifu 0:798ebca9033c 73 SP_XmlCDataNode * title1 = rootHandle.getChild( "channel" ).getChild("image").getChild("title").getChild(0).toCData();
sunifu 0:798ebca9033c 74 printf("\r\n === Title:%s === \r\n",title1->getText());
sunifu 0:798ebca9033c 75 SP_XmlCDataNode * title2 = rootHandle.getChild( "channel" ).getChild("item").getChild("title").getChild(0).toCData();
sunifu 0:798ebca9033c 76 printf("\r\n === Title:%s === \r\n",title2->getText());
sunifu 0:798ebca9033c 77 */
sunifu 0:798ebca9033c 78
sunifu 0:798ebca9033c 79 SP_XmlElementNode * location = rootHandle.getChild( "channel" ).getChild( "yweather:location" ).toElement();
sunifu 0:798ebca9033c 80 if (location) {
sunifu 0:798ebca9033c 81 printf("\r\n === Location:%s === \r\n",location->getAttrValue("city"));
sunifu 0:798ebca9033c 82 }
sunifu 0:798ebca9033c 83
sunifu 0:798ebca9033c 84 SP_XmlElementNode * forecast;
sunifu 0:798ebca9033c 85
sunifu 0:798ebca9033c 86 forecast = rootHandle.getChild( "channel" ).getChild("item").getChild( "yweather:forecast",0).toElement();
sunifu 0:798ebca9033c 87 if (forecast) {
sunifu 0:798ebca9033c 88 printf("\r\n ----- Date:%s(%s) ----- \r\n",forecast->getAttrValue("date"),forecast->getAttrValue("day"));
sunifu 0:798ebca9033c 89 printf("Condition:%s \n",forecast->getAttrValue("text"));
sunifu 0:798ebca9033c 90 printf("Temp:Low%sC High%sC\n",forecast->getAttrValue("low"),forecast->getAttrValue("high"));
sunifu 0:798ebca9033c 91 }
sunifu 0:798ebca9033c 92
sunifu 0:798ebca9033c 93 forecast = rootHandle.getChild( "channel" ).getChild("item").getChild( "yweather:forecast",1).toElement();
sunifu 0:798ebca9033c 94 if (forecast) {
sunifu 0:798ebca9033c 95 printf("\r\n ----- Date:%s(%s) ----- \r\n",forecast->getAttrValue("date"),forecast->getAttrValue("day"));
sunifu 0:798ebca9033c 96 printf("Condition:%s \n",forecast->getAttrValue("text"));
sunifu 0:798ebca9033c 97 printf("Temp:Low%sC High%sC\n",forecast->getAttrValue("low"),forecast->getAttrValue("high"));
sunifu 0:798ebca9033c 98 }
sunifu 0:798ebca9033c 99
sunifu 0:798ebca9033c 100 wait(120.0);
sunifu 0:798ebca9033c 101 }
sunifu 0:798ebca9033c 102 }