序言:
树莓派作为时下流行的DIY平台,python作为流行的编程语言,玩树莓派是一种态度,写python代码是一种生活情趣。
周五是个好日子,因为周末来了。
忙碌了一周,周五休息一下,玩玩树莓派,学习python,让大脑放个假。
闲话少叙,用双色LED点亮我们的python之旅吧。
一、原理
LED为共阴极的红绿双色LED,一共三个引脚,分别是地(GND,接口标号为-)、红色灯控制脚(R,接口标号无,为中间引脚)、绿色LED控制脚(G,引脚标号为S)树莓派GPIO输出高电平点亮LED,GPIO输出低电平熄灭LED。双色LED外观如下图所示。
二、连线
三、编程
旨在实现点亮(闪烁)、呼吸灯(PWM亮度控制)。
1.用Putty远程到树莓派登录后,输入命令新建一个py。
nano colorledcontrol.py
2.编辑代码如下。代码比较简单,不写注释了。
编辑过程不表,注意使用tab来缩进代码,而不是用空格键(space key)。另外,要经常使用快捷键CTRL+O保存代码。
注意不要按CTRL+Z来撤销输入,没有这个功能,后果很严重...没有保存的修改会丢的。
#encoding = utf-8
import RPi.GPIO as GPIO
import time
# LED IO: GPIO5>R, GPIO20>G
LED_RED = 5
LED_GREEN = 20
def ledinit():
GPIO.setmode(GPIO.BCM)
GPIO.setwarnings(False)
GPIO.setup(LED_RED,GPIO.OUT)
GPIO.setup(LED_GREEN,GPIO.OUT)
GPIO.output(LED_RED,GPIO.LOW)
GPIO.output(LED_GREEN,GPIO.LOW)
#默认关闭LED
#LED闪烁函数:实现红绿LED交替点亮,闪烁次数可定义
def ledblink(times):
for i in range(0,times):
GPIO.output(LED_RED,GPIO.HIGH)
GPIO.output(LED_GREEN,GPIO.LOW)
time.sleep(1)
GPIO.output(LED_GREEN,GPIO.HIGH)
GPIO.output(LED_RED,GPIO.LOW)
time.sleep(1)
GPIO.output(LED_GREEN,GPIO.LOW)
GPIO.output(LED_RED,GPIO.LOW)
#红色LED呼吸灯函数
def lednotify(times):
duty_cycle =[0,10,30,50,70,90,100]
duration = 100 # unit: ms. duration for each duty cycle
notifyled = GPIO.PWM(LED_RED,2000)
notifyled.start(0)
for i in range(0,times):
#darkness>lightness
for j in range(0,len(duty_cycle)):
notifyled.ChangeDutyCycle(duty_cycle[j])
time.sleep(0.001*duration)
#lightness>darkness
for j in range(0,len(duty_cycle)):
notifyled.ChangeDutyCycle(duty_cycle[len(duty_cycle)-j-1])
time.sleep(0.001*duration)
notifyled.stop() #停止呼吸灯
#如果是直接运行本py程序,执行以下代码。如果是被别的py程序调用,则以下代码不执行。
if(__name__=="__main__"):
ledinit()
while True:
n = int(input("输入LED闪烁的次数:"))
lednotify(n)
#ledblink(n)
key = input("输入q退出程序,其它按键继续!:")
if(key =='q' or key == 'Q'):
GPIO.cleanup()
break
四、调试
由于是使用PuTTY远程到树莓派使用nano编程。为了避免频繁修改代码需要打开/关闭nano编辑器,开了两个Putty客户端,一个用于编辑代码,一个用于命令行运行代码。
nano编写的py程序默认没有执行权限。使用命令chmod 744 *.py修改即可。
chmod 744 colorledcontrol.py
运行程序:
python3.5 colorledcontrol.py
双开PuTTY界面如下。程序运行良好,可以控制LED。
参考资料:
1.fhqlongteng.树莓派 RPI.GPIO 使用手册.
2.IT小陈.Arduino学习(四) 双色LED实验.