用树莓派实现RGB LED的颜色控制

RGB色彩模式是工业界的一种颜色标准,是通过对红(R)、绿(G)、蓝(B)三个颜色通道的变化以及它们相互之间的叠加来得到各式各样的颜色的,RGB即是代 表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。RGB色彩模式使用RGB模型为图像中每一个像素的RGB分量分配一个0~255范围内的强度值。RGB图像只使用三种颜色,就可以使它们按照不同的比例混合,从而得到各种各样的颜色。

在实际的控制中,往往通过PWM来实现LED亮度(颜色深度)的控制。

树莓派只有一路硬件PWM输出(GPIO1),可是要实现RGB LED的控制,需要3路PWM。其实,wiringPi库为我们提供了用软件多线程实现的PWM输出,我们可以利用这个库提供的函数很方便的将任意GPIO配置为PWM输出。在本例中,我将GPIO0,GPIO1,GPIO2配置成了soft PWM输出。树莓派的引脚分配表如下图所示:

1.jpg (58.86 KB, 下载次数: 75)

2018-1-16 17:36 上传

我用的RGB LED是共阴极的,与树莓派的连接方式如下:

Raspberry Pi                 RGB LED module

GPIO0 --------------------------------------  R

GPIO1  -------------------------------------  G

GPIO2 --------------------------------------  B

GND ----------------------------------------  ‘-’

实物图如下:

2.jpg (99.81 KB, 下载次数: 56)

2018-1-16 17:36 上传

#!/usr/bin/env python

#*********************************************************

#   File Name :rgb.py

#   Author    :Jason Dai

#   Date      : 2015/02/04

#*********************************************************

import RPi.GPIO as GPIO

import time

colors = [0xFF0000, 0x00FF00, 0x0000FF, 0xFFFF00, 0xFF00FF, 0x00FFFF, 0xFFFFFF, 0x9400D3]

pins = {'pin_R':11, 'pin_G':12, 'pin_B':13}  # pins is a dict

GPIO.setmode(GPIO.BOARD)       # Numbers GPIOs by physical location

for i in pins:

GPIO.setup(pins, GPIO.OUT)   # Set pins' mode is output

GPIO.output(pins, GPIO.HIGH) # Set pins to high(+3.3V) to off led

p_R = GPIO.PWM(pins['pin_R'], 2000)  # set Frequece to 2KHz

p_G = GPIO.PWM(pins['pin_G'], 2000)

p_B = GPIO.PWM(pins['pin_B'], 5000)

p_R.start(100)      # Initial duty Cycle = 100(leds off)

p_G.start(100)

p_B.start(100)

def map(x, in_min, in_max, out_min, out_max):   # 将一个数从一个区间线性映射到另一个区间,比如将0~100之间的一个数映射到0~255之间

return (x - in_min) * (out_max - out_min) / (in_max - in_min) + out_min

def setColor(col):   # For example : col = 0x112233

R_val = (col & 0xFF0000) >> 16

G_val = (col & 0x00FF00) >> 8

B_val = (col & 0x0000FF) >> 0

R_val = map(R_val, 0, 255, 0, 100)   # change a num(0~255) to 0~100.

G_val = map(G_val, 0, 255, 0, 100)

B_val = map(B_val, 0, 255, 0, 100)

p_R.ChangeDutyCycle(100 - R_val)     # Change duty cycle

p_G.ChangeDutyCycle(100 - G_val)

p_B.ChangeDutyCycle(100 - B_val)

try:

while True:

for col in colors:

setColor(col)

time.sleep(0.5)

except KeyboardInterrupt:

p_R.stop()

p_G.stop()

p_B.stop()

for i in pins:

GPIO.output(pins, GPIO.HIGH)    # Turn off all leds

GPIO.cleanup()

python rgb led控件_Raspberry Pi-用树莓派实现RGB LED的颜色控制——Python版本-电路城论坛 - 电子工程师学习交流园地...相关推荐

  1. python led屏控制_Raspberry Pi-简单几步实现通过Python编程控制USBLCD屏显示-电路城论坛 - 电子工程师学习交流园地...

    树莓派B/B+  USBLCD字符屏 目前市面上树莓派可用的LCD1602系列字符屏主要是两种,一种是通过树莓派上数目可怜的GPIO直接控制(GPIO大量被占用,可用的IO更少了),一种是做成扩展板插 ...

  2. opencv 全志_Banana Pi 开发板-【BPI-M2 Berry试用】论opencv3.3.0编译的那些坑(非成功版)-电路城论坛 - 电子工程师学习交流园地...

    这是一张吐槽贴和碰壁贴,要教程的可以看看我另一片帖子: https://www.cirmall.com/bbs/thread-97291-1-1.html复制代码虽然是3.2.0,而且是树莓派的,但编 ...

  3. 从scratch到python轻松学下载_STEAM教育-[少儿创客] 从Scratch到Python——python turtle-电路城论坛 - 电子工程师学习交流园地...

    从Scratch到Python--python turtle 一种比pygame更加简洁的实现 现在很多学校都开设了Scratch课程,学生可以利用Scratch创作丰富的作品,然而Scratch之后 ...

  4. wxpython制作表格界面_[Python] wxPython 菜单栏控件学习总结(原创)

    1.总结 1.大体创建过程 1.创建一个 菜单栏 : menuBar = wx.MenuBar() 相当于这个白色地方,没有File这个菜单 2.创建 菜单 : fileMenu = wx.Menu( ...

  5. python tkinter Checkbutton控件

    本小节展示的是python tkinter Checkbutton控件 选择了那些Ckeckbutton控件选项则在label控件中显示出来 from tkinter import *#导入tkint ...

  6. python列表框控件,Python 窗体(tkinter)下拉列表框(Combobox)实例

    废话不多说,看代码吧! import tkinter from tkinter import ttk def go(*args): #处理事件,*args表示可变参数 print(comboxlist ...

  7. GUI一灯大师,LVGL『LED控件』介绍

    一. LVGL GUI LED控件的概念 LED 是矩形(或圆形)的对象.它的亮度可以调节.亮度降低时,LED 的颜色会变暗. 二. LVGL GUI LED小部件和样式 LED 只有一个主要部分,称 ...

  8. 转大佬--C++语言Qt实现控件拖拽和连线类似可视化操作Simulink仿真类软件 电路仿真软件 和模型驱动等软件

    转自–标biao的文章:https://blog.csdn.net/kangkanglhb88008/article/details/120812524 目标:开发一个电路仿真软件. 内部原理:qt编 ...

  9. python rgb led控件_Python编程:一个不错的基于PyQt的Led控件显示库,建议收藏学习...

    1.控件说明 在Github上,偶然发现了一个基于PyQt5的第三方Led指示灯控件库,使用起来非常方便,控件外观也比较漂亮,更难能可贵的是作者源代码写得比较简洁,仅仅才约200行左右,可以作为一个在 ...

最新文章

  1. chrome浏览器测试插件postman安装
  2. Linux 安装 Elasticsearch-rtf
  3. Codis的dashboard异常退出后,重新启动报异常的处理方法
  4. linux实现乘法函数,linux命令行计算器
  5. 前端学习(2249)注册 创建 拉取
  6. nsoutlineview 搜索_阿里巴巴搜索推荐广告三位一体的在线服务体系
  7. 从C# String类理解Unicode(UTF8/UTF16)
  8. AcWing1075. 数字转换(树形DP)题解
  9. 2021安徽高考成绩及录取结婚查询,2020安徽高考录取结果查询时间及通知书发放时间...
  10. yolov3 python接口_darknetyolov3调用Python接口来检测和保存批处理图像,DarknetYoloV3,python,进行,批量,图片,并...
  11. 带你深挖Java泛型类型擦除以及类型擦除带来的问题
  12. Java NIO - Buffer 基础 -1
  13. 云​大数据和计算技术周报(第47期)
  14. Linux 下安装 yum
  15. ispostback之坑
  16. 教孩子学编程python 代码_天津哪有教孩子学编程python
  17. springboot jar包启动 读取resource下的文件
  18. 2018-2019-2 网络对抗技术 20165303 Exp3 免杀原理与实践
  19. 高德地图——地图渲染及关键字搜索POI功能vue2/web端
  20. 一个C++程序员的学习经历

热门文章

  1. NullInjectorError:No provider for MyNewService
  2. Spring JDBC 框架,我的学习笔记
  3. SAP UI5应用和Hybris Commerce的国际化(internationalization)支持
  4. 如何使用gnvm自动更新Windows10操作系统上的nodejs
  5. SAP云平台cf push命令报错误码44的解决方法
  6. CRM Web Client UI异步搜索介绍
  7. free text search - enterprise search
  8. 使用ST05分析IBASE search identical select
  9. BP: 通过SAP name拿到central person id
  10. 如何把新建的UI component添加到新的workcenter里