GeorgeYang'Blog

my technology blog

树莓派入门之控制LED灯闪烁、呼吸灯效果、RGB灯随机换色

阅读:1404 创建时间:17-04-03 09:33:22 tags:android

LED灯闪烁

使用BOARD编码,短脚接GND接口,长脚接到第37个物理接口

 import RPi.GPIO as GPIO
 import time
 #基于板子上面引脚编号1-40
 GPIO.setmode(GPIO.BOARD)
 #GPIO引脚输出模式
 GPIO.setup(37, GPIO.OUT)
 while  True:
      GPIO.output(37, GPIO.LOW) #低电平,另一端是3.3V高电平,所以点亮LED
      time.sleep(1) 
      GPIO.output(37, GPIO.HIGH) #两端都是高电平,二极管熄灭
      time.sleep(1)

LED呼吸灯

使用BCM编码,将短脚接到GND,长脚接到GPIO18

 #!/usr/bin/env python
 # encoding: utf-8

 import RPi.GPIO
 import time

 RPi.GPIO.setmode(RPi.GPIO.BCM)
 RPi.GPIO.setup(18, RPi.GPIO.OUT)

 # 创建一个 PWM 实例,需要两个参数,第一个是GPIO端口号,这里我们用14号
 # 第二个是频率(Hz),频率越高LED看上去越不会闪烁,相应对CPU要求就越高,设置合适的值就可以
 pwm = RPi.GPIO.PWM(18, 80)

 # 启用 PWM,参数是占空比,范围:0.0 <= 占空比 >= 100.0
 pwm.start(0)

 try:
     while True:
         # 电流从小到大,LED由暗到亮
         for i in xrange(0, 101, 1):
             # 更改占空比,
             pwm.ChangeDutyCycle(i)
             time.sleep(.02)

         # 再让电流从大到小,LED由亮变暗
         for i in xrange(100, -1, -1):
             pwm.ChangeDutyCycle(i)
             time.sleep(.02)

 # 最后一段是一个小技巧。这个程序如果不强制停止会不停地执行下去。
 # 而Ctrl+C强制终端程序的话,GPIO口又没有机会清理。
 # 加上一个try except 可以捕捉到Ctrl+C强制中断的动作,
 # 试图强制中断时,程序不会马上停止而是会先跳到这里来做一些你想做完的事情,比如清理GPIO口。
 except KeyboardInterrupt:
     pass

 # 停用 PWM
 pwm.stop()

 # 清理GPIO口
 RPi.GPIO.cleanup()

RGB随机变色灯

使用BCM编码,接RGB到17,27,22GPIO接口,每两秒换一个颜色

 #-*-coding:utf-8-*-
 import random

 __author__ = 'george.yang'
 # !/usr/bin/env python
 # encoding: utf-8

 import RPi.GPIO
 import time

 R, G, B = 17, 27, 22

 RPi.GPIO.setmode(RPi.GPIO.BCM)

 RPi.GPIO.setup(R, RPi.GPIO.OUT)
 RPi.GPIO.setup(G, RPi.GPIO.OUT)
 RPi.GPIO.setup(B, RPi.GPIO.OUT)

 #2秒换一次颜色,不需要太高频率
 pwmR = RPi.GPIO.PWM(R, 60)
 pwmG = RPi.GPIO.PWM(G, 60)
 pwmB = RPi.GPIO.PWM(B, 60)

 pwmR.start(0)
 pwmG.start(0)
 pwmB.start(0)

 try:
     while True:
         r = random.random() * 100
         g = random.random() * 100
         b = random.random() * 100

         #print 'r = %d g = %d b = %d' % (r,g,b)

         pwmR.ChangeDutyCycle(r)
         pwmG.ChangeDutyCycle(g)
         pwmB.ChangeDutyCycle(b)

         time.sleep(2)

 except KeyboardInterrupt:
     pass
 except Exception,e:
     pass

 pwmR.stop()
 pwmG.stop()
 pwmB.stop()

 RPi.GPIO.cleanup()