零、前言

基于安卓系统的设备的广泛应用引起了人们对开发针对安卓系统的软件应用的极大兴趣。幸运的是,有一个强大且低成本的硬件平台可以让你在真实硬件上快速轻松地测试你的应用:BeagleBone Black。BeagleBone Black 专注于小尺寸和各种扩展和接口机会,以非常低的价格提供大量处理能力。它还为应用开发人员提供了一个机会,这个机会曾经只属于那些专业的硬件黑客或昂贵的硬件开发工具包的所有者:编写与定制硬件电路交互的安卓应用的机会。

无论您是硬件接口的新手还是经验丰富的专家,BeagleBone Black 的 Android为您提供了开始创建与您的定制硬件直接通信的 Android 应用所需的工具。从一开始,这本书将帮助你理解安卓独特的硬件接口方法。你将安装和定制安卓系统,构建与你的 BeagleBone Black 平台接口的电路,并构建使用该硬件与外界通信的原生代码和安卓应用。通过依次学习每章中的示例,您将了解如何创建能够同时与多个硬件组件交互的多线程应用。

一旦你在这本书里探索了各种各样的示例电路和应用,你将会成为一名安卓硬件接口专家!

这本书涵盖了什么

第一章安卓和 BeagleBone Black 简介,带你完成将安卓操作系统安装到 BeagleBone Black 板上的过程。它还为您提供了一个硬件组件列表,您将需要这些组件来执行本书中的所有活动。

第二章与安卓的接口,向大家介绍了 BeagleBone Black 的硬件和安卓的硬件抽象层的几个方面。它描述了如何对您的开发环境和安装在 BeagleBone Black 上的安卓系统进行一些修改,以允许安卓应用访问 BeagleBone Black 的各种硬件功能。

第 3 章用 GPIOs 处理输入和输出,指导你构建你的第一个硬件接口电路,并解释一个可以与之通信的基本安卓应用的细节。这是你朝着构建更复杂的应用迈出的第一步,这些应用可以与你的 BeagleBone Black 之外的世界进行交互。

第 4 章用 I2C 存储和检索数据,从第 3 章用 GPIOs 处理输入和输出展开基础知识,并解释如何使用应用中的异步后台线程与硬件通信。它将指导您构建一个电路,将非易失性存储芯片与 BeagleBone Black 接口,并介绍与芯片交互的应用的实现细节。

第 5 章使用 SPI 与高速传感器接口,探索创建应用,使用与 BeagleBone Black 接口的温度和压力传感器执行高速接口。

第 6 章创建完整的接口解决方案,结合前几章中关于 GPIO、I2C 和 SPI 接口的经验教训,创建一个单一、复杂的硬件和软件解决方案,使用所有三个接口对源自外部世界的硬件事件做出反应。

第 7 章从这里去哪里,描述了 BeagleBone Black 上更多可用的硬件接口,解释了如何创建更持久的安卓硬件/软件解决方案,并为您提供了一些未来项目可以探索的想法。

这本书你需要什么

我们在本书中提供了说明,假设您使用的是基于 Windows 或 Linux 的计算机。如果你已经是安卓应用开发者,你可能已经安装了所有你需要的软件应用。我们希望您已经安装了 Eclipse ADT 和 Android NDK,尽管我们在第 2 章开始时提供了下载这些工具的链接,以便在您尚未安装的情况下与 Android 进行交互。第 1 章安卓和 BeagleBone Black 简介,提供了实现整本书使用的示例接口电路所需的各种硬件组件和设备的列表。

这本书是给谁的

如果你是一名安卓应用开发者,想开始尝试 BeagleBone Black 平台的硬件功能,那么这本书是你的理想之选。熟悉基本的电子原理是有帮助的,读者应该对使用 Eclipse ADT 和安卓 SDK 开发安卓应用有基本的了解,但不需要以前的硬件经验。

惯例

在这本书里,你会发现许多区分不同种类信息的文本样式。以下是这些风格的一些例子和对它们的意义的解释。

文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、伪 URL、用户输入和 Twitter 句柄如下所示:“这避免了必须在您的init.{ro.hardware}.rc文件中包含一个特殊模块和一个加载命令的覆盖层。”

代码块设置如下:

extern int openFRAM(const unsigned int bus, const unsigned int address);
extern int readFRAM(const unsigned int offset, const unsigned int 
    bufferSize, const char *buffer);
extern int writeFRAM(const unsigned int offset, const unsigned int 
    const char *buffer);
extern void closeFRAM(void);

当我们希望将您的注意力吸引到代码块的特定部分时,相关的行或项目以粗体显示:

public void onClickSaveButton(View view) {
   hwTask = new HardwareTask();
 hwTask.saveToFRAM(this); 
}

public void onClickLoadButton(View view) {
   hwTask = new HardwareTask();
 hwTask.loadFromFRAM(this);
}

任何命令行输入或输出都编写如下:

root@beagleboneblack:/ # i2cdetect -y -r 2

新名词重要词汇以粗体显示。您在屏幕上看到的单词,例如菜单或对话框中的单词,出现在文本中,如下所示:“如果用户再次单击示例按钮,则会实例化另一个HardwareTask实例。”

警告或重要提示会出现在这样的框中。

类型

提示和技巧是这样出现的。

读者反馈

我们随时欢迎读者的反馈。让我们知道你对这本书的看法——你喜欢或不喜欢什么。读者反馈对我们来说很重要,因为它有助于我们开发出你真正能从中获益的标题。

要给我们发送一般反馈,只需发送电子邮件<[feedback@packtpub.com](mailto:feedback@packtpub.com)>,并在您的邮件主题中提及书名。

如果你对某个主题有专业知识,并且对写作或投稿感兴趣,请参见我们位于www.packtpub.com/authors的作者指南。

客户支持

现在,您已经自豪地拥有了一本书,我们有许多东西可以帮助您从购买中获得最大收益。

下载示例代码

您可以从您在http://www.packtpub.com的账户下载您购买的所有 Packt Publishing 书籍的示例代码文件。如果您在其他地方购买了这本书,您可以访问http://www.packtpub.com/support并注册,以便将文件直接通过电子邮件发送给您。

勘误表

尽管我们尽了最大努力来确保我们内容的准确性,但错误还是会发生。如果你在我们的某本书里发现了错误——可能是文本或代码中的错误——如果你能向我们报告,我们将不胜感激。通过这样做,你可以让其他读者免受挫折,并帮助我们改进这本书的后续版本。如果您发现任何勘误表,请访问http://www.packtpub.com/submit-errata,选择您的书籍,点击勘误表提交表链接,并输入您的勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上传到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。

要查看之前提交的勘误表,请前往https://www.packtpub.com/books/content/support并在搜索栏中输入图书名称。所需信息将出现在勘误表部分。

盗版

互联网上版权材质的盗版是所有媒体的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上遇到任何形式的我们作品的非法拷贝,请立即向我们提供位置地址或网站名称,以便我们寻求补救。

请通过<[copyright@packtpub.com](mailto:copyright@packtpub.com)>联系我们,获取疑似盗版资料的链接。

我们感谢您在保护我们的作者方面的帮助,以及我们为您带来有价值内容的能力。

问题

如果您对本书的任何方面有问题,可以在<[questions@packtpub.com](mailto:questions@packtpub.com)>联系我们,我们将尽最大努力解决问题。