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

一、接口简介
通用输入/输出(General Purpose Input/Output),简单的传感器使用这个API,如运动探测器、距离探测器,和电平开关使用一个二进制值-高或者低来报告它们的状态。 它引脚提供了可编程的接口,来读取二进制输入设备的状态(如开关按钮)或者控制二进制输出设备的开关状态(例如LED等)。
你可以配置GPIO引脚为具有高低状态的输入或者输出:
  作为输入:外部源决定这个状态,你的app可以读取当前的值或者对状态的变化做出反应。
  作为输出:你的app配置引脚的状态。
二、使用步骤
对于GPIO接口的操作,主要有如下几个步骤:
1.打开连接
创建PeripheralManagerService对象,使用你要打开的端口的名称调用openGpio()方法打开指定端口的连接。
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Attempt to access the GPIO
    try {
        PeripheralManagerService manager = new PeripheralManagerService();
        mGpio = manager.openGpio(GPIO_NAME);
    } catch (IOException e) {
         Log.w(TAG, "Unable to access GPIO", e);
    }
}
2.读取输入
使用DIRECTION_IN模式调用setDirection()方法配置端口为输入。
使用ACTIVE_HIGHT或者ACTIVE_LOW调用setActiveType()方法,配置高(接近LOREF)或者低(接近zero)电压状态作为true(活动的)返回。
使用getValue()方法返回当前状态。
public void configureInput(Gpio gpio) throws IOException {
    gpio.setDirection(Gpio.DIRECTION_IN);
    gpio.setActiveType(Gpio.ACTIVE_HIGH);
    if (gpio.getValue()) {
    } else {
    }
}
3.监听输入变化
GPIO端口被配置为输入后,当它的状态在高和低之间改变时会通知你的app。注册这些改变事件:
  在活动的端口连接添加一个GpioCallback。
  使用setEdgeTriggerType()方法声明触发中断事件的状态变化。边缘触发器支持下面的四个类型:
    EDGE_NONE:没有中断事件,这个是默认的值。
    EDGE_RISING:从低到高过渡中断。
    EDGE_FALLING:从高到底过渡中断。
    EDGE_BOTH:在所有状态转换中断。
  onGpioEdge()方法返回true意味着这个监听器会持续获取端口的每个状态改变事件。
  当你的app不在监听输入事件的时候,注销所有中断Handler。
public void configureInput(Gpio gpio) throws IOException {
    gpio.setDirection(Gpio.DIRECTION_IN);
    gpio.setActiveType(Gpio.ACTIVE_LOW);

    gpio.setEdgeTriggerType(Gpio.EDGE_BOTH);
    gpio.registerGpioCallback(mGpioCallback);
}
private GpioCallback mGpioCallback = new GpioCallback() {
    @Override
    public boolean onGpioEdge(Gpio gpio) {
        if (mDevice.getValue()) {
        } else {
        }
        return true;
    }
    @Override
    public void onGpioError(Gpio gpio, int error) {
        Log.w(TAG, gpio + ": Error event " + error);
    }
}; 
@Override
protected void onStop() {
    super.onStop();
    // Interrupt events no longer necessary
    mGpio.unregisterGpioCallback(mGpioCallback);
}
4.写入输出
使用DIRECTIOIN_OUT_INITIALLY_HIGHT或者DIRECTION_OUT_INITIALLY_LOW模式调用setDirection()方法配置它为输出。这些模式确保了端口的初始化状态在配置时间正确设置。
配置高 (接近IOREF)或者低(接近zero)电压信号作为true(活动)返回,使用ACTIVE_HIGHT或者ACTIVE_LOW调用setActiveType()方法。
使用setValue方法来设置当前状态。
public void configureOutput(Gpio gpio) throws IOException {
    gpio.setDirection(Gpio.DIRECTION_OUT_INITIALLY_HIGH);
    gpio.setActiveType(Gpio.ACTIVE_LOW);
    gpio.setValue(true);
}
5.关闭连接
当完成GPIO端口通信,使用close()方法关闭连接并释放资源。
@Override
protected void onDestroy() {
    super.onDestroy();
    if (mGpio != nul
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值