ArduinoYun教程之Arduino环境与Linux环境的桥梁Bridge
Arduino环境与Linux环境的桥梁——Bridge
在第一章中介绍Arduino Yun硬件的时候提到过,它上面有两个处理器ATmega32U4和Atheros 9331。20个IO口和Micro USB口是连接在ATmega32U4上的,而WiFi、Ethernet、SD卡槽和USB口是连接在Atheros上的。如果这两个处理器只能独立工作,那么把他们集成到Yun中也就没有意义了。所以,ATmega32U4和Atheros 9331之间是可以通讯的,而这个通讯的主体部分就是Bridge库,它们之间的关系可以用图3.38表示。
图3.38 ATmega32U4、Atheros与Bridge之间的关系
什么是Bridge
正如库名Bridge(中文含义为桥)所预示的,它是ATmega(代表Arduino环境)和Atheros9331(代表Linux环境)之间的桥梁。Bridge库允许ATmega和Atheros之间的双向通讯,即可以信息从Atheros到ATmega也可以从ATmega到Atheros。以Bridge库为基础还衍生出了几个特别的类库,下面分别对他们进行简单地介绍。
1.Process
Process库用来在Linux处理器上启动一个进程(通常是运行一个Shell命令),它的使用方式类似Shell脚本。
2.Console
Console库使得可以使用Arduino IDE的串口监视器通过来与Yun中的程序交互。例如,你可以使用串口监视器来远程打开或关闭一个照明灯。
3.FileIO
FileIO库是Linux文件系统的接口,它可以用来在SD卡上读写文件。例如,使用它可以完成将日志记录文件保存到SD卡。
4.HttpClient
这个库可以在Linux中创建一个HTTP客户端。实质上,HttpClient是Process的扩展,它将一般的CURL命令进行了封装,使得它更容易使用。
5.Mailbox
Mailbox是Linux环境和Arduino环境之间通讯的一个异步、无会话(sessionless)的接口。
6.YunClient和YunServer
YunClient是基于Arduino的HTTP客户端而YunServer是对应的服务器端。这个库是仿照EthernetServer库创建的。
7.Temboo
Temboo库是Temboo的接口,使用它可以很容易地连接到Temboo提供的各种类型的在线工具。例如,在国内比较熟悉的有雅虎天气、Dropbox以及GITHUB等在Temboo中都有对应的接口。
使用Bridge编程
到现在为止,我们接触Yun的时间也不算短了,可以说是将它里里外外翻了个遍。但是我们一直没有感受到它和其他的板子有何区别。在本节中,我们将带大家来使用Yun来获取你当地的天气信息。下面我们就开始吧。
Temboo是什么
有许多读者一定会诧异自己现在可能连写好的代码都看不懂,怎么能写出这么高级的程序呢?其实,这要感谢Temboo了。
Temboo可以说是一个资源库,它集合超过80个网站的100多个API,之后在这些API的基础上创建了超过2000个Choreos。这些代码可以被程序员直接使用,大大提高了工作的效率。而我们之所以介绍Temboo,最特别的地方是Arduino Yun正是Temboo公司和Arduino公司合作开发的。所以,Temboo对Arduino Yun的支持力度是非常大的——各个API针对Arduino Yun的代码都是完整的代码,用户需要做的只是复制、粘贴而已。
2.在Temboo上注册账号
在了解了Temboo之后,为了生成符合我们需求的代码,需要在Temboo上注册一个账号。这个账号的注册和使用都是免费的(但是有API调用次数和流量限制,用户可以按需要购买增值服务)。注册地址为https://temboo.com/。
3.选择你需要使用的API
在注册完成后,你就可以开始寻找你想要使用的功能了。我们将要做的是一个天气预报系统,雅虎天气就可以满足我们的需求,所以我们需要在左侧的树状表中找到它,如图3.39所示。
图3.39 雅虎天气
雅虎天气提供了三种获取天气的方式,我们选择基于地址的方式,即GetWeatherByAddress。
4.打开IoT模式
在选择了GetWeatherByAddress之后,会出现如图3.40所示的界面。
图3.40 GetWeatherByAddress
默认情况下,Choreos的代码是针对指定的编程语言生成的,如Java、PHP、Python以及Ruby。而我们需要的是针对Arduino Yun的,这就需要我们打开IoT模式,如图3.41所示。
图3.41 IoT模式
IoT模式下默认选择的开发板就是Arduino Yun。
5.指定自定义值
在Temboo中,大多数Choreos都需要指定一个或多个自定义的量来实现对应的需求。由于我们要实现的是针对地址的天气预报,所以在这个Choreos中需要正是地址信息,所以我们需要将我们要获取天气信息的地址输入到INPUT区域的Address中,如图3.42所示。
图3.42 输入指定的地址
6.生成代码
在输入了你期望的地址之后,你就可以点击右下角的Run按钮来生成代码了。在代码成功生成之后将出现在网页的CODE区域,如图3.43所示。
图3.43 生成的代码
生成的代码就是可以直接使用的代码了,而且是为你指定的地址量身定制的。
7.将代码复制到Arduino IDE
生成的代码可以直接点右下角的COPY复制并粘贴到你的Arduino IDE中,也可以点击右上角的Download下载下来之后使用Arduino IDE打开。在将代码的主体部分复制到Arduino IDE中之后,我们还需要为程序添加头文件。头文件在网页的HEADER FILE区域,如图3.44所示。
图3.44 头文件
在粘贴头文件之前,我们首先需要在Arduino IDE中新建一个标签。在Arduino IDE的一个Sketch中新建标签可以使用快捷键Ctrl+Shift+N或者点击IDE右上角的图标,然后在弹出菜单中选择新建标签,如图3.45所示。
图3.45 新建标签
在新建标签的过程中IDE要求你输入文件名,这个文件名可以从主体代码的文件包含部分找到,如下为主体代码的文件包含部分:
#include <Bridge.h>
#include <Temboo.h>
#include "TembooAccount.h" // contains Temboo account information, as described below
其中,双引号中间的部分即为头文件的名称。在确定创建文件之前一定要注意文件名需要明确指定后缀,如图3.46所示。
图3.46 新建头文件
在头文件建成以后,就可以将复制的头文件代码粘贴进去了。
7.上传代码
在完成头文件和主体文件之后,现在就是时候将代码上传到Yun中了——连接Arduino Yun和电脑、在Arduino IDE中选好端口、单击按钮上传代码。
8.查看结果
等待Arduino IDE显示“上传完成”之后,我们就可以通过串口监视器来查看输出的结果了。串口监视器可以通过组合键Ctrl+Shift+M或者单击按钮打开。打开串口监视器之后,我们就可以看到这个Sketch输出的结果了,如图3.47所示。
图3.47 Sketch的输出结果
这个Sketch的输出结果并不是我们熟悉的图形形式,而是以XML形式输出的。这样的好处是可以供其他程序非常容易地解析出需要的信息,当然对于不熟悉XML的读者来说就不那么友好了。但是,这些内容中确实包含了气象信息的,如下是输出信息的一部分:
<yweather:location city="Beijing" region="" country="China"/>
<yweather:units temperature="F" distance="mi" pressure="in" speed="mph"/>
<yweather:wind chill="75" direction="160" speed="4" />
<yweather:atmosphere humidity="54" visibility="3.11" pressure="29.72" rising="0" />
<yweather:astronomy sunrise="5:57 am" sunset="6:17 pm"/>
这部分显示了这次结果的位置、温度单位、风速以及空气质量等信息。而如下的这条语句则是说明的当前的天气状况:
<yweather:condition text="Haze" code="21" temp="75" date="Fri, 19 Sep 2014 1:59 pm CST" />
而下面的5条信息则是对未来5天的天气预报:
<yweather:forecast day="Fri" date="19 Sep 2014" low="60" high="78" text="Partly Cloudy" code="29" />
<yweather:forecast day="Sat" date="20 Sep 2014" low="58" high="84" text="Sunny" code="32" />
<yweather:forecast day="Sun" date="21 Sep 2014" low="61" high="83" text="Mostly Sunny" code="34" />
<yweather:forecast day="Mon" date="22 Sep 2014" low="64" high="80" text="AM Clouds/PM Sun" code="30" />
<yweather:forecast day="Tue" date="23 Sep 2014" low="56" high="70" text="Showers" code="11" />
经过笔者以上的介绍,此时读者应该相信虽然这很让人难以置信,但是这千真万确的是天气预报。而关于如何解析这些XML信息则在本书的范畴之内,读者需要参考其他相关书籍。
至此,我们已经成为了Arduino Yun真正的主人,并且它非常听话地按照我们的要求完成了天气预报的项目。在接下来的内容中,我们就需要自己动手来实现一些好玩的项目了。不过在此之前,首先要了解一下Arduino所用的编程语言与你所熟悉的语言之间的差别。
本文选自:Arduino Yun快速入门教程大学霸内部资料,转载请注明出处,尊重技术尊重IT人!
来源:oschina
链接:https://my.oschina.net/u/1585857/blog/473545