转载

通过Temboo实现从Arduino获取雅虎天气信息

如果问我未来的科技行业发展有哪些亮点的话,我必须说物联网一定是其中之一。物联网技术发展迅速,现在我们已经看到非常多的设备通过互联网互相通信了。物联网技术的发展背后的推动因素之一是Arduino和Raspberry PI这类廉价硬件的普及,在这些廉价硬件背后的中流砥柱则是各种物联网云平台。Temboo就是众多物联网云平台中的佼佼者。下面我们就来介绍一下如何将Arduino连接到雅虎的天气服务并用获取的天气信息来控制led灯的颜色。

项目准备

开始之前我们先来看看如何通过Arduino来控制led灯的颜色。如下图所示,我们使用PWM来控制led灯的RGB数值。

通过Temboo实现从Arduino获取雅虎天气信息

代码部分非常简单,因为Arduino自己就有PWM输出功能,图中所示的板子PWM对应的孔是3、6和5。

int delTime = 1000; int redPin = 3; int bluePin = 6; int greenPin = 5;  void setup() {    pinMode(redPin, OUTPUT);    pinMode(bluePin, OUTPUT);    pinMode(greenPin, OUTPUT); }  void loop() {     String val = "120";Serial.print("Value " + val.toInt());     Serial.print("Value " + val.toInt());     analogWrite(redPin, 255);     analogWrite(bluePin, 0);     analogWrite(greenPin, 0);     delay(delTime); }

雅虎天气

雅虎天气给每个城市都分配了一个单独的woeid,有woeid就可以获得对应城市的天气信息。Temboo使用的也是woeid所以我们必须把城市的名字换成对应的woeid。

获得woeid有两种方法,第一种是使用雅虎提供的API,不过必须有自己的账户和密钥。下面是获取woeid所调用的代码:

http://where.yahooapis.com/v1/places.q (‘City_Name’)?appid=your:key&format=json

返回的是一个JSON:

{ "places":{ "place":[ { "woeid":720187, "placeTypeName":"Cittu00e0", "placeTypeName attrs":{ "code":7 }, "name":"Perugia", "country":"Italia", "country attrs":{ "type":"Paese", "code":"IT", "woeid":23424853 }, "admin1":"Umbria", "admin1 attrs":{ "type":"Regione", "code":"", "woeid":7153347 }, "admin2":"Perugia", "admin2 attrs":{ "type":"Provincia", "code":"IT-PG", "woeid":12591817 }, "admin3":"Perugia", "admin3 attrs":{ "type":"Comune", "code":"", "woeid":12676126 }, "locality1":"Perugia", "locality1 attrs":{ "type":"Cittu00e0", "woeid":720187 }, "locality2":"", "postal":"", "centroid":{ "latitude":43.103779, "longitude":12.37542 }, "boundingBox":{ "southWest":{ "latitude":43.075531, "longitude":12.32937 }, "northEast":{ "latitude":43.121311, "longitude":12.41188 } }, "areaRank":2, "popRank":11, "timezone":"Europe/Rome", "timezone attrs":{ "type":"Fuso Orario", "woeid":28350914 }, "uri":"http://where.yahooapis.com/v1/place/720187", "lang":"it-it" } ], "start":0, "count":1, "total":3 } }

这里我们获取到的woeid是720187。

第二种获取woeid的方法是在 第三方网站 上进行查询,输入城市即可获得结果。CSDN的下载专区也有很多woeid相关的资源可以下载。

Arduino与Temboo的结合使用

Temboo通过Choreos的方式向Arduino等开发板提供服务。这里我们要用的就是雅虎天气Choreos以及GetTemperature来获取温度信息。

现在把刚刚拿到的woeid复制进来点击运行就好了。虽然也可以通过地址来获取天气信息但我还是觉得woeid最方便。图中还有一些参数可供设置,比如说你可以指定要返回摄氏度还是华氏度。

通过Temboo实现从Arduino获取雅虎天气信息

点击运行之后你会得到一段Arduino代码,复制粘贴运行就可以了。

通过Temboo实现从Arduino获取雅虎天气信息

使用温度来控制led灯的颜色

代码方面我们还需要做点修改以便控制led灯的颜色,我们需要的信息只有温度这一个值。

String line; String lines[4];  int counter = 0; while(GetTemperatureChoreo.available()) {    char c = GetTemperatureChoreo.read();    if (c == 'r' || c == 'n') {    Serial.println("Line ["+line+"]");    lines[counter++] = line;    line = ""; } else    line += c; } String tempLine; // Clean line for (int i=1; i < lines[3].length(); i++) {     tempLine += lines[3].charAt(i); }  int temp = tempLine.toInt(); Serial.println(temp);

注意代码中将字符转换成整型之前需要的操作。

下面的代码是把温度转换为颜色中RGB三个分量的逻辑:

... // Now let's countrol the led int r = ( f1(temp, 20) * 5 ) % 255; int g = ( f1(temp, 10) * 5) % 255; int b = ( f2(temp, 5) * 5) % 255; setRGBColor(r,g,b);  GetTemperatureChoreo.close(); ....

以及控制颜色的代码:

void setRGBColor(int red, int green, int blue) { analogWrite(redPin, red); analogWrite(bluePin, blue); analogWrite(greenPin, green); }

从温度到RGB分量代码中的f1和f2两个函数非常简单:

int f1(int val, int threshold) { if (val < threshold) return 0;  return val;  }  int f2(int val, int threshold) { if (val < threshold) return abs(val);  return 0;  }

当然大家可以根据自己的喜好进行修改。

大功告成!

在这个简单的项目中我们演示了如何借助Temboo云平台来获取雅虎天气信息并据此控制led灯的颜色,希望能够抛砖引玉帮助大家开发出更多更好的物联网项目。

原文链接: Internet of things (IoT): Integrate Arduino with Yahoo! using Temboo

责编:周建丁(IoT技术投稿请联系zhoujd@csdn.net,优稿优酬)

原文  http://geek.csdn.net/news/detail/62960
正文到此结束
Loading...