一、你应该了解的 Android Things 的知识

1. Andorid Things 是神马?

Google 物联网操作系统 Android Things,它可以运行在有线扬声器、智能温控器、安全摄像头、路由器等设备上,Google 的理念是通过 Android Things 让 Android 开发者与公司能够以他们过去的开发方式继续开发物联网硬件设备。结合 Google 为物联网推出的通讯协议 Weave,Android Things 将会在 Google 的物联网战略中发挥重要作用。

2. Andorid 和 Android Things 是啥关系?

在深入了解它的开发之前,你应该了解如下几点:

  • 是 Google 为 Google Brillo(Google 在 2015 年宣布的一款物联网操作系统)更改名称后的新版系统;

  • Brillo 核心也是 Android 系统,但是它把 C++作为主要开发环境,开发和部署明显不同于常规的 Android。而 Android Things 则面向所有的 Java 开发者,使用 Android Studio 作为开发工具,开发过程和 Android 几乎相同;

  • 支持 Google API for Android 的一个子集(如:Firebase,Admob 和 Maps 等),要求用户输入或者证书认证的 API 对于应用不可用;

  • 开机启动自动运行你开发的 App,不存在系统的 App,系统应用标准套件(如:Calendar,Contacts,Settings 等)和 Content Provider,开发过程中应该避免使用这些 Intent 和 Content Provider;

  • 继承了核心的 Andorid 框架,并由 Things Support Library 提供了额外的 API,这些 API 允许应用集成在手机上没有的新硬件;

  • 使用 Android 相同的 UI toolkit,支持图形用户界面。开发的应用占据了全部显示区域,没有系统栏和导航按钮,所以不支持 Notification。但是它也不强制要求显示设备,没有显示时 Activity 仍然是主要的 App 组件,输入事件分发 Acitivity;

  • 不支持在运行时请求权限,因为嵌入式设备不能保证有 UI 来显示运行时对话框,你需要在清单文件中声明权限,在安装的时候被授予。

二、树莓派 3 上手就是这么简单

1. 咱们一起来唠唠树莓派吧

官方推荐的开发板有 Intel Edison、NXP Pico i.MX6UL 和 Raspberry Pi 3(树莓派 3)。树莓派是世界上最流行的单板计算机,3 Model B 是最新的版本。它提供了如下配置:

  • 一个双核 64 位 ARM Cortext-A53 1.2GHz CPU(512M 的内存,在背面);

  • 400 MHz GPU;

  • 电源接口;

  • HDMI 和 DSI 视频接口;

  • 音频接口;

  • 有线、无线网络和蓝牙 4.1 模块;

  • 4 个 USB 2.0 接口;

  • 40-针 GPIO 连接器用于连接外设;

  • SD 卡存储(在侧边);

2. 手把手教你安装你自己的 Android Things

  • 准备你的硬件设备,如:1-树莓派 3 开发板,2-电源线,3-HDMI 转接线(连接显示器),4-SD 卡等和 5-网线;

  • 在你的电脑上插入 8G 或者更大的 SD 卡;

  • 下载你的开发板(以树莓派 3 为例)对应的系统镜像(https://developer.android.com/things/preview/download.html),并解压 img 文件;

  • 下载你使用的操作系统对应的(以 Windows7 为例)Win32DiskImager,并安装(https://sourceforge.net/projects/win32diskp_w_picpathr/);

  • 以管理员用户启动 Win32DiskImager,选择解压的 ImageFile,选择插入的 SD 卡磁盘,点击 Write 等待写入完毕;

注意:千万小心!!如果选择的磁盘不是 SD 卡,会损坏该磁盘中的数据;

  • 将你的 SD 卡插入到开发板中,连接开发板的 1-电源、2-HDMI 转接线和 3-网线;

  • 打开电源,显示器就会输出相关启动信息,启动成功后显示如下;

  • 使用 adb tools 通过 ip(通过路由器可查看)连接开发板安装的 Androoid Things 系统(显示 Wi-Fi 和网络连接 ip);

三、来跑一个 Demo 耍耍

这里我们以官方提供的 sample-simplepio 项目的 blink 模块为例,这样给大家演示一下如何使用 Android Studio 和树莓派 3 开发板,进行 Android Things 项目的开发;

1. 克隆代码

2. 导入工程

Open an existing Android Studio Project->选择 sample-simplepio 项目->OK->按照默认引导导入项目;

3. 工程目录

sample-simplepio 项目运行基本的代码练习 PIO API, 项目包含 3 个模块,每个例子是一个可以独立运行的 Android 模块。这里我们仅仅使用 blink 模块跟大家演示和介绍:

4. 硬件准备

在搭建电路之前,我们列举一下需要的硬件设备:

 树莓派 3 开发板 1 块 LED 灯 1 个 电阻 1 个 面包板 1 块

5. 电路搭建

根据下面的电路设计图,使用相关的元器件搭建电路如下(注意正极连接 BCM6 引脚,负极连接 Ground 引脚 ):

6.连接系统

连接好树莓派开发板,启动 Android Things 系统,并在开发电脑中使用 adb connect 命令连接到开发板(这样你就可以在构建运行的时候选择树莓派开发板进行安装了 );

7. 项目概述

该项目实现了使用 SeekBar UI 控件来控制电路中 LED 等闪烁频率的功能,主要使用了 GPIO API 进行如下处理:

 使用 PeripheralManagerService 来打开一个连接到 GPIO 端口的 LED 连接; 使用 DIRECTION_OUT_INITIALLY_LOW 配置端口; 给 setValue()方法传递 getValue()相反的值来改变 LED 的状态; 使用 Handler 来执行触发 GPIO 的事件,在一段时间后再次触发; 当应用程序不在需要 GPIO 连接的时候,关闭 Gpio 资源;

原有官方的 Demo 上我进行相关的修改,使用一个 SeekBar 来控制 LED 等的闪烁频率;

sample-simplepio\blink\build.gradle:

sample-simplepio\blink\src\main\AndroidManifest.xml:

BlinkActivity.java:实现 SeekbarUI 控制界面,并且向 Gpio 接口引脚发送指定频率的信号;

public class BlinkActivity extends Activity {    private static final String TAG = BlinkActivity.class.getSimpleName();    //LED 闪烁时间间隔,单位毫秒    private int interval_between_blinks_ms = 1000;    //控制 LED 灯闪烁频率控件    private SeekBar mSeekbar;    //当前 LED 等闪烁频率    private TextView mSeekbarValue;    private Handler mHandler = new Handler();    //Gpio 接口对象    private Gpio mLedGpio;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        Log.i(TAG, "Starting BlinkActivity");        setContentView(R.layout.blink_activity);        mSeekbarValue = (TextView) findViewById(R.id.seekBar_value);        mSeekbar = (SeekBar) findViewById(R.id.seekBar);        mSeekbar.setProgress(interval_between_blinks_ms);        mSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {            @Override            public void onProgressChanged(SeekBar seekBar, int i, boolean b) {                mSeekbarValue.setText("LED between time:" + i + "ms");                //通过 SeekBar 控件改变 LED 等闪烁频率                interval_between_blinks_ms = i;            }            @Override            public void onStartTrackingTouch(SeekBar seekBar) { }            @Override            public void onStopTrackingTouch(SeekBar seekBar) { }        });        // 使用指定引脚名称,PeripheralManagerService 来打开一个连接到 GPIO 端口的 LED 连接         PeripheralManagerService service = new PeripheralManagerService();        try {            String pinName = BoardDefaults.getGPIOForLED();            mLedGpio = service.openGpio(pinName);            //设置引脚为输出信号            mLedGpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);            Log.i(TAG, "Start blinking LED GPIO pin");            //Post 一个 Runnable 对象,在指定的时间间隔持续的改变 GPIO 接口的状态,使得 LED 等闪烁            mHandler.post(mBlinkRunnable);        } catch (IOException e) {            Log.e(TAG, "Error on PeripheralIO API", e);        }    }    @Override    protected void onDestroy() {        super.onDestroy();        //从 Handler 中移除 blink Runnable 对象        mHandler.removeCallbacks(mBlinkRunnable);        Log.i(TAG, "Closing LED GPIO pin");        try {            //页面销毁,当应用程序不在需要 GPIO 连接的时候,关闭 Gpio 资源            mLedGpio.close();        } catch (IOException e) {            Log.e(TAG, "Error on PeripheralIO API", e);        } finally {            mLedGpio = null;        }    }    private Runnable mBlinkRunnable = new Runnable() {        @Override        public void run() {            // 如果 GPIO 引脚已经关闭,则退出 Runnable            if (mLedGpio == null) {                return;            }            try {                //使用 setValue()方法传递 getValue()相反的值来改变 LED 的状态;                mLedGpio.setValue(!mLedGpio.getValue());                Log.d(TAG, "State set to " + mLedGpio.getValue());                mHandler.postDelayed(mBlinkRunnable, interval_between_blinks_ms);            } catch (IOException e) {                Log.e(TAG, "Error on PeripheralIO API", e);            }        }    };}

blink_activity.xml

<?xml version="1.0" encoding="utf-8"?>                

8. 项目运行

选择 blink 模块,点击运行,选择树莓派(Iot_rpi3)安装程序;

注意:如果工程导入构建的过程中,提示升级 Build Tools,则按照 Android Studio 引导升级即可。Android Things 要求:

 SDK Tools 为 24 或者更高版本; Android SDK 为 7.0(API 24)或者更高版本;

9. 安装成功

应用安装成功后,显示器上显示如下;

电路板运行效果,看上图。


更多相关文章

  1. android中导入低版本project
  2. Android系统源代码情景分析
  3. Android中在一个应用中去启动另外一个应用
  4. Android日志系统第三方库------Logger
  5. Eclipse中将一个android项目当做另外一个android项目的library
  6. android 属性系统代码分析
  7. Android(安卓)自动化测试—robotium(一)环境
  8. android录音MP3格式文件
  9. 很好的一些开源项目

随机推荐

  1. Android小项目之六 apk下载
  2. 尝试查看所有XML文件的图形布局时出现Sta
  3. 最近一年做Android项目过程中,对其的一些
  4. listview中的Android listview适配器(jso
  5. android 2D 游戏的开发的方法
  6. Android 实现Activity后台运行
  7. SQLite的Android光标在方法调用时崩溃
  8. Java Android套接字连接。错误的IP地址导
  9. Android 图片添加水印图片或者文字
  10. 点击或长按的Android Listview用户交互设