
第一个小实验是让蓝绿两色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()
浙公网安备 33010602011771号