Android Things:来跑一个Demo耍耍

一、Demo运行实践


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

chengxiang.peng@QW-pengchengxia MINGW64 ~/AndroidThingsSources $ git clone https://github.com/androidthings/sample-simplepio.git
Cloning into 'sample-simplepio'...
remote: Counting objects: 781, done.
remote: Total 781 (delta 0), reused 0 (delta 0), pack-reused 781
Receiving objects: 100% (781/781), 1.85 MiB | 18.00 KiB/s, done.
Resolving deltas: 100% (265/265), done.
Checking connectivity... done.

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

Android Things:来跑一个Demo耍耍_第1张图片
导入工程

3. 工程目录
sample-simplepio项目运行基本的代码练习PIO API, 项目包含3个模块,每个例子是一个可以独立运行的Android模块。这里我们仅仅使用blink模块跟大家演示和介绍:
Android Things:来跑一个Demo耍耍_第2张图片
工程目录

4. 硬件准备
在搭建电路之前,我们列举一下需要的硬件设备:
- 树莓派3开发板 1块
- LED灯 1个
- 电阻 1个
- 面包板 1块
5. 电路搭建
根据下面的电路设计图,使用相关的元器件搭建电路如下(注意正极连接BCM6引脚,负极连接Ground引脚 ):
Android Things:来跑一个Demo耍耍_第3张图片
电路图

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

C:\Users\chengxiang.peng.QUNARSERVERS>adb connect 192.168.1.106:5555
connected to 192.168.1.106:5555
C:\Users\chengxiang.peng.QUNARSERVERS>adb devices
List of devices attached
192.168.1.106:5555      device

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:

apply plugin: 'com.android.application'                                                       
android {                                                                                     
    ... ...                      
}                                                                                             
dependencies {
    //添加依赖                                                                                
    provided 'com.google.android.things:androidthings:0.1-devpreview'                         
}                         

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


    
        //添加共享库
        
        //添加启动Activity
        
            
                
                
            
            //在系统启动的时候自动启动app
            
                
                
                
            
        
    

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



    
    
    
    

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

Android Things:来跑一个Demo耍耍_第4张图片
运行项目

注意:如果工程导入构建的过程中,提示升级Build Tools,则按照Android Studio引导升级即可。Android Things要求:
SDK Tools为24或者更高版本;
Android SDK为7.0(API 24)或者更高版本;

9. 安装成功
应用安装成功后,显示器上显示如下:

Android Things:来跑一个Demo耍耍_第5张图片
UI显示

电路板运行效果,如下:
Android Things:来跑一个Demo耍耍_第6张图片
image.png

提示1:在安装其它的项目模块的时候,报错如下:
Caused by: java.lang.ClassNotFoundException: Didn't find class "com.example.androidthings.simplepio.PWMActivity" on path: DexPathList[[zip file "/system/framework/com.google.android.things.jar", zip file
处理1:Android Things系统只允许安装一个应用,在安装其它应用之前,应该确保当前系统的应用被卸载
C:\Users\chengxiang.peng.QUNARSERVERS>adb uninstall com.example.androidthings.simplepio
Success


1.抛弃各种找元器件的烦恼,来“1024工场”旗舰店,一次性买到你所想要的:树莓派套装—专为Android Things打造。

Android Things:来跑一个Demo耍耍_第7张图片
树莓派套装

电脑用户,点击如下链接进入淘宝宝贝页面:
https://item.taobao.com/item.htm?spm=686.1000925.0.0.3f11c9ed68fPu7&id=549263158263
手机用户,打开淘宝客户端扫描二维码:
Android Things:来跑一个Demo耍耍_第8张图片
宝贝二维码

2.完整和持续更新的《使用Android打开物联网开发大门——Andoid Thigns开发》文档,欢迎大家阅读!
https://www.kancloud.cn/workshop1024/android_things_develop/360773
Android Things:来跑一个Demo耍耍_第9张图片
这里写图片描述

3.新技术,新未来!欢迎大家关注“1024工场”微信服务号,时刻关注我们的最新的技术讯息。(甭客气!尽情的扫描或者长按!)
Android Things:来跑一个Demo耍耍_第10张图片
服务号

4.加入“Android Things开发”QQ讨论群,一起学习一起Hi。(甭客气!尽情的扫描或者长按!)
Android Things:来跑一个Demo耍耍_第11张图片
qq群

你可能感兴趣的:(Android Things:来跑一个Demo耍耍)