第一个Android things应用

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zfan93/article/details/80657153

转载请注明出处。

上一篇博客完成了android things的搭建,按照国际惯例,该来个hello word应用了,还好这一切都在android studio中进行,对于安卓软件开发人员来讲,应该是很熟悉的。
打开Android studio,选择新建一个项目,填名字、包名。
下一步,只选择android things,API版本最好和你的树莓派刷入的版本一致,这些信息都可以外接屏幕和鼠标查看。
这里写图片描述
下一步,选择Peripheral Activity,因为很多android things 的智能设备是不需要界面的,选择Empty Activity的话还是会自动生成界面,并setcontview的。
这里写图片描述
之后的页面用默认值就可以了:
这里写图片描述
生成的新的项目相比较普通的安卓项目简单很多,少了很多文件和文件夹。先不管这些,先开始hellword的编写。
第一个android things的应用要实现一个闪烁的led灯,官方的例子也是这样的。不过还是推荐大家直接自己创建项目并手敲以下代码,因为第一个项目都很简单。
,首先是MainActivity,定义几个量:

Handler handler=new Handler();//用于循环操作
Gpio gpio;//通用输入输出端口
boolean ledState=false;//用于标记led的亮起状态

这里只有一个新的东西:Gpio,通用输入输出。可能这个对安卓软件开发者比较陌生,可以直接理解成一个led灯对象;
然后是MainActivity的onCreate方法:

@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            gpio= PeripheralManager.getInstance().openGpio("BCM21");//获取通用输入输出,板子的BCM6这个位置连接led
            gpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);//设置gpio为输出的设备,并且指定初始值为低,此处即为false;
            handler.post(runnable);//开始循环
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

这里相当于是通过“BCM21”这个接口,打开为一个设备,设置这个设备的方向是out,即为输出设备,同时指定了这个输出设备的初始值为low,Gpio通用输入输出是二进制的,相当于只有0/1两种值,对于led灯来说,只有亮和不亮两种状态。然后是runnable:

Runnable runnable=new Runnable() {
        @Override
        public void run() {
            if (gpio==null)return;
            try {
                ledState=!ledState;//改变led状态
                gpio.setValue(ledState);//控制led状态
                handler.postDelayed(this,1000);//1秒后再执行本初操作
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    };

因为设备已经定义为输出设备,是不能读取led灯的状态的,所以我们为了达到闪烁的目的,通过本地一个boolean值标识led灯的状态,每次循环只要让等的状态改变就可以了。亮灯与否就很简单的,led灯对象gpio直接设置值为true或者fale即可。
最后,在onDestory中释放掉资源:


    @Override
    protected void onDestroy() {
        super.onDestroy();
        handler.removeCallbacks(runnable);//停止循环
        try {
            gpio.close();//关闭通用输入输出
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

整个MainActivity代码如下:

package wang.buxiang.myandroidthings;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;

import com.google.android.things.pio.Gpio;
import com.google.android.things.pio.PeripheralManager;

import java.io.IOException;

public class MainActivity extends Activity {
    Handler handler=new Handler();//用于循环操作
    Gpio gpio;//通用输入输出端口
    boolean ledState=false;//用于标记led的亮起状态

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        try {
            gpio= PeripheralManager.getInstance().openGpio("BCM21");//获取通用输入输出,板子的BCM6这个位置连接led
            gpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);//设置gpio为输出的设备,并且指定初始值为低,此处即为false;
            handler.post(runnable);//开始循环
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        handler.removeCallbacks(runnable);//停止循环
        try {
            gpio.close();//关闭通用输入输出
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    Runnable runnable=new Runnable() {
        @Override
        public void run() {
            if (gpio==null)return;
            try {
                ledState=!ledState;//改变led状态
                gpio.setValue(ledState);//控制led状态
                handler.postDelayed(this,1000);//1秒后再执行本初操作
            } catch (IOException e) {
                e.printStackTrace();
            }

        }
    };

}

最后不要忘记添加相关的权限:

    <uses-permission android:name="com.google.android.things.permission.USE_PERIPHERAL_IO"/>

代码准备就绪,现在需要将led灯连接到对应“BCM21”针脚了。
另外,在连接led灯的时候,都需要串联一个电阻,这是因为考虑到寿命和正常工作,led灯最好在一个固定的电流范围内运转,电阻的作用就是为led创造舒适的电流环境。
连接电路如下图所示:
这里写图片描述
主要关注右边的led灯,对于左边的设备可以忽略。
上面的电路图上插led灯和电阻的东西叫面包板,面包板可以让我们通过线的拔插来机动性的改变电路连接,入门开发必备;面包本的工作原理也很简单,首先是最上面两行,每一行都是接通的,经常用于接电源,只要在这两行的末端接通电源,那么后面的设备的电源都可以通过插入这两行来获取电源。再往下5行,每一列是联通的,每一列上也经常有列的序号。再往下5行的区域类似,再往下又是两行电源了。
然后是树莓派3B的接口示意图:
这里写图片描述
这张图和针脚详细信息可以在这个网址获取,一定要收藏,因为之后会经常用到:
https://developer.android.google.cn/things/hardware/raspberrypi-io
我们看到接线是从GPIO区域出来,这里就是我们定义的“BCM21”的位置,在树莓派3B的最右下角,之后出来接电阻,然后是led灯的长脚,这里注意了,可能安卓软件开发者会忽略这样的问题,led灯长脚是正极,短脚是负极。短脚出来直接接地了,也就是负极。整体效果如下:
这里写图片描述
ok,运行一下,可以看到led灯已经按照我们的代码,开始每隔一秒亮一下了。
好了,到这,andoid things的hello world项目完成了,你已经建立了正确的开发环境,以后的项目只需要编写代码并连接对应硬件设备到板子上就可以了。欢迎来到android things的世界。

猜你喜欢

转载自blog.csdn.net/zfan93/article/details/80657153