物联网是近期功能中的下一件大事 。 这项技术发展Swift,并且有许多对象开始使用Internet互相交谈。 Arduino和Raspberry PI等原型平台正在支持这些创新,并帮助许多开发人员创建有趣的IoT项目。 这项新兴技术的Struts之一是云IoT平台 ,可帮助开发人员构建物联网项目 。 Temboo是构建出色的物联网项目的非常有用的出色平台。 为了探索Temboo的强大功能,我们将带以太网屏蔽的Arduino连接到Yahoo!。 天气信息 ,使用此信息Arduino控制RGB led更改其颜色。 在之前的物联网项目中,我们探讨了由连接到Arduino的传感器测量的外部事件如何触发Temboo平台上的动作,例如发送消息等。 在该项目中,它使用了不同的方法:从外部源(例如Yahoo! Weather)检索的数据可以控制Arduino连接的设备并对其产生影响。
Arduino和RGB Led入门
在深入研究Temboo平台细节之前,创建一个简单的Arduino草图来控制RGB led很有用。 Arduino使用PWM(脉冲宽度调制)控制此led类型,以便可以更改三种基本颜色值(红色,绿色,蓝色)。
下图显示了简单的草图:
代码非常简单: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());
analogWrite(redPin, 255);
analogWrite(bluePin, 0);
analogWrite(greenPin, 0);
delay(delTime);
}
运行示例,Arduino控制RGB Led,如下所示:
更详细
如果您不熟悉Yahoo! 天气,您必须知道要获取天气信息,雅虎使用Woeid。 这是分配给全球所有城市,地区的唯一标识符。 使用此参数,可以获得天气信息。 稍后您将看到,Temboo需要Woeid,因此有必要将城市名称转换为woeid。
有两种不同的方法:一种使用Yahoo! API和另一个简单得多。
API:Woeid
此方法要求您在Yahoo!上创建一个帐户。 并创建一个唯一的密钥。 使用Yahoo!可以轻松完成此操作。 开发人员网站。
一旦有了唯一的密钥,我们就可以轻松获得消息:
http://where.yahooapis.com/v1/places.q('City_Name')?appid=your:key&format=json
结果是这样的JSON数据:
{
"places":{
"place":[
{
"woeid":720187,
"placeTypeName":"Citt\u00e0",
"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":"Citt\u00e0",
"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
}
}
在wooed
(720187)是在顶部,这样就足够了复制并粘贴此值。
第二种方法:网站
如果您不想使用一种方法浪费时间,并且正在寻找一种检索woeid的快速方法,则可以使用以下网站:
- woei查找
插入城市名称并单击查找,结果将显示woeid列表。
将Arduino与Temboo集成
Temboo是一个很棒的平台,它使用Choreos将服务公开给Arduino或其他开发平台。 要获取天气信息,我们必须使用Yahoo!。 天气Choreos然后是GetTemperature 。 在这种情况下,项目使用温度来控制RGB Led ,但是您可以使用任何其他参数。
现在一切都非常简单,只需粘贴您之前获得的天气信息,然后单击运行即可获取天气信息。
在此示例中,使用了woeid,但您可以使用“地址”获取天气信息。 无论如何,我更喜欢woeid,因为它要简单得多。
您还应该考虑其他一些可选参数,例如温度单位和响应格式:
单击运行后,您将获得必须复制并粘贴到草图中的Arduino代码。 Arduino准备获取天气信息,如果运行示例,您将得到以下结果:
使用温度控制RGB LED
现在我们已经掌握了所有内容,我们必须将它们混合在一起以使事情正常进行。
必须修改先前复制的带有Temboo代码的草图,以便使用返回的结果来更改RGB 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();
....
然后添加RGB功能以控制led:
void setRGBColor(int red, int green, int blue) {
analogWrite(redPin, red);
analogWrite(bluePin, blue);
analogWrite(greenPin, green);
}
函数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;
}
它们只是一个简单的规则,当然您可以根据需要更改它们。
全做完了!!
在这个物联网项目中,我们将Arduino连接到Yahoo!。 使用Temboo家务的天气。 Arduino检索到的信息可控制RGB led。
您将使用Temboo创建什么? 让我知道…..
翻译自: https://www.javacodegeeks.com/2016/02/internet-things-integrate-arduino-yahoo-using-temboo.html