(18)管脚口操作

第一个小实验是让蓝绿两色LED小灯交替闪烁,在查阅电路图后我们发现,两个LED小灯由GPIO20,21控制,这里简单讲一下Python控制树莓派GPIO的方式,首先要引入RPi.GPIO库文件,然后要设置树莓派GPIO的工作模式,参数为BCM和BOARD,BCM代表着引脚的按GPIO编号声明,BOARD代表引脚按板载编号声明。如图2.1。事实上,不同版本的GPIO个数是不一样的,导致不同版本板载编号不同,所以建议同学们以BCM作为工作模式的声明方式。第二步是用.setup()函数声明指定引脚的输入输出。例如,控制LED需要对LED进行“写”操作,所以参数应该是GPIO.OUT。对应的,对于一些传感器,例如触摸传感器,温湿度传感器,我们要对传感器的检测结果进行读,那时参数就应该是GPIO.IN。接下来改变输出引脚的电平即可对LED进行亮灭控制。最后不要忘记通过GPIO.cleanup()释放工作状态,以免影响下次正常使用。/home/pi/yahboom/GPIO/led.py详细代码如下:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-



import RPi.GPIO as GPIO

import time
#设置工作模式为bcm
GPIO.setmode(GPIO.BCM)
#找到将使用的引脚
GPIO.setup(20, GPIO.OUT)
GPIO.setup(21, GPIO.OUT)
#运行十次
for i in range(0,10):
    GPIO.output(20,True)
    time.sleep(0.5)
    GPIO.output(20,False)
    GPIO.output(21,True)
    time.sleep(0.5)
    GPIO.output(21,False)
GPIO.cleanup()

  

测试LED

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import time
import RPi.GPIO as GPIO

GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BCM)

pinA1=6
pinA2=13
pinB1=19
pinB2=26

GPIO.setup(pinA1, GPIO.OUT) #设置脚为输出模式
GPIO.setup(pinA2, GPIO.OUT) #设置脚为输出模式

 
a = 10  #闪烁10次

while a > 0:
    
    a -= 1
    
    print ("HIGH")
    GPIO.output(pinA1, GPIO.HIGH)  #亮
    GPIO.output(pinA2, GPIO.HIGH)  #亮
    time.sleep( 0.2 )   #延时 秒
 
    print ("LOW")
    GPIO.output(pinA1, GPIO.LOW)   #暗
    GPIO.output(pinA2, GPIO.LOW)   #暗
    time.sleep( 0.2 )  #延时 秒
 

  

控制电机运动

实物图

引脚接口

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import time
import RPi.GPIO as GPIO

GPIO.setwarnings(False) 
GPIO.setmode(GPIO.BCM)

# 树梅派插着USB和网线口那一侧为下面   从下往上数  左列 1-GND   2-5引脚  对应  26 19 13  5
pinA1=6     # 左电机1
pinA2=13  # 左电机 2
pinB1=19  # 右电机 1
pinB2=26  # 右电机 2

GPIO.setup(pinA1, GPIO.OUT) #设置脚为输出模式
GPIO.setup(pinA2, GPIO.OUT) #设置脚为输出模式
GPIO.setup(pinB1, GPIO.OUT) #设置脚为输出模式
GPIO.setup(pinB2, GPIO.OUT) #设置脚为输出模式

go_time_intever=0.2  # 运动步长(秒) 通过改时间来改每一步的运动距离 
def go_ahead():
    print ("go_ahead")
    GPIO.output(pinA1, GPIO.HIGH)  #  A往前转
    GPIO.output(pinA2, GPIO.LOW)  #灭
    GPIO.output(pinB1, GPIO.HIGH)  # B往前转
    GPIO.output(pinB2, GPIO.LOW)  #灭
    time.sleep( go_time_intever )   #延时 秒
    
def stop():
    print ("stop")
    GPIO.output(pinA1, GPIO.LOW)  #  A停止
    GPIO.output(pinA2, GPIO.LOW)  #灭
    GPIO.output(pinB1, GPIO.LOW)  # B停止
    GPIO.output(pinB2, GPIO.LOW)  #灭
    time.sleep( go_time_intever )   #延时 秒    
     
def tuen_left():
    print ("tuen_left")
    GPIO.output(pinA1, GPIO.LOW)  # A往后转
    GPIO.output(pinA2, GPIO.HIGH)  #灭
    GPIO.output(pinB1, GPIO.HIGH)  #B往前转
    GPIO.output(pinB2, GPIO.LOW)  #灭
    time.sleep( go_time_intever )   #延时 秒

     
def turn_right():
    print ("turn_right")
    GPIO.output(pinA1, GPIO.HIGH)  #A往前转
    GPIO.output(pinA2, GPIO.LOW)  #灭
    GPIO.output(pinB1, GPIO.LOW)  #B往后转
    GPIO.output(pinB2, GPIO.HIGH)  #灭
    time.sleep( go_time_intever )   #延时 秒
     
     
a = 10  #闪烁10次

while a > 0:
    
    a -= 1
    go_ahead()
    tuen_left()
    turn_right()
    stop()

  

第二个实验同样是控制小灯,但是这次我们将使用PWM的工作方式控制RGB小灯,下面的程序提供了以脉冲调制解调控制小灯的方法,程序实现了一个呼吸灯使得小灯的颜色进行红绿蓝之间的渐变。程序位于/home/pi/yahboom/GPIO/BST-AI.py程序完整代码如下:

#!/usr/bin/env python2
# -*- coding: utf-8 -*-

import RPi.GPIO as GPIO
import time
#led由三个引脚控制,蜂鸣器由16引脚控制
R,G,B=9,10,11
buzzer=16
GPIO.setmode(GPIO.BCM)

GPIO.setup(R, GPIO.OUT)
GPIO.setup(G, GPIO.OUT)
GPIO.setup(B, GPIO.OUT)
GPIO.setup(buzzer, GPIO.OUT)
#先让蜂鸣器停下来

GPIO.output(buzzer, False)
time.sleep(2)
GPIO.output(buzzer,True)
#设置pwm的工作模式为pwm
pwmR = GPIO.PWM(R, 70)
pwmG = GPIO.PWM(G, 70)
pwmB = GPIO.PWM(B, 70)

pwmR.start(0)
pwmG.start(0)  
pwmB.start(0)
#写四种模式,实际可以由更多变化方式
try:
	t = 0.01
	while True:
            for i in range(0,71):
                pwmG.ChangeDutyCycle(70)
                pwmB.ChangeDutyCycle(i)
                pwmR.ChangeDutyCycle(70-i)
                print(i)
                time.sleep(t)
            for i in range(70,-1,-1):
                pwmG.ChangeDutyCycle(0)
                pwmB.ChangeDutyCycle(i)
                pwmR.ChangeDutyCycle(70-i)
                print(i-1000)
                time.sleep(t)

        
except KeyboardInterrupt:
	pass
pwmR.stop()
pwmG.stop()
pwmB.stop()
GPIO.cleanup()
		

 

 
 
原文地址:https://www.cnblogs.com/kekeoutlook/p/11123138.html