Android Things旨在让Android开发者可以用熟悉的工具(Android Studio)开发智能设备。
Android Things是给Android开发者开发智能设备的一个大大的福利,Android开发者熟悉移动开发和移动互联网,可以将自己的移动互联网思维注入智能设备的设计中,而传统的硬件开发者,在这方面相较于Android开发者有所欠缺,这是Android开发者的优势。
然而,Android开发者对硬件、电路往往不够熟悉,这是劣势,然而通过学习,对硬件和电子电路有一些了解,就可以很方便的用Android Things开发智能设备了。如果你喜欢动手,可以很方便的设计你的智能设备,并DIY出原型产品,开发运行在设备中的Android Things APP,结合云服务和手机APP,展示你的产品创意。之后聪明的你就可以全面的展示你的智能设备,融资或是通过众筹的方式,进行智能设备的产品化。或者你只想DIY自己玩玩,或是带着你的孩子一起玩,对,给孩子开发自己专属的智能玩具,那也是很酷的事情。
做Android Things,做物联网开发,就不得不说电子电路了,Android开发者可能并不熟悉,不过本文会帮你梳理一下,基本上都是初中物理的知识。首先要介绍一个非常好的工具——面包板。
面包板可以让你不需要焊接,通过接插的方式,把电子元件连接在一起,实现所需的功能,非常省时省力。Android Things官网的开发案例,也基本上都是通过面包板连接电子元件实现的。上图就是Android Things官网的第一个例子,电灯大法(让LED灯闪烁)。虽然Android Things现在也推荐一些集成了LED、按键和一些传感器的树莓派扩展板,不过还是建议入门者选择面包板和插件元件的配件套装,这样你知道电路是怎么连接的,知道原理会有助于发展你的创意。
我们可以按上图,先连接好电路:
1. 图中从树莓派的一个GPIO引脚(Pin31-BCM6),引出线到面包板上。
2. 面包板中间每一行(标注了1~30)中下半部分的ABCDE五个孔、FGHIJ五个孔,是分别连通的。即第1列的ABCDE孔可以理解为是用一根导线连通的。
3. 如图中,导线和电阻左侧,都连在第13列下半部分的孔中,它们是接通的。
4. 连接一个电阻(可以选用300Ω~1KΩ的电阻,如果有我们的配件套装,可以使用蓝色的电阻,阻值是1KΩ的)。
5. 同样,通过面包板,电阻的另一端连接到了红色LED灯上,注意是连接LED灯的长脚。
6. 红色LED灯的短脚,通过面包板,连接一根杜邦线,连接到了面包板上面的负极插孔上。
7. 面包板上下各有一对电源正极插孔(标红线)和负极插孔(标蓝线或黑线),这些孔同一行整行都是连通的。
8. 将面包板上方的负极插孔,连接到树莓派的负极(GND)上。
这样,我们就可以通过控制GPIO产生高电平,电流通过电阻流过LED灯,使LED灯发光了。
我们在淘宝上提供了入门套装,你可以选择包含了树莓派和已烧录Android Things系统的TF的套件,如果你已经有树莓派,只购买配件即可。如果你要自己下载烧录Android Things系统,可以先读我的另一篇《Android Things入门防坑必读-硬件和系统下载安装篇》。
套件根据Android Things官网Samples开发案例所需的配件进行打包,精选优品,无需自己搭配,专业工程师亲自搭配测试。
开发第一个Android Things APP
如果你是Android开发者,你应该已经有了Android Studio,如果没有的话,可以到官网下载一个最新版的。
https://developer.android.google.cn/studio/index.html
之后,到Github上去下载官网第一个例子(Simple PIO)的源代码。
https://github.com/androidthings/sample-simplepio
在Android Studio中打开,这里有个坑,应该是Android Studio的Bug,由于项目使用的是新的gradle-4.1进行编译,提示Failed to open zip file。没有下载成功。测试发现用浏览器是可以打开下载的,所以感觉是Android Studio的Bug。如图,打开gradle-wrapper.properties文件,看最后一行。
如下图红框所示,讲最后一行的https改成http,重新编译即可,第一次编译时要下载gradle-4.1-all.zip文件,需要耗费很长时间。
通过网络adb连上树莓派,假设树莓派的IP地址为192.168.1.100,即在命令行输入
adb connect 192.168.1.100
如果是NXP的Pico开发板,则是通过USB Type-C线,通过USB方式连接ADB,通过网络方式连接ADB会提示拒绝连接。
连接成功后,运行blink这个APP即可看到LED灯闪烁了,可以尝试换其它颜色的LED灯试试效果。
如果你希望你的APP可以开机自动运行,那么可以修改AndroidManifest.xml文件。
如文件中的注释所述,将下面的<intent-filter>代码段的注释取消即可。主要是设置了“android.intent.category.HOME”属性,这样相当于你的APP是设备的默认启动程序了。此时你的APP将会开机自动启动,当APP意外中止时,也将会自动重启。
试想你的智能设备售卖出去了,然后程序异常退出了,你总不希望它在用户手里变砖头吧,所以Android Things发现你的APP退出之后,会帮你重新启动。(以前都要自己写异常重启的代码,现在系统帮你实现了。)
不过在调试的时候,APP因为自动重启而没办法停止就不太好,比如你先调试了A程序,然后又运行了B程序,A程序没法退出,B程序就没法申请A程序已使用的资源。所以,官网给出的方法是,调试完A程序之后,如果要调试B程序,则先通过ADB将A程序卸载掉。
adb uninstall com.example.projectA
或者,保持AndroidManifest.xml文件中,下面的<intent-filter>代码段为注释状态。
使用PWM控制舵机
在官网Simple PIO这个例子中,还有一个pwm项目,可以在启动运行的地方,将blink项目切换为pwm项目,运行这个APP,我们可以控制舵机旋转。
如图,需要通过三根线连接舵机:
1. 树莓派5V电源线,如图中红线,连接到舵机的 红色线
2. 树莓派 GND线,如图中黑线,连接到舵机的 棕色线
3. 树莓派 PWM输出线,如图中黄线,连接到舵机的 橙色线
注意线不要接错,否则可能烧毁舵机。
更多动手实践
我在Blink代码的基础上,做了一个数字管显示数字,自动累加的例子,你可能猜到了数码管其实就是一系列LED灯组合在一起的,后面的文章中会做介绍,你也可以动手实践一下。