Android单片机硬件通信《GPIO通信》

一、什么是GPIO?

GPIO(英语:General-purpose input/output),通用型输入输出端口,在单片机上一般是通过一个GND引脚和若干个io引脚配合工作。
单片机可以配置GPIO输入输出模式,与外界环境进行通信交互。在输入环境下,可以读取指定端口的高低电平状态。在输出环境下,可以控制指定端口的高低电平状态。

二、Android GPIO通信

使用Runtime.getRuntime()获取本地GPIO文件并与之通信,直接上代码。


/**
 * gpio通讯工具
 */
class GpioUtil private constructor(){
    companion object{
        private var instance:GpioUtil?=null
            get() {
                if (field == null) {
                    field = GpioUtil()
                }
                return field
            }

        @Synchronized
        fun get():GpioUtil{
            return instance!!
        }
    }


    /**
     * 执行外部程序指令
     *
     * @param instruct 指令
     */
    fun chmod(instruct: String?) {
        try {
            val runtime = Runtime.getRuntime()
            val process = runtime.exec("su")
            val dataOutputStream = DataOutputStream(process.outputStream)
            dataOutputStream.writeBytes(instruct)
            dataOutputStream.flush()
            dataOutputStream.close()
        } catch (ex: Exception) {
            ex.printStackTrace()
        }
    }

    /**
     * 获取gpio编号对应的值,即是高电平或低电平
     *
     * @return高低电平(0或者1)
     * 
     * 注意:使用该方法时,initGpio()的dire参数值应为in
     */
    fun getValue(gpioNum:String): Int {
        val localFile = File(
            "/sys/class/gpio/gpio" + gpioNum
                    + "/value"
        )
        if (!localFile.exists()) println(localFile.absoluteFile.toString() + " not exist!")
        while (true) {
            try {
                val localFileReader = FileReader(localFile)
                val arrayOfChar = CharArray(1)
                val i = localFileReader.read(arrayOfChar, 0, 1)
                localFileReader.close()
                if (i == 1) {
                    val j = arrayOfChar[0].code
                    return if (j == 48) 0 else 1
                }
            } catch (localFileNotFoundException: FileNotFoundException) {
                localFileNotFoundException.printStackTrace()
                return -1
            } catch (localIOException: IOException) {
                localIOException.printStackTrace()
                return -1
            }
        }
    }

    /**
     * 发送指令,设置gpio值
     * 设置gpio值,即设置高电屏
     * @param  paramInt 写入值(0或者1)
     * @param  gpioPort gpio端口
     * 
     * 注意:使用该方法时,initGpio()的dire参数值应为out
     */
    fun setValue(gpioPort:String,paramInt: Int) {
        val exportPath1 = "echo $paramInt > /sys/class/gpio/gpio$gpioPort/value"
        chmod(exportPath1)
    }

    /**
     * 初始化gpio
     * @param gpioPort  gpio端口(单片机服务商提供)
     * @param dire      输入(只读)/输出(读写)方向
     *
     */
    fun initGpio(gpioPort:String,dire:String){
        //写入编号
        val exportPath = "echo $gpioPort > /sys/class/gpio/export"
        chmod(exportPath)
        //定义输入输出方向(out / in)
        val directionPath = ("echo $dire > " + " /sys/class/gpio/gpio" + gpioPort
                + "/direction")
        chmod(directionPath)
        //赋予引脚编号的读写权限
        val permissionGpio = "chmod 0777 /sys/class/gpio/$gpioPort/value"
        chmod(permissionGpio)
    }
}

本文完毕,下班……

相关推荐

  1. Android单片机硬件通信GPIO通信

    2024-03-24 06:56:03       35 阅读
  2. 单片机——通信协议

    2024-03-24 06:56:03       53 阅读
  3. 51单片机——串口通信编程

    2024-03-24 06:56:03       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-24 06:56:03       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-24 06:56:03       106 阅读
  3. 在Django里面运行非项目文件

    2024-03-24 06:56:03       87 阅读
  4. Python语言-面向对象

    2024-03-24 06:56:03       96 阅读

热门阅读

  1. 设计模式(行为型设计模式——模板方法模式)

    2024-03-24 06:56:03       37 阅读
  2. Unity与鼠标相关的事件(自己记忆用)

    2024-03-24 06:56:03       36 阅读
  3. 179. 最大数

    2024-03-24 06:56:03       43 阅读
  4. css如何通过媒体查询功能实现界面的自适应

    2024-03-24 06:56:03       36 阅读
  5. 合并排序算法的时间复杂度是多少?

    2024-03-24 06:56:03       48 阅读
  6. 排序算法之冒泡排序

    2024-03-24 06:56:03       43 阅读
  7. string的equals和object的equals一样吗?

    2024-03-24 06:56:03       41 阅读
  8. Unity 鼠标拖拽3D物体跟随移动的方法

    2024-03-24 06:56:03       39 阅读
  9. mosquitto - 笔记

    2024-03-24 06:56:03       37 阅读