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

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

3天内不再提示

使用树莓派GPIO口点亮双色LED灯

CHANBAEK 来源:容里与良鹿 作者:张凯 2023-07-04 11:34 次阅读

上一篇文章向大家介绍树莓派的硬件部分、安装操作系统及基础设置。这篇文章将介绍树莓派的强大的开发功能口——GPIO,以及利用GPIO口点亮双色LED灯(树莓派的第一个基本实验)。具有一定的参考价值,需要的朋友可以参考一下。

一、从了解GPIO开始

GPIO全称:通用型输入输出端口(General-purpose input/output),其引脚能够供使用者自由的进行使用,可以对其进行输入,也可以读取其数据进行数据输出,这些引脚的输入或输出都会关联到某个寄存器,寄存器的值控制引脚的电平高低。

树莓派引脚分类

  • 电源引脚:5v,3.3v,GND(Ground)。
  • 常规GPIO控制引脚:可以通过编写程序控制这些引脚的高低电平。
  • 特殊GPIO通讯引脚: SPI通讯,12C通讯,TxD/RxD串口通讯。
    树莓派引脚编码
  • 功能物理引脚:这种编码方式是按照树莓派主板上引脚排针编号。分别对应1~40号排针。从左到右,从上到下:左边奇数,右边偶数。
  • BCM:这种方式是参考 Broadcom SOC的通道编号侧重CPU寄存器。使用Python控制树莓派引脚时,使用的是WiringPi编码。
  • WiringPi编码:WiringPi编码,把扩展GPIO端口从0开始编码。使用 C语言控制树莓派引脚时,使用的是WiringPi编码。
    图片
    窗口查看引脚编号
    1、在终端输入指令:
    pinout
    

图片

2、使用树莓派输入gpio readall命令查看pin状态

  • 输入以下命令安装Git:
sudo apt install git-core
  • 输入以下命令,将 WiringPi 文件下载到树莓派系统的当前目录。
sudo git clone https://github.com/WiringPi/WiringPi
  • 耐心等待其安装完成。下载完成后,我们可以在当前目录下看到一个WiringPi文件夹。如下所示。

图片

  • 输入以下命令进入 WiringPi 文件夹目录。
cd WiringPi/
  • 输入以下命令安装 WiringPi。
sudo ./build

图片

图片

  • 耐心等待它的安装完成。当我们看到下面的界面没有任何错误时,就意味着安装完成了。
  • 输入以下命令查看gpio的版本。
gpio -v

图片

  • 最后,我们可以查看树莓派各个管脚的状态,输入指令:
gpio readall

图片

使用RPi.GPIO模块

RPi.GPIO是Python的一个模块,树莓派默认已经安装了该模块。本节详细介绍如何使用Python的RPi.GPIO模块控制GPIO。

1、导入RPi.GPIO模块

import RPi.GPIO as GPIO

2、设置指定模式(强制)管脚编号

GPIO.setmode(GPIO.BOARD)  #物理引脚编码
GPIO.setmode(GPIO.BCM)    #BCM编码

3、设置禁用警告

如果GRIO检测到一个引脚已经被设置成了非默认值,可以使用setwarnings()关闭警告信息

GPIO.setwarnings(False)

4、设置引脚输入和输出

要将通道配置为输入:

GPIO.setup(channel, GPIO.IN)
要将通道设置为输出,请调用:
GPIO.setup(channel, GPIO.OUT)

为输出通道指定一个初始值:

GPIO.setup(channel, GPIO.OUT, initial=GPIO.HIGH)

将通道设置为输出时,同时设置多个通道:

channels = [18, 12, 13]
GPIO.setup(channels, GPIO.OUT)

要读取通道的值:

GPIO.input(channel)  #返回 GPIO.LOW 或 GPIO.HIGH。

要设置配置为输出的引脚的值:

GPIO.output(channel, state)

其中状态可以是 GPIO.LOW 或 GPIO.HIGH。

还可以输出到通道列表或元组:

channels = [18, 12, 13] 
GPIO.output(channels, GPIO.HIGH) # or GPIO.LOW
GPIO.output(channel, (GPIO.LOW, GPIO.HIGH, GPIO.HIGH))

5、清理所有使用的通道

在程序结束时,最好清理通道,以便将所有引脚设置为默认状态。

GPIO.cleanup()

二、实验——树莓派GPIO口控制双色LED灯

1、简介

双色LED灯(双基色 LED灯),是指模块只能显示2种颜色,一般是红色和绿色,可以有三种状态:灭、颜色1亮、颜色2亮;根据颜色组合的不同,分为红蓝双色,黄蓝双色,红绿双色等等。双色 LED常于指示状态:比如红色表示设备异常,绿色表示正常。

图片

2、组件

1、树莓派主板*1

2、树莓派电源*1

3、40P软排线*1

4、双色LED模块*1

5、面包板*1

6、杜邦线、跳线若干

3、实验原理

将引脚S(绿色)和中间管脚R(红色)连接到树莓派的GPO 接口上,对树莓派进行编程控制,将LED的颜色从红色变为绿色,然后使用PWM混合其他颜色。

该模块的原理图如下所示:

图片

4、实验步骤

连接电路。将树莓派通过T型转接板连接到面包板,树莓派GPIO 11即T型转接板GPIO 17,“红白线”连接双色LED模块R端子;树莓派GPIO 12 即T型转接板GPIO 18,“绿白线”连接双色LED模块G端子;树莓派GND即T型转接板GND,“黑线”连接双色LED模块GND端子。

树莓派 面包板 双色LED模块
GPIO1 GPIO18 G(S)
GPIO0 GPIO17 R(中间)
GND GND GND

图片

图片

5、代码实现

WM的频率:P决定了输出的数字信号on (1) 和 off(0 )的切换速度,频率越高,切换就越快。

占空比:指一串理想脉冲序列中,正脉冲的持续时间与脉冲总周期的比值,用来调节灯的亮度。

import RPi.GPIO as GPIO
import time


colors = [0xFF00, 0x00FF, 0x0FF0, 0xF00F]
makerobo_pins = (11, 12)  # PIN管脚字典


GPIO.setmode(GPIO.BOARD)     # 采用实际的物理管脚给GPIO口
GPIO.setwarnings(False)      # 去除GPIO口警告
GPIO.setup(makerobo_pins, GPIO.OUT)   # 设置Pin模式为输出模式
GPIO.output(makerobo_pins, GPIO.LOW)  # 设置Pin管脚为低电平(0V)关闭LED


p_R = GPIO.PWM(makerobo_pins[0], 2000)  # 设置频率为2KHz
p_G = GPIO.PWM(makerobo_pins[1], 2000)  # 设置频率为2KHz


# 初始化占空比为0(led关闭)
p_R.start(0)     
p_G.start(0)


def makerobo_pwm_map(x, in_min, in_max, out_min, out_max):
    return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min


def makerobo_set_Color(col):   # 例如:col = 0x1122
    R_val = col  > > 8
    G_val = col & 0x00FF
    # 把0-255的范围同比例缩小到0-100之间
    R_val = makerobo_pwm_map(R_val, 0, 255, 0, 100)
    G_val = makerobo_pwm_map(G_val, 0, 255, 0, 100)


    p_R.ChangeDutyCycle(R_val)     # 改变占空比
    p_G.ChangeDutyCycle(G_val)     # 改变占空比


# 调用循环函数
def makerobo_loop():
    while True:
        for col in colors:
            makerobo_set_Color(col)
            time.sleep(0.5)
# 释放资源
def makerobo_destroy():
    p_G.stop()
    p_R.stop()
    GPIO.output(makerobo_pins, GPIO.LOW)    # 关闭所有LED
    GPIO.cleanup()                          # 释放资源


# 程序入口
if __name__ == "__main__":
    try:
        makerobo_loop()       # 调用循环函数
    except KeyboardInterrupt:  # 当按下Ctrl+C时,将执行destroy()子程序。
        makerobo_destroy()    # 释放资源
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • led灯
    +关注

    关注

    22

    文章

    1592

    浏览量

    107999
  • 操作系统
    +关注

    关注

    37

    文章

    6825

    浏览量

    123331
  • 串口通讯
    +关注

    关注

    1

    文章

    259

    浏览量

    24930
  • GPIO
    +关注

    关注

    16

    文章

    1204

    浏览量

    52098
  • 树莓派
    +关注

    关注

    116

    文章

    1707

    浏览量

    105633
收藏 人收藏

    评论

    相关推荐

    基于51单片机通过GPIO点亮LED

    在之前的教程中,我们成功搭建了开发环境,初步对开发板的GPIO有了一定的了解,在本教程中,我们将带领大家制作第一个工程,就是通过GPIO点亮
    发表于 07-17 14:18 6011次阅读
    基于51单片机通过<b class='flag-5'>GPIO</b><b class='flag-5'>口</b><b class='flag-5'>点亮</b><b class='flag-5'>LED</b><b class='flag-5'>灯</b>

    树莓2控制一个LED

    ` 本帖最后由 348081236 于 2016-1-19 16:57 编辑 这个教程教你怎样用树莓控制一个LED。这是比较基础、简单、适合新手的。先从一个
    发表于 01-19 16:55

    【MaaXBoard开发板试用体验】九终于通过GPIO点亮LED

    `折腾了一周,终于用GPIO点亮LED了,拍照留念下!说说GPIO,以为和 树莓
    发表于 10-31 21:57

    树莓如何点亮一个LED

    本章将简介在树莓派上面通过shell,sysfs,bcm2835,wiringPi,python等不同的编程方式点亮一个LED
    发表于 11-05 07:04

    树莓GPIO有哪些电气特性

    GPIO是如何去定义的?树莓GPIO有哪些电气特性?
    发表于 11-08 07:30

    如何利用stm32的GPIO点亮一个LED

    stm32的GPIO的基本结构是怎样构成的?stm32的GPIO的工作模式有哪几种呢?如何利用stm32的GPIO
    发表于 12-15 07:04

    LED实验的相关资料下载

    树莓LED实验简介一、实验效果二、组件三、实验原理四、实验步骤五、代码实现简介
    发表于 01-05 07:12

    树莓gpio接口及编程方法

    树莓现在越来越火,网上树莓的资料也越来越多。树莓源自英国,国外嵌入式开源领域具有良好的分享
    发表于 11-22 11:54 6.5w次阅读

    树莓gpio有什么用_怎么用

    树莓现在越来越火,网上树莓的资料也越来越多。树莓源自英国,国外嵌入式开源领域具有良好的分享
    发表于 12-06 09:05 1.6w次阅读

    STM32的GPIO输出编程实例之点亮LED

    本实验通过STM32的三个GPIO驱动三LED的三个通道,将GPIO设置为推挽输出模式,采用灌电流的方式与
    的头像 发表于 02-07 11:14 2.8w次阅读
    STM32的<b class='flag-5'>GPIO</b>输出编程实例之<b class='flag-5'>点亮</b>三<b class='flag-5'>色</b><b class='flag-5'>LED</b>

    树莓GPIO入门07-利用声音传感器制作声控

    本文我们用声音传感器来制作一个简易的声控。最终效果树莓GPIO入门07-利用声音传感器制作声控视频演示:硬件面包板杜邦
    发表于 04-02 14:41 2116次阅读

    树莓教程1_点亮第一个led

    ,不知不觉中,我们已经成为了人们口中常常提到的“一大师 ”。今天,我们来学习树莓的使用,依旧从点灯开始,用点灯的方式一步步点亮我们的世界。 实验原理同过
    发表于 04-02 14:45 1801次阅读

    关闭树莓电源LED,禁用wifi、蓝牙

    在关闭树莓的电源指示和状态指示中,对关闭树莓指示
    发表于 01-06 11:55 3次下载
    关闭<b class='flag-5'>树莓</b><b class='flag-5'>派</b>电源<b class='flag-5'>LED</b><b class='flag-5'>灯</b>,禁用wifi、蓝牙

    树莓zero不亮_关闭树莓的电源、状态、网指示

    关闭树莓的指示我有几个树莓放在房间内,每天晚上都看到指示的闪光,感觉有
    发表于 01-11 09:28 9次下载
    <b class='flag-5'>树莓</b><b class='flag-5'>派</b>zero不亮_关闭<b class='flag-5'>树莓</b><b class='flag-5'>派</b>的电源、状态、网<b class='flag-5'>口</b>指示<b class='flag-5'>灯</b>

    基于树莓点亮RGB三基色LED

    上一篇实现了树莓的第一个基础实验——点亮LED
    的头像 发表于 07-04 11:34 2120次阅读
    基于<b class='flag-5'>树莓</b><b class='flag-5'>派</b><b class='flag-5'>点亮</b>RGB三基色<b class='flag-5'>LED</b><b class='flag-5'>灯</b>