zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    微信小程序wx.chooseImage和wx.previewImage的综合使用(图片上传不限制最多张数)
    js数组与字符串之间的相互转换
    微信小程序wx.previewImage实用案例(交流QQ群:604788754)
    PHP:第一章——PHP中的魔术常量
    小程序模板嵌套以及相关遍历数据绑定
    6 大主流 Web 框架优缺点对比:15篇前端热文回看
    通俗地讲,Netty 能做什么?
    Netty
    为什么选择Netty
    linux下gsoap的初次使用 -- c风格加法实例
  • 原文地址:https://www.cnblogs.com/helloworldtoyou/p/6937330.html
Copyright © 2011-2022 走看看