Android Things入门-控制GPIO

原创 2017年08月13日 12:04:17

(1) Android Things入门-环境搭建

上一篇简单的叙述一下Android Things系统的安装和环境配置,在文章最后我们导入了一个模板样例,使用Android Studio进行了编译和下载。环境也搭建好了,应用也都可以正常下载了,那接着就该对树莓派已有的接口和Android Things的功能进一步学习了。

我还是在 new-project-template 这个空白模板里学习GPIO控制的,而没有直接去看官方的GPIO例程,是希望自己可以写几行代码,出错了之后也能明白哪里的问题。

先介绍一下硬件电路连接,开关的一端连接输入引脚GPIO7,另一端连接GND;LED发光二极管正极接GPIO0,负极接GND。(关于树莓派3引脚图可自行搜索)

连接图

我们要实现当开关按下之后LED亮,松开开关后LED灭,是嵌入式入门最基础的GPIO操作。

接着看程序,MainActivity继承Activity之后重写了父类的onCreate和onDestroy方法,如果打开调试窗口里的Android Monitor可以看到下载之后启动会打印onCreate方法里的输出提示,我们就在onCreate方法里面处理GPIO读写功能。

在MainActivity中加入两个私有成员变量

private Gpio inputPin; // 输入引脚
private Gpio outputPin; // 输出引脚

把鼠标停留在当前行,按Alt+Enter可导入包含Gpio的包。

在onCreate方法里对这两个引脚进行设置

PeripheralManagerService service = new PeripheralManagerService();
try {
    inputPin = service.openGpio("BCM4");
    inputPin.setDirection(Gpio.DIRECTION_IN);
    inputPin.setActiveType(Gpio.ACTIVE_HIGH);

    outputPin = service.openGpio("BCM17");
    outputPin.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);
}
catch(IOException e) {}

我们需要实例化GPIO处理类PeripheralManagerService,初始化输入引脚打开“BCM4”引脚对应GPIO7(树莓派有几种不同的引脚命名方式),设置引脚为输入,设置引脚悬空时为高电平。初始化输出引脚打开“BCM17”引脚对应GPIO0,设置输出默认为低电平。

检测GPIO可以有轮询中断两种方式。
我们首先介绍轮询方式,就是不断的读输入IO的电平值。因此我们在onCreate方法里新建一个线程启动之后不断的读输入IO的值,对应的改变输出IO的值来控制LED发光。

(new Thread(new Runnable() {
    @Override
    public void run() { 
        try {
            while (true) {  // 线程中死循环的读inputPin对应IO的值
                boolean status = inputPin.getValue();
                if (status) {
                    outputPin.setValue(true);  // 如果status为true,我们就设置outputPin为true,则LED亮
                }
                else {
                    outputPin.setValue(false);
                }
                Thread.sleep(5000);
             }
       }
       catch(Exception e) 
       { 
            e.printStackTrace();
       }
   }
})).start();

中断方式在Android Things中用监听器来封装,我们对输入引脚设置监听,如果被触发则调用事件回调方法处理我们的逻辑。我们还是在onCreate这个方法里去实现,把上面介绍的建立线程部分注释掉防止冲突,留下输入输出的配置。我们以上升沿和下降沿都触发的事件为例,其他事件分别为
* EDGE_NONE
* EDGE_RISING
* EDGE_FALLING
* EDGE_BOTH

PeripheralManagerService service = new PeripheralManagerService();
try {
    inputPin = service.openGpio("BCM4");
    inputPin.setDirection(Gpio.DIRECTION_IN);
    inputPin.setActiveType(Gpio.ACTIVE_HIGH);
    gpioPin.setEdgeTriggerType(Gpio.EDGE_BOTH);  // 设置触发事件类型

    outputPin = service.openGpio("BCM17");
    outputPin.setDirection(Gpio.DIRECTION_OUT_INITIALLY_LOW);

    SensorCallBack callback = new SensorCallBack();
    gpioPin.registerGpioCallback(callback);  // 注册我们的回调
}
catch(IOException e) {}

我们在上面设置了事件之后,必须创建一个回调类来处理这个事件的触发,这个回调类必须继承GpioCallback,在MainActivity中最后面加入以下代码

private class SensorCallBack extends GpioCallback {
    @Override
    public boolean onGpioEdge(Gpio gpio) { 
        try {
            boolean callBackState = gpio.getValue();
            if(callBackState) {
                outputPin.setValue(false);
            }
            else {
                outputPin.setValue(true);
            }
        }
        catch(IOException ioe) { 
            ioe.printStackTrace();
        } 
        return true;
    } 
    @Override
    public void onGpioError(Gpio gpio, int error) {
        super.onGpioError(gpio, error);
    }
}

在回调类里有两个父类的方法需要我们重写来实现要处理的行为,一个是IO中断触发,另一个IO异常错误
* public boolean onGpioEdge
* public boolean onGpioError

最后编译下载,按照电路图的接线方法,当按键按下之后灯亮,松开之后灯灭。试试看吧。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android Things专题5 I2C

文| 谷歌开发技术专家 王玉成(York Wang)上一讲中,我们说到 Android Things 的 API,以及 Peripheral I/O 设备包含的 API 的类型。但是作为程序员的我们,...
  • wfing
  • wfing
  • 2017-03-15 20:23
  • 3186

Android Things:外设I/O接口-I2C

一、接口简介内部集成电路(IIC或者I2C)总线使用小数据负载连接简单的外部设备。传感器和执行器是常见的I2C使用案例,例如包含加速度计,温度计,LCD显示器,和电机驱动。 I2C总线是一种同步的串行...

Android Things 入门篇

1. Android Things 概述        Android Things开发类似于传统的Android移动端设备的开发,涉及使用Android框架和工具编写应用程序。所有需要的是一个Fla...

Android Things:你应该了解的Android Things知识

Google在近期推出了物联网操作系统Android Things,它可以运行在有线扬声器、智能温控器、安全摄像头、路由器等设备上,Google的理念是通过Android Things让Android...

android双屏显示的一些修改与尝试

转载时请注明出处和作者 文章出处:http://www.cnblogs.com/xl19862005 作者:Xandy 用的是android2.3的代码 这些天来一直在看and...
  • MJL007
  • MJL007
  • 2015-07-13 23:16
  • 1498

Android Things物联网开发:开机动画定制

一、console镜像 二、apk烧写 三、开机动画

路漫漫其修远兮

从嵌入式转行到了Android开发已经一年有余了,不幸的是公司散伙了,也就离开了Android开发的岗位。学习工作了那么多年,感觉自己最有核心价值的还在于Linux了,之前一直想写的Linux子系统的...

Android Things做一个简易相机

Android Things做一个简易相机Android Things已经发布有一段时间了,最近买了块树莓派3的板子,研究一下Android Things开发。

Android Things之---Android Things专题讲解

Android Things之—Android Things系统介绍、目前支持的硬件介绍

ZOJ 3549 littel keng

求:1n + 2n + 3n + ... + mn    后面有多少零。 思路:1,java大数暴力来;           2,log ong
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)