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人!

ArduinoYun教程之Arduino环境与Linux环境的桥梁Bridge相关推荐

  1. ArduinoYun教程之OpenWrt-Yun与CLI配置Arduino Yun

    ArduinoYun教程之OpenWrt-Yun与CLI配置Arduino Yun OpenWrt-Yun OpenWrt-Yun是基于OpenWrt的一个Linux发行版.有所耳闻的读者应该听说他是 ...

  2. ArduinoYun教程之ArduinoYun硬件介绍

    ​ArduinoYun教程之ArduinoYun硬件介绍 ArduinoYun的电源插座 Arduino Yun有两排插座,这些插座可以按类型分为三类:电源.数字IO和模拟输入.电源部分主要集中在如图 ...

  3. ​ArduinoYun教程之ArduinoYun硬件介绍

    2019独角兽企业重金招聘Python工程师标准>>> ArduinoYun教程之ArduinoYun硬件介绍 ArduinoYun的电源插座 Arduino Yun有两排插座,这些 ...

  4. JDK8下载及安装教程之windows版、linux版

    JDK8下载及安装教程之windows版.linux版 JAVA8下载及安装教程之windows版 环境: 下载: 安装: JAVA8下载及安装教程之linux版本 环境: 下载: 安装: JAVA8 ...

  5. openfire在windows环境和linux环境下的配置

    一般很多时候开发人员会用openfire作为消息推送或者即时通讯的服务器,下面主要介绍一下openfire在windows环境和linux环境下的配置. 一.openfire在windows环境下的配 ...

  6. openfire linux 64,openfire在windows环境和linux环境下的配置

    一般很多时候开发人员会用openfire作为消息推送或者即时通讯的服务器,下面主要介绍一下openfire在windows环境和linux环境下的配置. 一.openfire在windows环境下的配 ...

  7. 小码农UU手把手教你云服务器搭建linux环境,还用什么虚拟机啊

    文章目录 linux环境搭建 主要有三种方式 云服务器优点 告诫 购买服务器(我买的是腾讯云) 1. 进入官网 2.登录 3.认证购买 找到自己的IP 设置root密码 小结: 使用 XShell 远 ...

  8. 黑马程序员Flutter入门教程之Windows系统Android开发环境配置

    前置依赖环境 Windows系统要求: Win7及以上 硬盘空间除AndroidStudio外不低于400M 下载Git for windows工具,并且可以运行git命令 git version 配 ...

  9. linux mv 环境变量,linux环境变量,cp,mv命令,more,less,cat,tail,head,的使用...

    linux环境变量,cp,mv命令,more,less,cat,tail,head,的使用 [email protected] ~]# cp /usr/bin/ls   /tmp/ [[email p ...

最新文章

  1. MyBatis-Plus 看这篇就够了
  2. 综述 | 北斗系统应用趋势分析
  3. 移动APP开发使用什么样的原型设计工具比较合适?
  4. 如何看你的信息有没有泄露
  5. python中tile的用法_python3中numpy函数tile的用法详解
  6. 2、内核的配置和移植
  7. 【DP】划分数列(ybtoj DP-2-1)
  8. Flask爱家租房--房屋管理(获取主页幻灯片展示的房屋基本信息)
  9. Bootstrap 折叠插件Collapse 选项
  10. java实现阅读量统计_博客中的阅读量是如何设计的?
  11. JFinal Template Engine 使用
  12. python切割音频文件_python3使用pydub切分音频文件
  13. gels imagej 图片处理_科研论文作图之ImageJ
  14. 大数据与云计算是什么关系
  15. c语言常量有哪些分类,c语言常量的正确表示方法有哪些
  16. 人工智能学习-传教士-15数码-拟合-逻辑推理
  17. SqlServer2005使用top 100 PERCENT 无法排序的问题
  18. C++运动会分数统计系统
  19. 安装cuda后却没有CUDA Samples怎么办?
  20. arcgis怎么压缩tif文件_使用gdal压缩tif文件

热门文章

  1. ASP.NET中删除文件夹下的文件
  2. 在.NET客户端程序中使用多线程
  3. ORA-14452的出现原因解析及解决方法
  4. 像淘宝、京东这样的大型电商网站服务器构架完全部署解决方案
  5. mysql编写中文时变成问号解决方法
  6. gitlab自带的Nginx与原Nginx冲突的解决方案
  7. intellij idea的TFS拉取项目文件不完全、文件误删恢复、TFS忽略文件解决方法
  8. Win10系统删除文件需提供管理员权限-- 解决方案
  9. 何时在C ++中使用extern
  10. 如何以编程方式在Android上截屏?