• python gpio


    打算用python控制gpio,网上找的都是一些关于树莓派如何操作gpio的文档,只针对树莓派。所以就自己封装一下函数,方便以后使用。在linux上已经生成了和gpio相关的文件,只要对文件进行读取即可。

    参考:

    https://www.kernel.org/doc/Documentation/gpio/sysfs.txt

    https://coldnew.github.io/f7349436/

    在查看这个之前需要对linux文件系统对gpio控制有基本的了解。可以阅读参考文档。

    这里封装了简单的函数。

    #!/usr/bin/env python
    
    import io 
    
    gpioValue = {'high': 1, 'low': 0}
    
    # gpio的几种触发方式
    NONE    = 'none'
    RISING  = 'rising'
    FALLING = 'falling'
    BOTH    = 'both'
    
    # 导出gpio,相当于申请,这样其他程序就不能使用这个gpio
    def gpioExport(gpioIndex):
        with open('/sys/class/gpio/export', 'wb') as f:
            f.write(str(gpioIndex).encode())
    
    # 释放gpio,释放之后其他程序才能调用这个gpio口 
    def gpioUnexport(gpioIndex):
        with open('/sys/class/gpio/unexport', 'wb') as f:
            f.write(str(gpioIndex).encode())
    		
    # 设置输入
    def setInput(gpioIndex):
        with open('/sys/class/gpio/gpio%d/direction' % gpioIndex, 'wb') as f:
            f.write('in'.encode())
    		
    # 设置输出
    def setOutput(gpioIndex):
        with open('/sys/class/gpio/gpio%d/direction' % gpioIndex, 'wb') as f:
            f.write('out'.encode())
    		
    # 读取输入值
    def getInputValue(gpioIndex):
        with open('/sys/class/gpio/gpio%d/value' % gpioIndex, 'r+') as f:
            return f.read().strip('
    ')  # delete the '
    ' 
    		
    # 设置输出的值
    def setOutputValue(gpioIndex, value):
        with open('/sys/class/gpio/gpio%d/value' % gpioIndex, 'wb') as f:
            return f.write(str(value).encode())
    		
    # 设置gpio触发方式
    def setEdge(gpioIndex, edge):
        with open('/sys/class/gpio/gpio%d/edge' % gpioIndex, 'wb') as f:
            f.write(edge.encode())
    		
    # 读取gpio的触发方式
    def getEdge(gpioIndex):
        with open('/sys/class/gpio/gpio%d/edge' % gpioIndex, 'r+') as f:
            return f.read().strip('
    ')
    		
    # 读取gpio的值
    def getGpioValue(gpioIndex):
        gpioExport(gpioIndex)
        setInput(gpioIndex)
        val = getInputValue(gpioIndex)
        gpioUnexport(gpioIndex)
        return val
    	
    # 获取一组GPIO的值,出入的参数是tuple或者list
    # 返回list
    def getGpioValues(gpioTuple):
        gpioValues = []
        for i in gpioTuple:
            gpioExport(i)
            setInput(i)
            gpioValues.append(getInputValue(i))
            gpioUnexport(i)
        return gpioValues
    # 等待gpio触发事件(还未实现)
    def waitForEdge(gpioIndex):
        pass
    

    Tony Liu

    2017-6-3, Shenzhen

  • 相关阅读:
    2017年3月10号课堂笔记
    2017年3月8号课堂笔记
    2017年3月6号课堂笔记
    2017年3月3号课堂笔记
    第7讲:设计PE型病毒2
    第6讲:设计PE型病毒1
    第5讲:HOOK 任务管理器 第2种方法注入
    第4讲:HOOK 任务管理器 无法结束进程
    第3讲:导入表的定位和读取操作
    第2讲:搜索PEB结构获取kernel32.dll的基址暴力搜索内存空间获得 Api 的线性地址
  • 原文地址:https://www.cnblogs.com/helloworldtoyou/p/6937330.html
Copyright © 2020-2023  润新知