RPI.GPIO教程
import RPi.GPIO as GPIO
通过下面的代码可以检测导入是否成功
try:
import RPi.GPIO as GPIO
except RuntimeError:
print("Error importing RPi.GPIO! This is probably because you need superuser privileges. You can achieve this by using 'sudo' to run your script")
RPi.GPIO中有两种引脚的编号方式。第一个是使用电路板编号系统。这指的是在树莓派电路板上P1开头的。使用这个编号系统的优势是,您的硬件将总是工作,不管电路板是哪个版本的。你不需要重新修改代码。
第二个编号系统是BCM数字。这是一个低水平的工作方式,它指的是电路板引脚的位置号。电路板版本变化时脚本程序需要对应修改。
指定编号方式:
GPIO.setmode(GPIO.BOARD)
# or
GPIO.setmode(GPIO.BCM)
查询使用的哪种编号方法:
mode = GPIO.getmode()
#输出: GPIO.BOARD, GPIO.BCM or None
设为输入:
GPIO.setup(channel, GPIO.IN)
#chanel与使用的编号方式对应
设为输出:
GPIO.setup(channel, GPIO.OUT)
GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)
设置多个通道
chan_list = [11,12] # add as many channels as you want!
GPIO.setup(chan_list, GPIO.OUT)
读取一个GPIO口的值
GPIO.input(channel)
#返回:0 / GPIO.LOW / False or 1 / GPIO.HIGH / True.
设置一个GPIO口的输出值
GPIO.output(channel, state)
#State 可以是 0 / GPIO.LOW / False or 1 / GPIO.HIGH / True.
设置多个通道的输出
chan_list = [11,12] # also works with tuples
GPIO.output(chan_list, GPIO.LOW) # sets all to GPIO.LOW
GPIO.output(chan_list, (GPIO.HIGH, GPIO.LOW))
# sets first HIGH and second LOW
清空
GPIO.cleanup()
如果想清理特定的通道
GPIO.cleanup(channel)
GPIO.cleanup( (channel1, channel2) )
GPIO.cleanup( [channel1, channel2] )
上拉或者下拉电阻
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# or
GPIO.setup(channel, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)
中断与边沿检测
为了避免您的程序在忙于处理其它的事物时而错过了您按下按钮的操作,这里有两种方法可以解决:
wait_for_edge() 函数
event_detected() 函数
在检测到边缘时执行线程回调函数
创建PWM 实例
p = GPIO.PWM(channel, frequency)
启动PWM
p.start(dc) # where dc is the duty cycle (0.0 <= dc <= 100.0)
改变频率
p.ChangeFrequency(freq) # where freq is the new frequency in Hz
改变占空比
p.ChangeDutyCycle(dc) # where 0.0 <= dc <= 100.0
停止PWM
p.stop()