0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何使用RPi控制RGB LED

454398 来源:wv 2019-10-28 17:16 次阅读

步骤1:简介-RGB LED

如何使用RPi控制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()。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led
    led
    +关注

    关注

    240

    文章

    23096

    浏览量

    657501
  • RGB
    RGB
    +关注

    关注

    4

    文章

    797

    浏览量

    58345
  • 树莓派
    +关注

    关注

    116

    文章

    1697

    浏览量

    105465
收藏 人收藏

    评论

    相关推荐

    宠物屋体验控制电机、RGB全彩LED灯与温湿度传感器

    GoKit2代,把应用板与主控板分离,使用了arduino标准接口,如下图:应用板依然板载了正反转可调速电机马达、温湿度传感器、红外感应器、RGB全彩LED灯,另外增加了OLED扩展接口,你可以
    的头像 发表于 10-13 08:03 164次阅读
    宠物屋体验<b class='flag-5'>控制</b>电机、<b class='flag-5'>RGB</b>全彩<b class='flag-5'>LED</b>灯与温湿度传感器

    UART软件控制RGB LED混色与MSP430™ MCU

    电子发烧友网站提供《UART软件控制RGB LED混色与MSP430™ MCU.pdf》资料免费下载
    发表于 10-09 11:41 0次下载
    UART软件<b class='flag-5'>控制</b>的<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>混色与MSP430™ MCU

    如何选择RGB LED驱动器

    电子发烧友网站提供《如何选择RGB LED驱动器.pdf》资料免费下载
    发表于 09-25 14:29 0次下载
    如何选择<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>驱动器

    基于LP50xx器件的全彩RGB LED矩阵系统设计指南

    电子发烧友网站提供《基于LP50xx器件的全彩RGB LED矩阵系统设计指南.pdf》资料免费下载
    发表于 09-25 11:52 0次下载
    基于LP50xx器件的全彩<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>矩阵系统设计指南

    TIDA-00980-具有 IO-li<x>nk 接口的 RGB LED 信号塔 PCB layout设计

    电子发烧友网站提供《TIDA-00980-具有 IO-link 接口的 RGB LED 信号塔 PCB layout设计.pdf》资料免费下载
    发表于 05-10 09:28 0次下载
    TIDA-00980-具有 IO-li<x>nk 接口的 <b class='flag-5'>RGB</b> <b class='flag-5'>LED</b> 信号塔 PCB layout设计

    具有自主控制功能的同步升压4×3矩阵 RGB LED 驱动器LP5813数据表

    电子发烧友网站提供《具有自主控制功能的同步升压4×3矩阵 RGB LED 驱动器LP5813数据表.pdf》资料免费下载
    发表于 03-26 13:44 0次下载
    具有自主<b class='flag-5'>控制</b>功能的同步升压4×3矩阵 <b class='flag-5'>RGB</b> <b class='flag-5'>LED</b> 驱动器LP5813数据表

    具有自主控制功能的4 ×3矩阵RGB LED驱动器LP5812数据表

    电子发烧友网站提供《具有自主控制功能的4 ×3矩阵RGB LED驱动器LP5812数据表.pdf》资料免费下载
    发表于 03-22 11:07 0次下载
    具有自主<b class='flag-5'>控制</b>功能的4 ×3矩阵<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>驱动器LP5812数据表

    5050RGB三合一LED WS2850B数据手册

    电子发烧友网站提供《5050RGB三合一LED WS2850B数据手册.pdf》资料免费下载
    发表于 03-07 18:16 1次下载

    如何使用Arduino控制RGB LED

    在本指南中,您将学习如何使用Arduino控制RGB LEDRGB(红-绿-蓝)LED可以通过混合不同强度的红、绿、蓝光来产生多种颜色。您
    的头像 发表于 02-11 10:28 4456次阅读
    如何使用Arduino<b class='flag-5'>控制</b><b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>

    【每周一练】盘古1K开发板 练习二:按键控制LED灯实验

    本文完成的实验为按键控制LED灯,通过对连接按键输入的IO电平进行检测,根据电平的状态来改变LED的亮灭。 实验要求和硬件概览 在【每周一练】小眼睛FPGA1K开发板硬件平台中使用的LED
    发表于 12-21 22:45

    明微SM16703可替代WS2811,此驱动芯片在RGB全彩灯带灯条点光源上的应用

    ws2811和sm16703是两种广泛应用于RGB全彩灯带灯条点光源的驱动芯片。它们的主要作用是控制和驱动LED灯珠,以实现全彩RGB LED
    的头像 发表于 12-21 16:38 3244次阅读
    明微SM16703可替代WS2811,此驱动芯片在<b class='flag-5'>RGB</b>全彩灯带灯条点光源上的应用

    rgb屏和mcu屏有什么区别

    Crystal Display,简称LCD)。它是一种通过液晶材料的光学特性来控制光线透过的显示技术。RGB屏使用了一种液体晶体材料,具有透明度可调的特性,通过控制电压在液晶分子之间的排列方向来
    的头像 发表于 12-20 09:46 4567次阅读

    【每周一练】+盘古1K开发板+2. 按键控制RGB led

    : key_led_rgb_top:顶层模块实现,主要定义了信号,端口和模块名称,然后调用子模块key_ctl对按键做控制,调用子模块led_rgbRGB
    发表于 12-17 11:33

    树莓派Pico驱动RGB LED模块的方法

    RGB LED 模块内有红、绿、蓝三种颜色的灯丝。可以通过程序将其调制成丰富的色彩点亮。
    的头像 发表于 11-30 09:06 1297次阅读
    树莓派Pico驱动<b class='flag-5'>RGB</b> <b class='flag-5'>LED</b>模块的方法

    【ELF 1开发板试用】+ RGB LED及按键的控制

    在掌握串口登录后,就可以利用板载的系统进行相应的测试了,作为板上最基本外设恐怕就非LED灯和按键莫属了,它们的控制均可归为GPIO口的使用。 在GPIO的输出设备中,最常用的便是LED灯。在ELF
    发表于 11-21 11:11