打算用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('\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
# 返回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