Python自动化编程-树莓派GPIO编程(二)

时间:2020-11-29 23:47:23

树莓派我们编程一般都直接用高效的python,针对于GPIO编程,python也是有这一方面的库的,这里最有名也是最常用的就是RPI.GPIO了。这个库是专门为树莓派GPIO编程所设计的,利用它你可以愉快的像Arduino那样轻松控制GPIO管脚。

安装:

    sudo apt-get -y python-pip #安装pip

    sudo pip install rpi.gpio #安装RPI.GPIO

安装完成后在实际运用的时候,我们也会像arduino那样去设置输入输出,设置高低电平,获取针脚值等等,那下面我就把整理的内容函数都贴出来。

在这说一下管脚,拿到树莓派之后你会发现板子上有两排管脚,这对应这什么呢?请看下图:

Python自动化编程-树莓派GPIO编程(二)

(管脚对应)

当然如果说你的版本不同可能会略有差别,你同样可以使用gpio readall命令来打印出所有管脚:

Python自动化编程-树莓派GPIO编程(二)

(打印管脚)

好,做完上面的拓扑,我们来讲一下关于GPIO编程的一些常用函数。

    1.导入库:

    import RPi.GPIO as GPIO

    2.设置引脚模式:

    GPIO.setmode(GPIO.BMC/BOARD) #BMC或者BOARD模式

    3.设置引脚为输入:

    GPIO.setup(pin,GPIO.IN)

    4.设置引脚为输出:

    GPIO.setup(pin,GPIO.OUT)

    5.设置初始化高电平:

    GPIO.setup(pin,GPIO.OUT,initial=GPIO.HIGH)

    6.设置初始化为低电平:

    GPIO.setup(pin,GPIO.OUT,initial=GPIO.LOW)

当然python的好处是可以创建一个列表,然后将列表带入函数中,使其一次性执行多个针脚的输入输出,如:

    PinList=[pin1,pin2,pin3]

    GPIO.setup(PinList,GPIO.IN)

通过创建一个列表将列表中加入引脚的定义,实现多引脚同时设定为输入。

读取输入值:

GPIO.input(pinx) #input()方法可以读取pinx引脚的值

当然前提是你的引脚接了一些传感器,比如温度传感器,光线传感器等等。

上下拉:

先说什么是上下拉

上拉和下拉是指GPIO输出高电位(上拉)还是低电位(下拉)。上拉就是输入高电平,然后接一个上拉电阻(起保护作用),知道上拉就表示该端口在默认情况下输入为高电平。下拉就是输入低电平,然后接一个下拉电阻。

我们在做管脚的上下拉时,在电路设计上一般都是加上下拉电阻,但在树莓派身上如何不改变电路通过python去控制呢?

在python的GPIO初始化上可以用GPIO.setup(pinx,GPIO.IN,pull_up_down=GPIO.PUD_UP/GPIO.DOWN)来控制上下拉。

设置中断:

设置终端通常有两种方法,一种是wait_for_edge(),另一种为add_event_detect(),我们下面来介绍一下这两个中断。

1.wait_for_edge():用于检测到边沿之前阻止程序运行

举个例子:

    channel = GPIO.wait_for_edge(channel, GPIO_RISING, timeout=5000)

    if channel is None:

    print('Timeout occurred')

    else:

    print('Edge detected on channel', channel)

延时5秒,如果超时,程序继续执行,如果没有超时将继续等待。

2.add_event_detect():对一个引脚进行监听,一旦引脚输入发生了改变,调用event_detected()函数会返回True

举个例子:

    GPIO.add_event_detect(channel, GPIO.RISING)

    do_something()

    if GPIO.event_detected(channel):

    print('Button pressed')

add_event_detect()多用于循环状态,并且它不会错过循环中输入状态的改变,多用在PyQt上。

PWM脉冲调节:

PWM这个多用在控制电机上,特别是对我们做树莓派小车对小车的控制上有很大的帮助。

我们用一个实例去说明:

    Pwm=GPIO.PWM(pin,frequence) #创建PWM实例

    Pwm.start(dc) #启动PWM dc值(0.0<dc<100.0)

    Pwm.ChangeFrequency(freq) #改变PWM频率

    Pwm.ChangeDutyCycle(dc) # 改变PWM的占空比0.0<=dc <=100.

    Pwm.stop() #停止PWM

后面我们在说几个常用的函数,比如输出、等待,并写一个控制小灯闪烁的Demo

GPIO口输出值:

GPIO.output(pinx,1/0)

1对应GPIO.HIGH(高电平)0对应GPIO.LOW(低电平)

延时函数:

time.sleep(秒数)

此函数为time库里面的,你要想使用必须在之前import time

今天暂且介绍这么多,我们下面写一个控制LED小灯闪烁的实例:

    import RPi.GPIO as GPIO //引入函数库

    import time

    RPi.GPIO.setmode(GPIO.BOARD) //设置引脚编号规则

    RPi.GPIO.setup(11, RPi.GPIO.OUT) //将11号引脚设置成输出模式

    while True

    GPIO.output(channel, 1) //将引脚的状态设置为高电平,此时LED亮了

    time.sleep(1) //程序休眠1秒钟,让LED亮1秒

    GPIO.output(channel, 0) //将引脚状态设置为低电平,此时LED灭了

    time.sleep(1) //程序休眠1秒钟,让LED灭1秒