通过Temboo实现从Arduino获取雅虎天气信息
如果问我未来的科技行业发展有哪些亮点的话,我必须说物联网一定是其中之一。物联网技术发展迅速,现在我们已经看到非常多的设备通过互联网互相通信了。物联网技术的发展背后的推动因素之一是Arduino和Raspberry PI这类廉价硬件的普及,在这些廉价硬件背后的中流砥柱则是各种物联网云平台。Temboo就是众多物联网云平台中的佼佼者。下面我们就来介绍一下如何将Arduino连接到雅虎的天气服务并用获取的天气信息来控制led灯的颜色。
项目准备
开始之前我们先来看看如何通过Arduino来控制led灯的颜色。如下图所示,我们使用PWM来控制led灯的RGB数值。
代码部分非常简单,因为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最方便。图中还有一些参数可供设置,比如说你可以指定要返回摄氏度还是华氏度。
点击运行之后你会得到一段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
责编:周建丁
CSDN原创文章,禁止转载。
- lodash源码分析之缓存方式的选择
- 《物联网智能终端信息安全白皮书》发布
- SemCmsv2_4 Function_php文件过滤不严导致Sql注入
- Python为什么这么火?聆听Python之父诠释Python的精神和文化
- 阿里程序员2017年终总结:web前端最有效学习方法!让你少走弯路
- 《关于深化“互联网+先进制造业”发展工业互联网的指导意见》的系列解读 解读二:打造平台体系
- 2018最火的AI丶云计算丶大数据丶物联网丶量子计算五大热门之间的关系
- 人工智能或能帮助揭示永葆青春的秘密 寻减缓衰老药物
- 近百万的“荣耀”域名遭仲裁 两个终端的对决
- IT专业人员如何看待软件定义的数据中心市场
- 安正平:网络隐私保护不能止于关闭直播平台
- 摩拜与武汉地铁深度合作,网上买地铁票又多了一种渠道
- 从零推导神经网络之入门篇
- 支付宝红包到底是谁挣了?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- DeepFM算法解析及Python实现
- 词嵌入技术解析(一)
- 初识TPOT:一个基于Python的自动化机器学习开发工具
- 为你的机器学习模型创建API服务
- Vim实用技巧——使用.swp文件恢复已删除文件
- Dart 中 final 和 const 区别
- IDEA中Lombok插件的安装与使用
- 11 | Tornado源码分析:Gen 对象(下)
- 为啥不能用uuid做MySQL的主键 ?
- 51单片机在Ubuntu下程序开发和下载
- 答应我,用了这个jupyter插件,别再重复造轮子了
- 解析 hashMap 源码之位运算
- SAP Spartacus的ComponentFactory和ComponentFactoryResolver
- 宜信OCR技术探索之版面分析业务实践|技术沙龙直播速记
- Nginx的rewrite(地址重定向)剖析