使用GPIO输出引脚控制LED

20

下面的电路显示使用配置为输出的Raspberry Pi 通用输入输出引脚打开和关闭LED。它使用输出引脚打开一个晶体管,该晶体管允许LED从5V电源汲取电流。

The 需要以下排针 :

  • 排针2:5V
  • 针脚6:接地
  • 接头引脚11:GPIO

标题引脚在我的 Raspberry Pi接针 页。您可以使用任何喜欢的GPIO引脚,但我将引脚11用于测试。

  • LED是标准5mm红色类型,正向电压为2V。
  • 该晶体管可以是BC547,BC548或等效的。
  • 电阻R1限制5V引脚流经LED的电流。如果LED两端的电压降为2V,则电阻器两端的电压为3V。因此电流为3/560 = 5.4mA。
  • 电阻R2限制了来自GPIO引脚的电流。 通用输入输出为0v或3.3V,因此流入晶体管基极的最大电流为3.3 / 27000 = 120uA。
  • 假设晶体管的增益为200,则120uA的基极电流将允许最大24mA(120uA x 200)的电流通过LED。

您只需确保允许足够的电流为LED供电,就可以提高R1。

R2可以增加,这会减少从GPIO引脚汲取的电流,但会减少允许流过晶体管的最大电流。

注意:与您与Pi进行的所有连接一样 ’在PCB上,您必须仔细检查所有内容。接线错误可能会损坏CPU,因为某些GPIO引脚直接连接到Broadcom芯片。

I’感谢Gert的反馈,已修改了此页面上的一些详细信息(请参阅下面的评论)。

蟒蛇代码

为了在Python中控制GPIO引脚,您必须安装RPi.GPIO库。如果遵循我的要求,则安装库很容易 RPi.GPIO安装指南. Once installed you 能够 use the following 蟒蛇 script to toggle the 通用输入输出 输出 上 header pin 11 (GPIO17) :

import RPi.GPIO as 通用输入输出
import time

# Use physical pin numbers
GPIO.setmode(GPIO.BOARD)
# Set up header pin 11 (GPIO17) as an 输出
print "Setup Pin 11"
GPIO.setup(11, 通用输入输出.OUT)

var=1
print "Start loop"
while var==1 :
  print "Set Output False"
  通用输入输出.output(11, False)
  time.sleep(1)
  print "Set Output True"
  通用输入输出.output(11, True)
  time.sleep(1)

该脚本将继续运行,直到您按CTRL-C。

使用GPIO库时,Python脚本必须以超级用户身份运行。因此,如果您的脚本被调用“ledtest.py”您可以通过键入以下命令运行它:

sudo 蟒蛇 ledtest.py

该脚本应在切换引脚11的状态时向命令行打印文本消息。如果电路正确,则LED应每隔一秒钟打开和关闭一次。

 

分享。

20条留言

  1. 你好

    谢谢:这使事情变得容易得多。

    该图显示了PIN P2(5v电源),但是“需要以下排针”本段讨论了标头PIN P1(3.3 v电源)。

    我想真正使用的PIN是P2 5v:您确认吗?

    —–

    关于电阻器R2,该图显示为2.2k欧姆;
    它代表2 200欧姆吗?
    您确定这个值吗?
    应该在730欧姆左右吗?

    问候,

    • 发现得好。确实是Pin 2– 5V.

      2.2Kohm电阻等于2200 ohm。该电阻可以是不同的值。它只是限制了电流从GPIO引脚流经晶体管的基极接地。如果GPIO引脚为3.3V,则将产生1.5mA电流。将更多的电流驱动到晶体管的基极几乎没有意义,因此,如果有的话,该值应该更大。

  2. 感谢这篇文章。很有帮助。

    赢了’最终产生了巨大的变化,但该图显示R1的值为560欧姆,但文字中提到的是460欧姆。如果两个值匹配,则可能会减少混乱。

    • I’ve更新了文本。您’re 对 that it doesn’非常重要本来我打算使用一个较低的值,但决定使用560ohm,因为它没有’不会对LED产生任何影响,但会减少从Pi汲取的电流’s 5V pin.

  3. 至于电路:它可以工作,但不是很好的设计。
    上图使用了来自GPIO的1.5mA电流,该电流足以直接点亮高效LED。

    LED由5V驱动,并具有5​​60欧姆。
    因此它将通过大约(5-2)/ 560 = 5mA。
    让我们夸大并使其达到10mA。
    BC547B的最低Alpha为200。
    因此,您需要10mA / 200 = 50uA作为流入基座的电流。
    因此,您的基准电阻必须为(3.3-0.6)/ 50e-6 = 54K。
    再次取两个安全系数:27K。

    因此,27K的基极电阻仍然足以提供4的安全系数。

    • 抱歉,Alpha应该是Beta(Ic / Ib)。

      还声明“它不会对LED产生任何影响,但会减少从Pi汲取的电流。”是不正确的。 Ib由GPIO输出电压和基极电阻设置。 BE结实际上是一个二极管,因此降低Ic不会降低Ib。您的集成电路 能够 如果发射极和地面之间有电阻,请降低Ib。确实如此,是因为您的Ic增大了Ve,从而增大了Vb。结果是您在基极电阻上的电压降低了,因此流入基极的电流也减小了。

      对不起,如果我听起来很挑剔,但由于您的电路引起Pi用户的困惑,我收到了PM。

      • 我的意思是改变R1会改变流经LED的电流,从而改变从5V电源轨汲取的电流。并不是说这会改变通过GPIO基极的电流。一世’我们对评论进行了调整,以使其更加清晰。

    • 我明白你的意思了。最初,我为基极电阻选择了一个低值,因为我希望能够用另一种器件替换LED,而不必担心晶体管会限制电流。所以我想确保它已经饱和。一世’ll更新图表和文字使其更清晰,并替换为新值。

      谢谢你的评论’表示赞赏。很高兴您访问此页面!

    • 是的,它可以。可以使电流流过继电器线圈,而不是LED。您可能需要调整电阻器以提供正确的电流。

  4. pingback: Raspberry Pi作为电源开关-DL-UAT

  5. 示例代码第6行的注释显示“input”, but should be “output”…功能上没有任何变化,但是作为菜鸟,更正确。

  6. 我看到一个电路,其中GP24的红色LED到GND的330R。我的无知程度使我不知道为什么引入电阻是有益的。有什么建议吗?

    我非常感谢您教程的清晰明了。

    • It’s以限制流过LED的电流。 LED将下降约2V,而电阻器将下降其余的1.3V。使用V = IR可以插入该电压降和电阻,以确定通过电阻的电流。该电流必须与通过GPIO引脚流过的LED汲取的电流相同。您’将会看到不同的值,但是将电流限制为5-20mA的值。没有“right”重视一系列合理的价值和许多错误的价值!如果您需要更多细节或更好的解释,请查阅“LED限流电阻”而且那里会有很多信息/视频。

  7. 唐·德格雷戈里

    您真的需要晶体管吗?与LED串联一个330欧姆就足够了吗?
    或更重要的是,什么时候应该为Pi Zero使用晶体管?

    • 你不’确实需要使用晶体管从GPIO引脚运行LED。唯一的规则是不要尝试从单个引脚(〜15mA)或整个GPIO(〜50mA)汲取太多电流。晶体管可用于从另一电源(通常是5V电源)切换电源,而电流极限要高得多。因此,在本文中,它更多是一个示例。如果在项目中添加几个LED,通常会直接连接330ohm电阻。我倾向于使用330,因为我’有一袋4000ðŸ™,

发表评论

该网站使用Akismet减少垃圾邮件。 了解如何处理您的评论数据.