物联网:将Arduino与Yahoo!集成 使用Temboo

本文介绍了如何通过物联网技术将Arduino与Yahoo!天气API结合,利用Temboo平台获取天气信息,并根据温度控制RGB LED的颜色变化。首先介绍Arduino和RGB LED的基础知识,然后讲解如何获取城市的Woeid,最后详细阐述如何使用Temboo的Choreos获取天气数据并将其应用于RGB LED的控制。
摘要由CSDN通过智能技术生成

物联网是近期功能中的下一件大事 。 这项技术发展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_rgb_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的快速方法,则可以使用以下网站:

插入城市名称并单击查找,结果将显示woeid列表。

将Arduino与Temboo集成

Temboo是一个很棒的平台,它使用Choreos将服务公开给Arduino或其他开发平台。 要获取天气信息,我们必须使用Yahoo!。 天气Choreos然后是GetTemperature 。 在这种情况下,项目使用温度来控制RGB Led ,但是您可以使用任何其他参数。

现在一切都非常简单,只需粘贴您之前获得的天气信息,然后单击运行即可获取天气信息。

在此示例中,使用了woeid,但您可以使用“地址”获取天气信息。 无论如何,我更喜欢woeid,因为它要简单得多。

您还应该考虑其他一些可选参数,例如温度单位和响应格式:

arduino_temboo_setup

单击运行后,您将获得必须复制并粘贴到草图中的Arduino代码。 Arduino准备获取天气信息,如果运行示例,您将得到以下结果:

arduino_temboo_choreso_with_yahoo
如您所见,源代码可在草图中使用。

使用温度控制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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值