如何使用RPi控制RGB LED,RPI

步骤1:简介-RGB LED

在开始之前,请先快速了解一下电路以及LED的行为。当购买LED时,包装背面应显示大量文字,显示技术规格。如果您似乎找不到任何规格,请尝试在零件的序列号上运行Google搜索。我们关注正向电压(VF,以伏为单位)和正向电流(IF,以毫安为单位)。对于这些变量中的每一个,典型的LED(燃烧一种颜色)将具有一个值。但是,您可能会注意到,不同颜色的LED具有不同的值。特别是红色似乎降低了最低的正向电压,而蓝色则降低了最高的正向电压。同样,三种颜色的RGB LED很可能具有不同的值。购买材料时,您需要牢记这些值,以便能够选择合适的电阻器-不用担心,我们会到达那里!

您会还请注意,RGB LED有四根引线,而不是两根。如前所述,RGB LED实际上是一个很小的电路,由三个不同的LED组成。现在,在这里事情可能会变得有些棘手。 RGB LED有两种类型:共阳极和共阴极。在共阳极类型上,最长的导线连接到正极端子,并允许电流流向内部的所有三个LED,而导线1、3和4分别是红色,绿色和蓝色的接地导线。另一方面,普通阴极类型共用接地线。三个较短的导线分别以相同的顺序分别连接到正极端子。那么,您应该使用哪个呢?作为一个初学者,我会坚持使用普通阴极类型。普通阴极将使您更好地了解Raspberry如何处理输出以及电路如何工作,并且尽管普通阳极类型仍可在电流吸收的情况下工作,但它要先进一些。

步骤2:材料

Raspberry Pi,我将使用2型B

无焊料面包板(好吃!)(这是我使用的那个)

一个RGB LED

3个电阻

跳线

电阻很重要,因为它们也会阻止LED发送通过您的Pi的电流很大,如果有机会他们会做的。这可能会导致您烧毁LED,油炸GPIO引脚和/或破坏Pi。将输出连接到Pi时,即使它们是低电平,也要始终使用电阻。通常,这些LED各自可以处理高达30mA的电流,但我们将其保持在17mA以下。我们为什么不能走得那么高? Pi只能向GPIO引脚提供这么多的电流,并且再次消耗过多电流会造成严重损坏。那么我们能走多高呢?答案不是超级简单,但是可以推断出来。根据eLinux,GPIO引脚连接到3.3v电源轨,该电源能够一次提供最大50mA的电流。但是,这并不意味着该电源轨具有将其限制为50mA的调节器。如果允许这样做,连接到该电源轨的电路将继续汲取超过50mA的电流,直到发生短路。将所有三个引脚保持在至少17mA以下将确保我们的Pi受到足够的保护,即使所有三种颜色都在一次燃烧。

您购买的电阻将取决于您的单个LED。您将需要三个电阻,每种颜色一个。要计算电阻,请转到LEDCalculator.net。该网站使用欧姆定律,因此您不必这样做。只需输入提供的电压(3.3v),压降(单个颜色的正向电压),额定电流(保持在16mA或以下)和LED的数量(在这种情况下,将每种颜色视为单个LED) )。对每种颜色执行此操作,适当更改电压降。现在,您已经有了电阻的值!在1/4瓦特大小中各取一个(在这种情况下,瓦特数衡量电阻器在故障之前将吸收的热量)。现在我们有了所需的一切。让我们开始吧!

第3步:面包板设置

从技术上讲,无焊面包板不是必需的,但它可以使事情变得简单更快,更容易。但是,如果您确实选择焊接,那么我将假设您至少具有一些电路的基本知识,并且以下图表将足以帮助您入门。

无焊料面包板是用于原型制作,因为它使您可以轻松地在电路中移动组件,而无需焊接和拆焊。相信我,即使是一个简单的项目,无焊板也可以节省数小时的时间。在无焊板上,称为总线的正极和负极列都可以连接到电源的正极和负极端子。使用跳线,我们可以连接到这些总线以形成电路。两组总线之间的列(标记为A-E和F-J)通过行连接,但这些连接不与中间分隔线交叉。例如,第1行的A-E列构成一条轨道,第1行的F-J列构成另一条轨道,第2行的A-E列构成另一条轨道。现在我们了解了这一点,让我们来谈谈电路。对于此电路,我们需要将公共阴极连接到接地引脚,并将三个阳极中的每个阳极通过一个电阻器连接到不同的可编程引脚。在这种情况下,我们将使用编号为9、11、13和15的GPIO引脚(Pi的GPIO引脚有两种不同的命名约定-这是使用“板”约定)。引脚号9是接地,因此我们将其阴极连接至该引脚,然后将红色,绿色和蓝色连接至引脚11、13和15。

一旦完成所有设置,便可以继续测试我们的电路-我们不希望出现故障电路,使我们认为我们的代码是错误的。为此,请断开您的Pi的电路(接地连接除外),然后打开Pi。操作系统启动后,首先从面包板上取下红色导线并将其连接到引脚号1。此引脚不可编程,并且始终设置为3.3v,因此,当连接红色导线时,红色LED应亮起。对所有三种颜色都执行此操作。

步骤4:编写程序

在进入程序之前,请务必注意缩进在Python语言。其他语言使用括号等标点符号来告诉程序运行程序的顺序。 Python使用缩进。因此,您可能无法简单地将代码从此页复制并粘贴到程序中,因为可能无法完全保留格式。请随时随便继续编写自己的代码,或者在此处下载我的示例代码。

如果您是编码新手,那么请务必指出,没有一种方法可以编写程序。人们有自己的风格,但这主要取决于您如何解决问题。我将提供示例代码并逐行进行说明,但是请注意,这不是获得完全相同结果的唯一方法。

import sys, time

在这里,我们导入两个库中-已经定义并且可以调用的函数,变量等。

import RPi.GPIO as GPIO

这是一个Raspbian库,允许我们使用Python控制GPIO引脚。/p》 redPin = 11

greenPin = 13

bluePin = 15

现在,我们定义一些变量-我们将哪些引脚连接到RGB引线。此步骤不是必需的,但是如果需要,它可以更轻松地更改引脚。

def blink(pin):

在这里,我们定义了一个功能。功能是计算机按照我们赋予它的顺序执行的一组步骤。此特定功能需要一个变量才能运行:我们要点亮的引脚号。

GPIO.setmode(GPIO.BOARD)

我们通过引用我们的库之一GPIO开始我们的功能。然后,我们告诉我们要为GPIO引脚(其中有两个)选择一个命名约定,以便程序知道我们要指的是哪一个。然后,我们告诉它再次使用GPIO库使用“ board”约定(而不是BMC约定)。

GPIO.setup(pin, GPIO.OUT)

现在,再次使用GPIO库,我们告诉我们要使用的Pi引脚。但是首先,我们需要指定输入或输出引脚以及使用方式。在这里,“ pin”是将插入眨眼(pin)的变量。

GPIO.output(pin, GPIO.HIGH)

现在已经设置了该引脚,此行将其打开。您应该现在就识别语法;在这里,我们使用相同的变量“ pin”,并使用GPIO库将引脚设置为“ high”值。对于GPIO引脚,“高”值导致通过3.3v或“ on”,而“低”值导致通过0v或“ off”。

现在我们将定义一个关闭灯的功能。它看起来与以前的功能几乎相同,只是我们将引脚设置回低电平。

def turnOff(pin):

GPIO.setmode(GPIO.BOARD)

GPIO.setup(pin, GPIO.OUT)

GPIO.output(pin, GPIO.LOW)

我们需要使用刚刚创建的功能定义一些特定于颜色的功能。回想一下,我们将针脚11、13和15用于红色,绿色和蓝色。我们将从打开灯的功能开始。使用这种类型的功能,我们不需要任何参数,因此方括号为空;

def redOn():

blink(redPin)

在这里,我们为“ blink”函数提供一个引脚号以供使用。11。当我们调用redOn()时,闪烁函数将以“ pin”替换为“ redPin”开始执行。回想一下,我们之前将redPin设置为11。

现在,我们对其余的颜色也做同样的事情。

def greenOn():

blink(greenPin)

def blueOn():

blink(bluePin)

记住,在处理光时,黄色是通过将红色与绿色混合而成,青色是通过绿色与蓝色混合而成,品红色与红色和蓝色混合而成,而白色则是通过将所有这三种结合在一起而制成的。关闭。再次,语法将类似于上面的函数。

def yellowOn():

blink(redPin)

blink(greenPin)

def cyanOn():

blink(greenPin)

blink(bluePin)

def magentaOn():

blink(redPin)

blink(bluePin)

def whiteOn():

blink(redPin)

blink(greenPin)

blink(bluePin)

现在,我们准备定义我们的主要功能;一个不断询问用户输入并通过调用各种函数做出反应的循环。在这种情况下,用户将能够打开和关闭颜色。编写该程序的目的是仅接受一些预先指定的输入。否则,它将不执行任何操作并显示相应的信息。

同样,我们不要求使用此函数提供任何变量,因此括号保持空白。 “ while True”本质上表示“程序正在运行时,请执行此操作”,因此它将一直运行,直到退出为止。

def redOff():

turnOff(redPin)

def greenOff():

turnOff(greenPin)

def blueOff():

turnOff(bluePin)

def yellowOff():

turnOff(redPin)

turnOff(greenPin)

def cyanOff():

turnOff(greenPin)

turnOff(bluePin)

def magentaOff():

turnOff(redPin)

turnOff(bluePin)

def whiteOff():

turnOff(redPin)

turnOff(greenPin)

turnOff(bluePin)

我们定义了一个新变量“ cmd”,以便以后使用将其设置为等于用户的输入。

现在,仅当用户输入的内容与引号内的文本完全匹配时,“ if”语句才会运行。请注意,这里我们使用两个“等于”符号。在Python和实际上大多数语言中,使用单个“等于”来更改变量的值,而使用双精度来比较变量值是否彼此匹配。

def main():

while True:

cmd = raw_input(“Choose an option:”)

“ elif”代表“ else,如果”。这将附加到较早的“ if”语句并添加新参数,从而使我们可以轻松地创建“ else,if”语句链。

if cmd == “red on”:

redOn()

使用我们的最后一个“ else”语句,if如果用户尝试输入除上述指定命令之一以外的任何其他命令,它将告诉用户这是无效命令。函数需要的最后一件事是“返回”,因此程序知道何时循环。

elif cmd == “red off”:

redOff()

elif cmd == “green on”:

greenOn()

elif cmd == “green off”

greenOff()

elif cmd == “blue on”:

blueOn()

elif cmd == “blue off”:

blueOff()

elif cmd == “yellow on”:

yellowOn()

elif cmd == “yellow off”:

yellowOff()

elif cmd == “cyan on”:

cyanOn()

elif cmd == “cyan off”:

cyanOff()

elif cmd == “magenta on”:

magentaOn()

elif cmd == “magenta off”:

magentaOff()

elif cmd == “white on”:

whiteOn()

elif cmd == “white off”:

whiteOff()

else:

print(“Not a valid command.”)

return

这是我们代码的最后一行。运行程序时,此行将调用我们刚刚定义的主要函数,并将设置循环。

步骤5:运行程序

就是这样!现在该运行程序了。导航至顶部菜单栏,然后选择运行-》运行模块,或按F5。在IDLE运行程序之前,系统会要求您保存所做的工作。继续,在提示后键入“ red on”,然后按Enter。红灯应亮起!

请注意,退出程序之前,至少应确保已关闭所有颜色。但是,我建议您在退出之前运行GPIO.cleanup()函数。这是RPi.GPIO库随附的内置函数,可重置程序中使用的所有引脚。您可以修改此代码以包含运行GPIO.cleanup()的命令,也可以按CTRL + C中断程序,然后直接在用户输入中键入GPIO.cleanup()。

相关推荐

相关文章