打算用python控制gpio,网上找的都是一些关于树莓派如何操作gpio的文档,只针对树莓派。所以就自己封装一下函数,方便以后使用。在linux上已经生成了和gpio相关的文件,只要对文件进行读取即可。
参考:
在查看这个之前需要对linux文件系统对gpio控制有基本的了解。可以阅读参考文档。
这里封装了简单的函数。
#!/usr/bin/env pythonimport io gpioValue = {'high': 1, 'low': 0}# gpio的几种触发方式NONE = 'none'RISING = 'rising'FALLING = 'falling'BOTH = 'both'# 导出gpio,相当于申请,这样其他程序就不能使用这个gpiodef 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('\n') # delete the '\n' # 设置输出的值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('\n') # 读取gpio的值def getGpioValue(gpioIndex): gpioExport(gpioIndex) setInput(gpioIndex) val = getInputValue(gpioIndex) gpioUnexport(gpioIndex) return val # 获取一组GPIO的值,出入的参数是tuple或者list# 返回listdef 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