tag 标签: Android Things

相关帖子
相关博文
  • 热度 13
    2017-3-22 22:56
    3255 次阅读|
    0 个评论
    第一次阅读本专题的朋友可移步,阅读之前的文章: 物联网到底是什么? 完美支持 Android Things 的开发板都在这里了 Android Things 开发环境搭建 Android 与 Android Things,父子还是兄弟? Android Things中的I2C 前面絮叨了这么多,好像还没有一个总体的概念,我们如何写一个完整的代码呢? 现在深度学习很火,那我们就在 Android Things 中,利用摄像头抓拍图片,让 TensorFlow 去识别图像,最后用扬声器告诉我们结果。 是不是很酷?说基本的功能就说了这么长一串,那垒代码得垒多久啊? 项目结构 我们就从 Android Studio 的环始境开始说起吧。 启动 Android Studio 之后,务必把 SDK Tools 的版本升级到 24 及以上。然后再把 SDK 升级到 Android 7.0 及以上。让 Android Studio 自己完成相关组件的更新,导入项目,项目的结构如下: 代码中的 TensorflowImageClassifier 是用于跟 TensorFlow 做交互的,还有摄头的 handler 级及图像处理相关的代码。我们再来看看外部的引用库。 包括了 Android Things 和 TensorFlow 的相关库,当然,Android 的 API 的版本是24。gradle 的依赖和 Manifest 中的 filer 是和之前搭建开发环境的讲解一致的。 引用的 TensorFlow 的库,是 aar 打包的 Tensorflow-Android-Inference-alpha-debug.aar,这就意味着我们不需要 NDK 环境就能够编译整个项目了。 主要是留意 dependencies 这一项,包括了 TensorFlow 的库和 Android Things 的库: 再申请了摄头相关的权限。补充一下,Android Things 是不支持动态权限的申请的。 硬件连接 接下来便是硬件如何连接了。 硬件清单如下: Android Things 兼容的开发板,比如 Raspberry Pi 3 Android Things 兼容的摄像头,比如 Raspberry Pi 3 摄头模块 元器件: 1 个按钮,见面包板 2 个电阻,这块儿必须要说明一下:由于硬件连接的示意图是接的 5V 的电压,一般来说 GPIO 和 LED 的承压能力是 3V,有些 GPIO 是兼容 5V 的,所以中间需要串联 100~200 欧的电阻。 1 个 LED 灯 1 个面包板 杜邦线若干 可选:扬声器或者耳机 可选:HDMI输出 连完了硬件,我们这时候就要理解操作流程了。 操作流程 按照前面讲解的内容,用 Andorid Studio,连接 ADB,配置好开发板的 Wi-Fi,然后把应用加载到开发板上。 操作流程如下: 重启设备,运行程序,直到 LED 灯开始闪烁; 把镜头对准猫啊,狗啊,或者一些家具; 按下开关,开始拍摄图片; 在 Raspberry Pi 3 中,一般在 1s 之内,可以完成图片抓拍,经 Tensorflow 处理,然后再通过 TTS 放出声音。在运行的过程中 LED 灯是熄灭的; Logcat 中会打印出最终的结果,如果是有显示设备连接的话,图片和结果都会显示出来; 如果有扬声器或者是耳机的话,会把结果语音播报出来。 由于代码的结构特别简单,注意一下几段关健的操作即可。想必图形、摄头的操作在Android 的编程中大家都会了,所以不做讲解了。 主要是看 LED 的初始化操作: 有必要说一下,ImageClassifierActivity 是应用唯一的 Activity 的入口。在 Manifest 中已经有定义,它初始化了 LED, Camera, TensorfFlow 等组件。其中,我们用到的 Button 是 BCM32 这个管脚,用到的 LED 是 BCM6 管脚,相关的初始化在这个 Activity 中已经完成。 这部分代码是捕捉按键按下的代码。当按下按键时,摄头开始捕捉数据。 把摄像头拍摄的数据转成 Bitmap 数据之后,我们会调用 TensorFlow 来处理图像。 这个函数调用了 TensorFlow 进行处理,最后把结果输出到 logcat 中。如果代码中调用了 tts 引擎,那么则把结果转成语音读出来。看来,最重要的就是 TensorFlowClassifier 类的 recognizeImage() 这个接口了。我们继续往下看。 这是最后的一步,调用 TensorFlow 进行图像识别: 把 Bitmap 图像转成 TensorFlow 能够识别的数据; 把数据拷到 TensorFlow 中; 识别出图像,给出结果。 调用 TensorFlow 的过程还是挺好玩的,也挺方便。那么,为啥 TensorFlow 一下子就能够识别出是什么图片呢?Tensorflow 的官网给出的解答: www.tensorflow.org/tutorials/image_recognition 有一点需要提示,TensorFlow 的图像识别分类可以用提交到网络服务器识别,也可以在本地用离线数据识别。可以先把 200M 左右的识别数据放在本地,然后进行本地识别。现在大概能分出 1000 个类别的图像,哪 1000 个类别呢?项目代码中已经包含了哦。 是不是运用 TensorFlow 来处理物联网的数据会特别简单,不光是 TensorFlow, Firebase 也可以用到 Android Things 中来。这功能,强大的没话说了! 今天提到的这个项目,来源于 Google 在 GitHub 上维护的项目,项目的地址是 github.com/androidthings/sample-tensorflow-imageclassifier 当然,GitHub 上还有很多 Android Things 的代码可以参考。 是不是迫不急待的自己写一个应用呢?实际上,这个项目稍加改动便能有新的玩法。例如加上一个红外感应器,一旦有生物在附近就马上拍图片,并且识别。 展开你的脑洞吧 :-) 后记 这一篇文章是这个专题的最后一篇了。写完整个专题,发现 Android Things 带给开发者太多太多的便利,如何烧写文件?如何运用 SDK?甚至如何用 Google 的其它服务做物联网相关的数据处理?都有太多太多的现成的方案供我们选择,感叹使用 Android Things 进行物联网应用开发实在太方便了! 您如果有任何涉及到 Android Things 方面的想法,都欢迎大家在下方留言,我们会把好的建议转交给 Android Things 的产品部门。也许在某一天,你的建议就是 Andorid Things 的一部分。
  • 热度 16
    2017-3-16 12:07
    2306 次阅读|
    0 个评论
    上一讲中,我们说到 Android Things 的 API,以及 Peripheral I/O 设备包含的 API 的类型。但是作为程序员的我们,怎么理解这些 API 呢? 我们就拿 I2C 的 API 来说吧。看看我们怎样在 Android Things 中添加一个 I2C 的设备?首先得知道,I2C 是做什么的?怎么用? 实际上,I2C 是同步的串行通信总线,一般用于控制信号,比如控制 LCD, Camera 等设备。另外,大部分传感器有 I2C 的接口。I2C 是依靠时钟信号来传递数据的,所以有主设备(产生时钟的信号)和从设备(接收时钟的信号)之分。I2C 的通信每一次操作都是由主设备的发起的。 既然 I2C 是依靠时钟传递的信号,那么在连线上就有时钟钱 (SCL) 和数据线 (SDA),然后为了电势与大地相同,自然少不了地线 (GND)。为了方便没有接触过 I2C 总线的同学们理解这三个名词,贴上名词的全称: Shared clock signal (SCL) Shared data line (SDA) Common ground reference (GND) 单看上面的图,为啥有三个 I2C 设备连接在一起呢?这三者之间又是什么关系? 其中,写有 Master Device 的 I2C 设备,称为主设备,另外两个为从设备。从主设备引出的 SDA 和 SCL 线构成 I2C 的总线。一个 I2C 的主设备可以提供一条 I2C 的总线,一条总线上最后可以连接 127 个 I2C 的从设备。 等等,为啥是 127 个呢?主要是 I2C 的地址有 7 位和 10 位两种地址。也就意味着,对于 7 位的地址表达的数据最大可以到 2^7=128,减去一个主设备,就是 127 个从设备了。这里的 I2C 设备地址,就是上图的 Address: 0x3c 和 0x4c,I2C 的主设备是通过从设备的地址,来找到从设备的。请注意,I2C 的主设备,是没有设备地址这一说法的。 我们还需要了解 I2C 的一些硬件信息: 主方向的数据,但是同一时刻,只能有一种传输方式。这点和 SPI 是有差别的,SPI 总线支持全双工模式。但它同时只能访问一个从设备,由片选信号 (CS) 来决定。这就很明显了,I2C 通常用于控制命令的传输。而 SPI 通常用数据的批量传输。 了解完 I2C 的基本硬件信息。我们来了解一下 I2C 的从设备操作方式。不多不多,就是三大步。 连接从设备 对从设备进行读操作 对从设备进行写操作 设备连接 先要检查我们的物联网设备上有没有 I2C 总线。这时需要补充一下,有可能你的开发板上有多个 I2C 的总线。这时候, I2C 的总线地址 (此处非 I2C 的设备地址) 是有多个的,要明确你的 I2C 设备是接在哪个 I2C 的总线上。这也可以理解,为什么得到的 I2C 总线的数据是用 List 类型进行存放的。 如果有总线,我们再查找当前的 I2C 总线上对应的 I2C 设备。 关键的接口是 manager.openI2CDeivce(..),这个函数有两个参数,DEVICE_NAME 是用户定义的一个字符串,表示设备的名称。I2C_ADDRESS,也是之前所说的 I2C 从设备上的地址,这个地址在当前的 I2C 总线上是唯一的。 读写操作 首先得把 I2C 的操作流程搬出来说了。 这张图翻译成中文就是这样子的: 这样就完成了向设备地址为 0x30、寄存器地址为 0x10 的设备上读或者写入 0x06 这个数据。 那怎么知道是读数据,还是写数据呢?实际上 I2C 是 7 位的地址位。但是一个字节是 8 位,其中有一位叫做读写位。如果那一位设为读,就是去读操作,如果设为写,就是写操作。实际上,在示波器上我们还能看到另外的一个 ACK 位,保证硬件上传输正常,ACK 位在软件上不需要处理。 那么,加上 I2C 的读写位之后, I2C 数据传输会是什么样的呢? 我们可以看到, I2C 数据传输的时序,从硬件上来说 SCL 是按周期发的时钟信号,当 SCL 是高电平时,SDA 产生一个下降沿,这时候开始数据传输。其中传输 I2C 的从设备地址共有 8 位,1-7 位是地址,第 8 位是读写位,0 表示写,1 表示读。然后硬件自动产生 ACK 位。接下来就是数据传输的整个过程,最后当数据传完后,SCL 为高电平,SDA 产生上升沿时,产生 STOP 操作。事实上,在 I2C 做读操作需要往 I2C 的设备写入随机值,再去读,不过这些操作在 I2C 相关的接口中已经为我们封装好了。 这么大篇幅介绍了 I2C 的原理,还有 I2C 的时序,操作流程。实际上,Android Things 已经帮我们把读写接口封装好了,我们只需要在理解的基础上,调用接口就行了。 可以看出,Android Things 已经给我们封装好了 I2C 的读写操作 ,我们直接用就可以了。 这里面还有个细节比较绕。之前提到, I2C 的设备地址可以是 7 位,也可以是 10 位,但是 I2C 设备的寄存器可以是 8 位,也可以是 16 位。这里面就涉及到 8 位的设备,以及 16 位设备的读写问题。 六大函数出场: 8 位地址读写操作- readRegByte() 和 writeRegByte() 16 位地址读写操作 - readRegWord() 和 writeRegWord() 批量读写操作- readRegBuffer() and writeRegBuffer() 其中 Byte 是针对 8 位的 I2C 设备,Word 是针对 16 位的设备。 读操作:用寄存器的地址做为参数。 写操作:两个参数,寄存器地址,和你要写入的值。 上面的代码中,把寄存器的第 6 位置 1。所以操作流程是 读出寄存器的值 将这个值的第6位置1 (value |= 0x40;) 然后把新的值写回寄存器 不过对于 16 位的地址操作还有一个大小端的问题。(什么是大小端?去 Google 吧 )现在的 API 是依照小端模式来读写的 16 位设备地址。 直接批量数据操作,可以最大读到 32 个连续的寄存器的数值。 那么,我们怎么使用接口进行批量操作呢? 传输原始数据 还是先来张图吧: 这种操作方法,不同于上面的读写寄存器。在 I2C 的操作中,属于 burst 操作方法。即一次性的读写多少字节,最后再停止。 跟一个例子: 这样传输能带来更高的传输效率,解决了 I2C 传输的核心问题,我们也解决了支持 I2C 的任何外设的读写问题。 后记 Android Things 的 SDK 中,Peripheral I/O 部分是包括三种总线的,UART, I2C, SPI。对于软件开发人员来说,有下面几点需要注意: UART 开发,需要了解 UART 的波特率、流控等概念。 SPI 开发,需要了解 MISO, MOSI,CLK, GND, CS 这些连线的作用,还有 SPI 的操作模式等,SDK 中的接口,与上文的 I2C 的开发流程相似。 I2C开发,就不用接着说了吧 下一讲我们会展示一个完整的 Android Things 应用。 您如果有任何涉及到 Android Things 方面的想法,都欢迎大家在下方留言,我们会把好的建议转交给 Android Things 的产品部门。也许在某一天,你的建议就是 Andorid Things 的一部分。
  • 热度 17
    2017-3-8 13:45
    2823 次阅读|
    0 个评论
    文| 谷歌开发技术专家 (GDE) 王玉成 (York Wang) 物联网应用开发与手机和平板的应用开发有一些区别,那么 Android Things 与 Android 又有哪些差别呢? 变化 Android Things 主要在 Android 的核心框架中扩展了一些支持物联的 API。开发者可以利用这些 API 直接与自定义的硬件打交道,Android Things 同时也简化了单个程序的应用,开机可以自动运行用户程序。 核心应用包 Android Things 不包括标准的 system app 和 content provider。也会在下面的 content provider API 中避免使用 common intent。 CalendarContract ContactsContract DocumentsContract DownloadManager MediaStore Settings Telephony UserDictionary VoicemailContract 查看文档请访问: developer.android.google.cn/reference/android/provider/package-summary.html 可选的显示 Android Things 支持 Android 的通用框架,比较传统的 Android 布局,少了状态栏和导航按钮,用户只能以全屏方式来体验应用。 Android Things 的应用仍然要包含 Activity,这是因为 Activity 要接收前置应用的焦点用于触发。Android Things 不能通过非前端的应用组件(比如服务)来获取按键、或者是移动信息。 Home Activity Android Things 只支持单应用,应用总入口为 ”home activity”。AndroidManifest.xml 文件中,intent filter 必须包括两项内容: category.DEFAULT和 category.IOT_LAUNCHER 用于支持 iot; category.LAUNCHER 用于 Android Studio 的调试或者是布署时启动应用。 Google Service Android Things 支持 Google Service 的一个子集,下表列出了 Android Things 支持哪些 API,不支持哪些 API。 权限与通知 权限:Android Things 无法在运行时申请权限。 通知:Android Things 不支持 NotificationManager。 Things Support Library Android Things 添加了单独的 API,即 Things Support Library,这组 API 包括两个主要部分。Peripheral I/O 和 User-space Drivers。 这两部分 API 是 Android 的标准 SDK 中没有的。 我们还是先看看 Peripheral IO 里面有哪些东西: GPIO 可以用于传感器的控制,也可以用于工业标准协议。Native PIO 可以用 C/C++ 去操作 GPIO ( Developer Preview 2 版本添加了 NDK 的支持)。 PWM 用于对电机,灯等外设做细粒度控制。 最重要的一块,就是硬件协议的支持。 三种通信协议,各有各的好。其中 I2C 和 SPI 协议是同步信号,SPI 比 I2C 的控制稍微复杂一点,SPI 多了片选信号,一般是用拨码开关来做 SPI 的片选信号。UART 属于异步信号,主要用于低速传输。三种协议刚好满足了三种不同场景的速度要求。值得一提的是,国内许多协议模块,还有总线模块,都能够用串口进行转发,而传感器模块,也都支持 I2C 或者是 SPI 接口。Android Things 支持了这三种通用的串行协议,也就意味着支持了大量的传感器或者是其它外设。 然后接下来看看 User-space Divers 是个什么: 这些不是传统 Android 的基本的 API 么,为啥在 Android Things 中需要单独的列为一类API支持呢?回到先前的我们比较 Android Things 和传统的 Android 的差异性上来,Android Things 是不支持 Service 用于后台广播的,当我们需要监听设备时,需要在 Service 上面封装 Driver,然后在 Activity 中去响应事件。 GPS 提供高精度的物理定位信息,我们可以把 GPS 的数据结合 Wi-Fi,或者是 Fused Location Provider,最终得到定位信息的结果。 利用 INPUT 接口,我们可以把嵌入式设备中的触摸屏、键盘、游戏手柄等设备,与拖拽、手指滑动等操作结合起来,让用户和设备进行简单交互。 Sensor 可以测量和报告物理环境的状态,Android Things 的传感器框架 sensor fusion 可以把多种物理传感器的原始数据转化成统一的虚拟传感器数据。这里稍微补充一下,sensor fusion 在 Android 中已经有 API 了,网上也有许多代码做参考,就不在这儿展开了。在实际的代码实现中,开发者自己实现 sensor 的驱动,然后与 sensor fusion 结合起来,把数据再进行相应的处理,是个不错的思路。 下一讲我们会去认识一种协议,并且理解如何使用这种协议。 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 热度 21
    2017-3-2 08:52
    2022 次阅读|
    0 个评论
    物联网 (IoT) 的应用开发,离不开跟开发板打交道,我们需要配置好开发板的各种环境,最后才能用 Android Studio 进行应用开发。 我们今天就以 Raspberry Pi 3 为例,一起来搭建 Android Things 的开发环境。 1. 硬件准备 Raspberry Pi 3 的硬件开发板就长这样: 开发板是有了,但是我们应该怎么用开发板呢?那好,我们先进一步了解并分析开发版的功能: 玩过 Raspberry Pi 3 的人可以略过这段,但是对于首次上手的玩家,有几点要注意: 事项 1:别费尽心思找电源了,开发板用的 Micro USB 口做供电接口。别找个电源适配器,拼命往音频接口上塞啦,这么搞厂商也很头疼的。 事项 2:做什么样的事找什么样的位置。每个接口有每个接口特定的作用。看着文字对上号,根据方案选择特定的模块就行了。 那么多 GPIO 口啊……怎么办?我有针脚恐惧症的。 没问题,我们就先来了解针脚的作用,就可以玩转开发板了。 等等,我怎么知道开发板哪个地方是第一根针脚啊? 在电路板上,找到 GPIO 针脚,离 USB 接口最远的那一端,对了,开发板上应该有一个 J8 标记, 就是那位置为 1 号针脚,只需要找到这几根针脚就够了。供电是引出 5V 还是 3.3V 的电源针脚,跟你自己的电路有关,切记在连线之前把电压搞清楚,不然会烧掉器件的。接下来认出 UART, SPI, PWM, I2C 接口,依据自己的需求,找一个面包板,就可以拉线出来干活了。 硬件认清楚了,这是第一步,还要找找开发版的外设,一般说外设就是供电,显示,存储,输入这几大块。 microUSB 给电源供电; HDMI 用来显示; 有线或者 Wi-Fi 用来连接网络; microSD 卡以及读卡器用来烧写系统。 配备完这些外设,搭好面包板,就可以动手烧写系统了。 2. 下载镜像 开始找地方下载镜像了,镜像链接在此: developer.android.com/things/preview/download.html 上一讲提到的 4 个开发版的镜像都可以下载。 Raspberry Pi 3 最新的镜像压缩包名为 androidthings_rpi3_devpreview_2.zip,下载完压缩包,解压缩之后,只有一个文件 iot_rpi3.img,我们来看看是什么格式的文件: 这些信息好像还不足以让我们判断镜像的内容,但是可以明确的是,这是一个可以做启动的镜像文件。那我们来看看镜像内部包含了哪些内容? 通过镜像的内容,我们看到镜像的内部结构。其中 rpi boot 是 Raspberry Pi 的 secondary boot,后续就是 uboot,接下来,就是 uboot 所引导的系统文件了。做过 uboot 级别移植的人,应该十分清楚 bl1, bl2, uboot 的一些概念,这里就不做详细解释了。 这里再啰嗦几句,我们看一下 Developer Preview 1 版本的镜像,以 Edison 开发版的镜像为例: 可以看到,在 Developer Preview 1 这一版中,分成了许多文件,并且提供了烧写脚本,还提供了 fastboot 和 ADB 工具。但是,对于初学者来说,如何正确使用这些工具成了一个难题。所以在 Dev Preview 2 的版本中,把这些文件合并成一个 image 文件,烧写就变的很简单了。还是要为 Google 的贴心赞一赞,每一版的改进都会让开发者用起来更方便。 细心的读者会发现,两个开发版的镜像文件中,有些文件内容是不同的,主要是 bootloader 及之前的可执行代码。有兴趣的读者可以对比一下 x86 和 arm 的架构的 bootloader 的不同的地方及作用。 Edision 的镜像文件中间,还包括一个文件,似乎在回顾着某种历史,如果你找出来了,就请在下方留言吧。 3. 烧写镜像到 SD 卡 Raspberry Pi 的外接存储设备是 microSD 卡,以下简称 SD 卡。由于 Linux, Windows, Mac 的烧写的工具也不尽相同,我们以 Linux 为例说一下烧写步骤,烧写的命令只要是 dd,但是千万不要 dd 到你的硬盘上去了! 最安全的烧写流程如下: $ df -h 命令,查看一下当前有哪些设备,如果电脑不能识别 SD 卡,那么开始第 2 步,如果电脑已经识别 SD 卡,记下来 SD 卡是哪个设备,就可以走第 3 步了; 把 SD 卡插上,重复第一步; $ sudo dd bs=4M if=iot_rpi3.img of=/dev/sdx 命令,确定自己的 SD 卡的设备号,然后把下载的 img 文件烧写到 SD 卡上 ,这一步需要 root 权限哦。这儿要提醒一句,不是烧写到 SD 卡的某个分区,而是烧写到这个 SD 卡所在的设备上。 $ sync 命令,同步数据到 SD 卡。 Windows 系统下,用 Win32DiskImager 工具,用管理员权限,烧写 img 文件到 SD 卡即可。 Mac 系统下也是用 Linux 下的命令: $ sudo dd bs=1m if=image.img of=/dev/rdisk 4. 启动开发板 把已经烧写过 Android Things 的 mciroSD 卡插到 Raspberry Pi 3 的对应位置,就可以启动开发板了。 按以下的步骤去启动开发板: 用 microUSB 供电; 插入网线; 插入 HDMI 接口。 大概第一次系统启动要一到两分钟,耐心等待就行。 这儿准备了一个 Windows下烧写镜像的视频教程: @ mbb_embed_qq 视频最后,显示器显示了当前有线网的的 IP 地址,以及 Wi-Fi 还没有连接上的状态。那么,我们可以借助有线网的 IP,去连接 ADB: $ adb connect connected to :5555 由于 Raspberry Pi 是支持 DNS 广播的,如果你的电脑支持 MDNS 功能,运行命令: $ adb connect Android.local 连接成功后,会返回: connected to :5555 这样我们的 ADB 就正常连上Raspberry Pi 3了。借助 ADB ,我们可以连接 Wi-Fi 了。 其中包含了用户名和密码,如果你的密码为空,不加 -e passphrase 这个参数即可。 接下来就要检查 Wi-Fi 是否正确连上了: 出现上面的消息,表明 Wi-Fi 是正常启动了。那 DNS 是否通呢?拨下网线,然后 ping 一下试试。 5. 连接串口用于调试 现在虽然 ADB 连上去了,网络也通了,但是事情才刚刚开始。我们在工作前期,引入一种比较方便的调试方法,那就是嵌入式开发中骨灰级的调试方式:串口调试: 对着上图,拿着 USB 转 TTL 的线,找到 GPIO 的针脚上的 UART 的 TXD 和 RXD 两根针。然后再找到地线,连接相应的杜邦线就可以了。稍等,四个针脚,为啥有一个针脚不连呢,那个不是供电线吗?由于 USB 转 TTL 线,在 USB 这端已经供电了,所以 VCC 接口不需要连了。 这儿需要注意的是,RX 和 TX 是交叉的,不是直连的。因为开发板上的 TX 就是 USB 这边的 RX。RS-232 和 TTL 的区别,这儿就略过了。 然后就要开始用 PC 机上的串口调试软件来连接 USB 转串口了。三大系统的工具又不太一样。Windows下有 putty, secruCRT 等,Linux 下有 Mimicom, Mac 下有 Serial。根据自己的操作系统来选用吧。不过记各把波特率设为 115200, 8N1, 然后不要用流控,不管硬流控也好,还是软流控也好,统统的不选。以前看过太多的血一般的教训,选了流控,结果花好长时间跟踪,串口什么打印也没有,但是示波器上却能看到串口数据……这时间不值。 6. 调整您的布局 关掉开发板电源,然后拨出 SD 卡。用 PC 机读 SD 卡。然后把 cmdline.txt 这个文件中的这一行: console=serial0, 115200 删掉即可。不过作为嵌入式开发人员,谁舍得关串口呢?是么?当然,如果你的开发中,有串口设备做其它用途,是可以关掉串口输出的。 下一讲就开始 Android Things 的 SDK 的分析了。 7. 后记 您如果有任何涉及到 Android Things 方面的想法,都欢迎大家在下方留言,我们会把好的建议转交给 Android Things 的产品部门。也许在某一天,你的建议就是 Andorid Things 的一部分。 版权声明:本文为博主原创文章,未经博主允许不得转载。
  • 热度 10
    2017-3-1 22:23
    1962 次阅读|
    0 个评论
    经过2016年Brillo首批开发者的反馈,以及市场调研,为了照顾广大Android开发者的习惯,形成了现在的Android Things操作系统,完全兼容Android Studio的开发环境。 今年2月8日,Google发布了Developer Preview 2(DP2)版。以后大概会每隔6到8周更新一个版本。DP2版本做了如下改进: 开发板添加了USB audio支持,并且集成到系统的硬件抽象层(HAL)中。 解决了Raspberry Pi 3上的一些与硬件相关的问题。 添加了对Intel Joule开发板的支持。 Android Things现在支持4款开发板:Android Things 现在支持4款开发板:Intel Edison开发板,Intel Joule开发板,NXP Pico i.MX6UL开发板和Raspberry Pi 3开发板。这四款开发板兼顾了ARM和X86架构,并且也兼顾了32位和64位的系统。所有的开发板都支持WIFI和蓝牙。 我们就来见见这四款开发板的真面目 x86系列有两块开发板支持Android Things,Inte Edison和Intel Joule,Joule是2016年才出货的芯片,是最新的嵌入式CPU。 Intel Joule比起Intel Edison开发板,带来了一些新的特性,除了主频和内存的性能提升之外,还有高清视频处理接口。其中HDMI用于高清显示输出,值得一提的是,HDMI本身是支持音频信号的传输的,后续可扩展哦。现在用USB Audio解决了音频的问题。而CSI-2是MIPI联盟的CSI协议的第2版,这也是比较先进的技术了。WIFI这一块,802.11ac是支持双模的,在2.4G和5G两个频段都可以使用,蓝牙协议也有升级。而USB的支持,更是一大亮点,USB3.0 OTG也支持起来了。 综合x86结构下的两款开发板,我们会看到,Android Things在wifi,摄像,音频方面有全方位的支持。也就意味着,Android Things可以解决音频、视频以及其它数据输入的问题。 我们再看看ARM的两款开发板的对比 ARM的开发板,也有音频和视频的支持了,并且都有有线网口的支持。也就是现在我们需要的各类数据传输途通道,Android Things都可以一口通吃了。 由于Android Things的内核还是基于Linux内核的,支持MMU和多任务处理。我们知道,在ARM的体系结构中,Cortex-M系列的CPU是不支持MMU的,一般用作节点或者端点设备。Android Things的可以支持Cortex-A的CPU,可以用于大多数节点,或者是路由,网关相关的节点。 Android Things与Android最大的区别在于,Android Things是为物联网量身定制的通用系统,主要支持传感器,外设的相关程序开发。但是比起起传统的嵌入式开发来说,更容易一些,基本封装了与硬件相关的接口,使用软件开发者调用硬件更容易。即便你只是稍微了解硬件,也能够完成物联网应用的开发,Android开发人员,可以更快的适应Android Things的应用开发。 从BSP层面来说,Google管理了BSP相关的代码,并且做了OTA的支持,保证代码的可靠性和安全性。 购买开发板 http://www.digikey.com/en/product-highlight/d/digikey/android-things?WT.z_vanity=androidthings 购买开发套件 https://www.adafruit.com/androidthings 下一讲我们就开始用Raspberry Pi 3来搭Android Things的开发环境了。 版权声明:本文为博主原创文章,未经博主允许不得转载。