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

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

3天内不再提示

Adafruit NeoPixel的使用指南

454398 来源:网络整理 作者:网络整理 2019-11-28 09:40 次阅读

NeoPixels的魔力

将大量LED集成到一个电子项目中曾经是一个毛茸茸的前景,一个名副其实的老鼠的电线和代码巢。专用LED驱动芯片的到来带来了可喜的缓解,减轻了微控制器的繁琐工作,使人们可以专注于应用。更简单,但仍然不是“圣诞灯”简单。

WS2812 集成光源-或以Adafruit的说法 NeoPixel 就是寻求简单,可扩展且价格合理的全色LED的最新进展。红色,绿色和蓝色LED与驱动器芯片一起集成到通过单线控制的微小表面贴装封装中。它们可以单独使用,链接成更长的字符串或组合成更有趣的形状因数。

Adafruit NeoPixel的使用指南

我们知道您渴望入门……但是,如果这是您第一次使用NeoPixels,请至少在连接任何内容之前阅读“最佳做法”页面!

关于NeoPixels的重要重要事项

并非所有可寻址的LED都是NeoPixels。“ NeoPixel”是Adafruit的品牌,基于 WS2812 , WS2811 和 SK6812 LED/驱动器,可分别寻址RGB彩色像素和条,使用单线控制协议。我们提供的其他LED产品-DotStars,WS2801像素,LPD8806和“模拟”灯带-使用不同的方法(并有自己的教程)。 在论坛上寻求技术支持时,如果提到正确的LED类型,则可以更快找到解决方案,即避免将DotStars称为“ NeoPixels”…相似但不同!

NeoPixels!不要只是自己发光他们需要一个微控制器(例如Arduino)和一些程序。我们提供一些示例代码来帮助您入门。要创建自己的效果和动画,您需要一些编程实践。如果这是一种新体验,请遍历一些Arduino入门教程,以体会这种语言。

NeoPixels并不是每个项目的答案。时序要求非常严格,某些开发板(例如Netduino或Raspberry Pi)无法可靠地实现这一目标。这就是为什么我们继续提供其他类型的LED的原因。有些更适合某些情况。

我可以使用NeoPixels进行POV(视力保持)显示吗?

推荐。刷新率相对较低(约400 Hz),快速运动的彩色显示屏可能看起来“有斑点”。尽管如此,它们在固定显示屏(招牌,装饰品,珠宝等)中看起来还是不错的。对于POV使用,DotStar条带看起来要好得多(它们的刷新率约为20KHz)。

光绘怎么样?

绝对!摄影灯绘画使用的动作较慢,这并不会引起人们对刷新率的限制。

链中NeoPixels的数量是否有限制?

NeoPixel链的最大长度没有固有限制,但最终您会遇到各种实践限制:

RAM: NeoPixels需要主机微控制器提供一些RAM;更多像素=更多RAM。每个像素只有几个字节,但是由于大多数微控制器都受到相当有限的资源限制,因此对于大型项目来说,这是一个非常现实的考虑。

功耗:每个NeoPixel都会消耗一点点当前;更多像素=更多功率。电源也有一些上限。

时间:NeoPixels以固定的数据速率处理来自主机微控制器的数据。更多的像素=更多的时间和更低的动画帧速率。

形状因素

NeoPixel产品以成千上万的形式提供。..从单个微小的像素到巨大的矩阵……再加上条,环和介于两者之间的所有东西。

选择一个类别从左侧列中获取针对每种NeoPixel的产品链接以及提示和技巧。

基本连接

首先,假设您已将某种型号的Arduino微控制器连接到计算机的USB端口。稍后我们将详细介绍为NeoPixels供电的细节,但是通常,您通常会使用 5V直流电源(例如,“壁式电源适配器”)或(对于可穿戴项目)使用3.7伏锂聚合物电池。

标识NeoPixel带,像素或其他设备的“输入”端。在某些情况下,会有一个标有“ DIN”或“ DI”(数据输入)的焊盘。其他的箭头将显示数据移动的方向。数据输入可以源自Arduino上的任何数字引脚,但是默认情况下,所有示例代码都为数字引脚6 设置。 NeoPixel屏蔽使用这种方式进行接线。

如果使用带锂聚合物电池的Flora,Feather或其他微控制器板:将带上的+ 5V输入连接到标有VBAT或板上的BAT,从板条到微控制器板上任何GND焊盘的GND,以及DIN至Flora引脚D6的BAT。如果该板没有6号插针,则需要修改示例代码以更改插针号。

对于其他具有独立+ 5V DC电源的Arduino板NeoPixels::将配电板上的+ 5V输入连接至电源的+(正)端子(请勿连接至Arduino),将DIN连接至Arduino的数字引脚6,以及–(减号或板上的GND)必须连接到直流电源上的两者减号(–)端子《《》和Arduino上的GND引脚(通常有多个-任何都可以)。

144个像素条是如此紧密地包装在一起,除了–,+和数据方向箭头外,没有其他标签空间。数据是未标记的填充。

这三个引脚的顺序可能会有所不同在不同的带钢密度和批次之间。始终使用打印在条带上的标签。仔细观察,切勿盲目遵循NeoPixel带状接线图;

将NeoPixels连接到任何LIVE电源或微控制器时,始终连接地面( –)在进行其他任何操作之前。相反,分离时最后断开接地。

使用DC时电源或特别大的电池,我们建议在+和–端子之间添加一个大电容器(1000 µF,6.3V或更高)。这防止了电流的初始涌入损坏像素。有关示例,请参见下一页的照片。

通孔NeoPixels(5mm或8mm),在每个PIXEL的+和–引脚之间添加一个0.1 µF电容器。如果没有此“去耦上限”,则单个像素可能会显示异常。

在微控制器的数据引脚和NeoPixels上的数据输入之间的〜470欧姆电阻可帮助防止数据线上的尖峰损坏第一像素。请在您的micro和NeoPixels之间添加一个!我们的NeoPixel戒指已经在该电阻上

NeoPixels可以直接从Arduino的5V引脚供电吗?

有时。 Arduino可以连续仅向5V引脚提供约500毫安的电流。每个NeoPixel可以在全亮度下吸收高达60毫安的电流。因此,是的,只要仅使用几个像素,就可以跳过单独的直流电源并直接关闭Arduino 的电源。如果颜色和整体亮度较低,则更多。如有疑问,请为像素提供单独的电源。

最佳做法

不当使用会损坏您的NeoPixels。潜水之前,请注意以下事项:

在将NeoPixels连接到任何大型电源(直流“壁式电源”或什至是大电池)之前,请添加一个电容器(如上所示,在+和–端子之间跨接1000 µF,6.3V或更高)。电容器可缓冲由条状电路汲取的电流中的突然变化。

在Arduino数据输出引脚和第一个NeoPixel的输入之间放置一个 300至500欧姆电阻。电阻应位于最靠近NeoPixel的电线末端,而不是微控制器。 某些产品已经集成了该电阻器。..如果不确定,加一个电阻器……倍增无害!

尝试最小化距离在Arduino和第一个像素之间,因此信号清晰。一两米通常是没有问题的。更长的时间会变得不可靠。

避免将NeoPixels连接到带电电路。如果您只是必须,请始终先接地》 ,然后是+ 5V,然后是数据。以相反的顺序断开连接。

如果使用单独的电源为像素供电,请在为微控制器供电之前先给像素供电。

请遵守与任何其他预防措施相同的预防措施。 静电敏感部分;

由5v电源供电的NeoPixels 需要一个5V数据信号。如果使用3.3V微控制器,则必须使用逻辑电平转换器,例如74AHCT125或74HCT245。 (如果要像从LiPoly一样以3.7v为NeoPixels供电,则3.3v数据信号就可以了)

确保连接牢固。鳄鱼夹无法可靠地连接NeoPixel环上的微小焊盘。最好将一根细尾线焊接到环上,然后将鳄鱼夹固定到该环上。

如果您的微控制器和NeoPixel由两个不同的电源供电(例如,每个电源都独立电池),则必须 是两者之间的接地连接。

我们的某些项目并未采取上述预防措施……这些通常是小型电池供电的设备,功率尖峰不是一个大问题。 任何像素很多或电源很大的项目都必须包括电源电容器和数据线电阻。

为NeoPixels供电

将NeoPixels连接到任何带电电源或微控制器时,总是否则,请先接地(–)。相反,分离时最后断开接地。

添加300微控制器数据引脚和第一个NeoPixel上的数据输入之间的500欧姆电阻可帮助防止可能会损坏第一个像素的电压尖峰。请在您的micro和NeoPixels之间添加一个!

NeoPixels通常被描述为“ 5伏设备”,但实际情况要比这稍微细微一点。

有些(不是全部)NeoPixel产品可以在稍高的电压下工作。根据可用空间,成本和最可能的应用,这取决于芯片周围的其他支持组件。 有关每种类型可接受的电压限制的指导,请参见特定的产品说明页面。如有疑问,请以5伏为目标。

始终可接受较低的电压,需要注意的是,LED会稍微变暗。有一个极限值,LED指示灯将无法点亮,或者开始显示错误的颜色。

四个电池中的四个镍氢(NiMH)可充电电池可以类似地用于提供4.8伏的电压。

请确保您 仅 在此配置中使用NiMH电池。四个碱性电池(一次性类型)将总共输出6V电压-对于某些NeoPixels来说太高了,肯定

在将NeoPixel条带连接到任何电源之前,我们强烈建议添加一个大电容器(1000 µ 《+和–端子之间的b》 F,6.3V或更高)。这样可以防止电流的初始涌入损坏像素。

对于许多可穿戴项目,我们建议使用锂聚合物电池。它们可提供3.7伏特的电压-非常适合直接馈入Adafruit Flora等低功率微控制器,但电压足以运行较短的NeoPixels。

三个碱性电池(例如AA电池)可以安装在电池座中,以提供4.5伏的电压。尽管比精美的锂聚合物包装更大,更重,但它们价格便宜且易于获得。

电池供电的LED项目规划在 LED像素和条带 。

适用于大多数非便携式“桌面” op”项目中,理想的5V DC开关电源。这种2安培的小电源非常适合一米左右的NeoPixel带。我们将在稍后解释大型项目。

对台式电源要格外小心。有些电源-甚至是知名的,备受好评的品牌-初次开机时可能会产生较大的电压尖峰,从而立即损坏NeoPixels!

如果使用台式电源,请勿直接连接NeoPixels。首先打开电源,让电压稳定,然后然后连接像素(首先连接GND)。

估算功率要求每个NeoPixel均以最大亮度白色(红色+绿色+蓝色)。不过,在实际使用中,很少会像这样打开所有像素。混合颜色并显示动画时,当前绘制会少得多。不可能在所有情况下都估计一个数字,但是作为经验法则,我们一直使用1/3的电流(每像素20 mA)作为标准,而不会产生不良影响。但是,如果您知道每个像素都需要以最大亮度点亮,请使用60 mA的完整数字。

要估算电源需求,请将像素数乘以20,然后将结果除以1,000,经验法则”(安培)中的电源额定值。如果要在所有情况下都保证绝对的安全裕度,请使用60(而不是20)。例如:

60 NeoPixels×20 mA÷1,000 =最小1.2安培

60 NeoPixels×60 mA÷1,000 =最小3.6安培

功率中“开销”的选择供应完全取决于您。更大尺寸的电源可实现最大的安全性和可靠性,这是我们的建议。大多数电源可以在短时间内短暂地施加一些额外的电流。许多都装有热熔断器,如果工作过度,它们只会关断。因此,从技术上讲,他们可能会工作,但这在电子学上等同于滥用租车。

请记住,60 mA是最差的案例估计!我们已经编写了一个单独的完整教程来控制一切:使用NeoPixels汲取力量。

我估计我需要3.6 Amp电源。我手头有10安培的电源。

只要输出是5伏直流电,这会导致我的NeoPixels爆炸吗?你真金。 LED将仅吸收所需的电流(安培)。因此,额外的安培是可以的-实际上,这可能是好的事情。较大的电源将运行,因为它没有被推到极限。

过大的电压肯定会杀死您的LED。

额外的安培=好。 额外电压=不好。

电池和“安培小时数”如何?

安培小时数是当前时间。可以将2600 mAh(毫安小时)的电池视为一小时连续提供2.6安培,或者连续2小时提供1.3安培,依此类推。实际上,它不是那样线性的;大多数电池在重载下的运行时间会成比例地缩短。另外,大多数电池在一个小时内都不会被放电– 这甚至可能很危险!选择足够大的电池,至少要花费几个小时跑下来。对于您来说,这既安全又对电池的寿命也有好处。

我需要为NeoPixels的很多电源供电,并且没有那么大的电源。我可以使用几个较小的吗?

也许。使用单个电源的好处,下面将讨论大型电源。不过,“非最佳”并不一定意味着“悲观”,我们也不会阻止任何人使用他们拥有的资源。

如果走这条路,关键是要在所有接地销之间板条共同连接,但每个电源的+ 5V只能连接到NeoPixels的一个长度,而不应该全部连接。每个电源都有一点不同-并非精确地是 5伏特-并且可以防止某些电源向后馈电。

巨型电源

Adafruit提供最高10A的5V直流电源。这通常足以满足数百个NeoPixels或更多。对于真正大型安装,您需要将其放在其他地方。

一种可能性是重新使用ATX计算机电源。强大的服务器类型通常可提供高达30安培的电流。需要进行一些细微的修改……围绕Google进行“ ATX电源破解”。请注意,如果12V导轨上没有负载,则ATX 5V导轨可能非常不稳定!

更大(更可怕,更昂贵)的实验室额定电流达数百安培的电源。有时这是建筑规模项目和大型生产所需的。有时我们会寻求帮助。..

请注意,这种规模的项目可能非常危险,而且配电问题与业余规模的项目根本不同。我们很乐意在论坛中为我们的客户提供帮助,他们只是为他们提供产品技术支持,而不是为他们提供全面的工程服务。如果您正在开发此类项目, ,请聘请在大功率,低压系统(例如光伏或大型RV和船只)方面经验丰富的专业电工。这不是伪装。

Distribution Power 电线越长,电阻越大。电阻越大,沿其长度下降的电压就越大。如果电压降得太远,则NeoPixels的颜色可能会受到影响。

请考虑整整4米长的NeoPixels。在条带的一端施加5V电压时,对于最接近该端的那些像素,功率仅穿过几英寸的铜线。但是在带状电缆的最远端,电源横穿了 8米的铜线-在+ 5V线上出4米,在地线上又出4米。由于电压降,最远的像素将变为褐色(蓝色和绿色的LED需要比红色更高的电压)。

专业提示: NeoPixels不在乎它们从何端获得电源。尽管数据仅在一个方向上移动,但电可以双向移动。您可以在头,尾部和 》中间,或者理想情况下将其分发给几个点。为了获得最佳的色彩一致性,请确保任何像素与电源连接之间的距离不超过1米。对于较大的NeoPixel设置,请将功率分配视为一棵树的分支,而不是一条连续的线。

在微小的项目中,电阻也是一个问题!

对于可穿戴电子设备,我们喜欢导电线……它柔软且可以洗手。缺点是它没有太多电流。在这里,几根导电线被组合在一起,以便为一对悬挂器的+和–导体提供更好的容量。

(来自“ Pac Man像素悬挂器”指南。)

从3.3V微控制器驱动5V NeoPixel

越来越多的微控制器以3.3伏而不是5伏的电压运行。这是提高效率的好消息,但可能会带来5V NeoPixels的通信问题。来自微控制器的3.3V信号可能不够“响亮”,无法向更高电压的设备注册。制造商建议最小信号电压为NeoPixel电压的70%。

有两种解决方法:

降低NeoPixel的电压,使其更接近(或相等)到微控制器。这就是为什么我们建议FLORA项目使用LiPo电池的原因:3.7V电压足以运行较短的像素长度,并且微控制器在该电压下也很舒适。

使用逻辑电平转换器来逐步提高电压。

有关在NeoPixels上使用电平转换器的更多信息,请参阅本指南。

软件

NeoPixels始于Arduino,但此后扩展到了其他开发板和语言。

从左栏中选择类别每个编码环境特有的信息。

Python和CircuitPython

将NeoPixel LED与Python或CircuitPython以及Adafruit CircuitPython NeoPIxel模块一起使用很容易。通过该模块,您可以轻松地编写控制LED的Python代码。

借助我们的CircuitPython-for-Python Adafruit_Blinka,您可以将这些LED与任何CircuitPython微控制器板或具有GPIO和Python的计算机一起使用。兼容性库。

CircuitPython微控制器接线

首先,完全按照前一页所示,将一些NeoPixels连接到板上。确认您的连接位于数据输入或 DIN 一侧。插入DATA OUT或DOUT端是一个常见错误!连接带有标签,某些格式带有箭头,指示数据必须流向。

请勿使用微控制器上的USB引脚为多个LED供电!除此之外,您还需要使用外部电源。有关更多信息,请查看本指南的“启用NeoPixels”页面:https://learn.adafruit.com/adafruit-neopixel-uberguide/powering-neopixels

下面是将Feather M0连接到NeoPIxel带的示例:

板载USB 到 LED 5V

板载GND 》连接到 LED接地

D5板到 LED Din

Python计算机接线

由于可以使用数十台 Linux计算机/主板,因此我们将显示Raspberry Pi的接线。对于其他平台,请访问Linux上的CircuitPython指南,以了解您的平台是否受支持。

以下是连接到NeoPixel带的Raspberry Pi:

Pi 5V 至 LED 5V

Pi GND 到 LED GND

Pi GPIO18 要在树莓派上 LED Din

,必须将 NeoPixels连接到GPIO10,GPIO12,GPIO18或GPIO21 才能正常工作!

CircuitPython安装NeoPixel库

您需要在CircuitPython板上安装Adafruit CircuitPython NeoPixellibrary。

首先请确保您正在为板运行最新版本的Adafruit CircuitPython。/p》

接下来,您需要安装必要的库以使用硬件-仔细按照以下步骤从Adafruit的CircuitPython库捆绑包中查找和安装这些库。我们的CircuitPython入门指南上有一个很棒的页面,说明如何安装库捆绑包。

对于诸如Trinket M0或Gemma M0的非表达板,您需要从捆绑包中手动安装必要的库:

neopixel.mpy

adafruit_bus_device

在继续之前,请确保板的lib文件夹或根文件系统具有 neopixel.mpy,和 adafruit_bus_device 文件和文件夹 已复制。/p》

下一步连接到开发板的串行REPL,这样您就可以在CircuitPython上出现》》》 提示。

NeoPixel库的Python安装

您需要安装Adafruit_Blinka库,该库在Python中提供CircuitPython支持。这可能还需要验证您正在运行Python3。由于每个平台都有一些不同,并且Linux经常更改,请访问Linux上的CircuitPython指南,以准备好您的计算机!

一旦完成,请从您的命令行运行以下命令:

sudo pip3 install adafruit-circuitpython-neopixel

如果您的默认Python是版本3,则可能需要运行‘pip’。只要确保您不尝试在Python 2.x上使用CircuitPython,就不支持它!

CircuitPython和Python用法

为演示此库与NeoPixel LED的用法,我们将使用开发板的Python REPL。

要使NeoPixels在Raspberry Pi上运行,您必须以root身份运行代码!需要根访问权限才能访问RPi外围设备。

运行以下代码以导入必要的模块,并初始化带有30个LED的NeoPixel灯条。如果您的NeoPixels连接到其他引脚,别忘了更改引脚,如果数字不同则更改像素数。

下载:文件

复制代码

import board

import neopixel

pixels = neopixel.NeoPixel(board.D5, 30) # Feather wiring!

# pixels = neopixel.NeoPixel(board.D18, 30) # Raspberry Pi wiring! import board

import neopixel

pixels = neopixel.NeoPixel(board.D5, 30) # Feather wiring!

# pixels = neopixel.NeoPixel(board.D18, 30) # Raspberry Pi wiring!

现在,您准备使用以下属性点亮NeoPixel LED:

亮度-LED的整体亮度

填充-为所有像素着色一种给定的颜色。

显示-如果auto_write设置为False,则更新LED颜色。

例如,点亮第一个NeoPixel红色:

下载:文件

复制代码

pixels[0] = (255, 0, 0) pixels[0] = (255, 0, 0)

要点亮所有NeoPixels绿色:

下载:文件

复制代码

pixels.fill((0, 255, 0)) pixels.fill((0, 255, 0))

这就是CircuitPython和NeoPixel LED入门的全部内容!

完整示例代码

下载:项目Zip 或 neopixel_simpletest.py | 在Github上查看

复制代码

import time

import board

import neopixel

# On CircuitPlayground Express, and boards with built in status NeoPixel -》 board.NEOPIXEL

# Otherwise choose an open pin connected to the Data In of the NeoPixel strip, i.e. board.D1

pixel_pin = board.NEOPIXEL

# On a Raspberry pi, use this instead, not all pins are supported

#pixel_pin = board.D18

# The number of NeoPixels

num_pixels = 10

# The order of the pixel colors - RGB or GRB. Some NeoPixels have red and green reversed!

# For RGBW NeoPixels, simply change the ORDER to RGBW or GRBW.

ORDER = neopixel.GRB

pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.2, auto_write=False,

pixel_order=ORDER)

def wheel(pos):

# Input a value 0 to 255 to get a color value.

# The colours are a transition r - g - b - back to r.

if pos 《 0 or pos 》 255:

r = g = b = 0

elif pos 《 85:

r = int(pos * 3)

g = int(255 - pos*3)

b = 0

elif pos 《 170:

pos -= 85

r = int(255 - pos*3)

g = 0

b = int(pos*3)

else:

pos -= 170

r = 0

g = int(pos*3)

b = int(255 - pos*3)

return (r, g, b) if ORDER == neopixel.RGB or ORDER == neopixel.GRB else (r, g, b, 0)

def rainbow_cycle(wait):

for j in range(255):

for i in range(num_pixels):

pixel_index = (i * 256 // num_pixels) + j

pixels[i] = wheel(pixel_index & 255)

pixels.show()

time.sleep(wait)

while True:

# Comment this line out if you have RGBW/GRBW NeoPixels

pixels.fill((255, 0, 0))

# Uncomment this line if you have RGBW/GRBW NeoPixels

# pixels.fill((255, 0, 0, 0))

pixels.show()

time.sleep(1)

# Comment this line out if you have RGBW/GRBW NeoPixels

pixels.fill((0, 255, 0))

# Uncomment this line if you have RGBW/GRBW NeoPixels

# pixels.fill((0, 255, 0, 0))

pixels.show()

time.sleep(1)

# Comment this line out if you have RGBW/GRBW NeoPixels

pixels.fill((0, 0, 255))

# Uncomment this line if you have RGBW/GRBW NeoPixels

# pixels.fill((0, 0, 255, 0))

pixels.show()

time.sleep(1)

rainbow_cycle(0.001) # rainbow cycle with 1ms delay per step

import time

import board

import neopixel

# On CircuitPlayground Express, and boards with built in status NeoPixel -》 board.NEOPIXEL

# Otherwise choose an open pin connected to the Data In of the NeoPixel strip, i.e. board.D1

pixel_pin = board.NEOPIXEL

# On a Raspberry pi, use this instead, not all pins are supported

#pixel_pin = board.D18

# The number of NeoPixels

num_pixels = 10

# The order of the pixel colors - RGB or GRB. Some NeoPixels have red and green reversed!

# For RGBW NeoPixels, simply change the ORDER to RGBW or GRBW.

ORDER = neopixel.GRB

pixels = neopixel.NeoPixel(pixel_pin, num_pixels, brightness=0.2, auto_write=False,

pixel_order=ORDER)

def wheel(pos):

# Input a value 0 to 255 to get a color value.

# The colours are a transition r - g - b - back to r.

if pos 《 0 or pos 》 255:

r = g = b = 0

elif pos 《 85:

r = int(pos * 3)

g = int(255 - pos*3)

b = 0

elif pos 《 170:

pos -= 85

r = int(255 - pos*3)

g = 0

b = int(pos*3)

else:

pos -= 170

r = 0

g = int(pos*3)

b = int(255 - pos*3)

return (r, g, b) if ORDER == neopixel.RGB or ORDER == neopixel.GRB else (r, g, b, 0)

def rainbow_cycle(wait):

for j in range(255):

for i in range(num_pixels):

pixel_index = (i * 256 // num_pixels) + j

pixels[i] = wheel(pixel_index & 255)

pixels.show()

time.sleep(wait)

while True:

# Comment this line out if you have RGBW/GRBW NeoPixels

pixels.fill((255, 0, 0))

# Uncomment this line if you have RGBW/GRBW NeoPixels

# pixels.fill((255, 0, 0, 0))

pixels.show()

time.sleep(1)

# Comment this line out if you have RGBW/GRBW NeoPixels

pixels.fill((0, 255, 0))

# Uncomment this line if you have RGBW/GRBW NeoPixels

# pixels.fill((0, 255, 0, 0))

pixels.show()

time.sleep(1)

# Comment this line out if you have RGBW/GRBW NeoPixels

pixels.fill((0, 0, 255))

# Uncomment this line if you have RGBW/GRBW NeoPixels

# pixels.fill((0, 0, 255, 0))

pixels.show()

time.sleep(1)

rainbow_cycle(0.001) # rainbow cycle with 1ms delay per step

MakeCode

我们有一个单独的指南,说明了Microsoft MakeCode中NeoPixels的使用:

指南链接:具有MakeCode的NeoPixels

许多示例都可以在浏览器中使用Circuit Playground Express及其10个内置NeoPixel LED正常运行。甚至还有一页说明如何将MakeCode与外部条带一起使用。

下载

WS2812数据表(用于某些较旧的项目)

WS2812B数据表(用于某些较旧的项目)

SK6812数据表(自2016年起在我们的所有产品栏中使用)

NeoPixel 12-LED环

GitHub上的EagleCAD PCB文件

Adafruit Fritzing库中的Fritzing对象

NeoPixel 16-LED环

GitHub上的EagleCAD PCB文件

Adafruit Fritzing库中的Fritzing对象

NeoPixel 24-LED环形

GitHub上的EagleCAD PCB文件

Adafruit Fritzing库中的装饰对象

NeoPixel 1/4 60-LED环形

GitHub上的EagleCAD PCB文件

Adafruit Fritzing库中的Fritzing对象

NeoPixel宝石

GitHub上的EagleCAD PCB文件

Adafruit Fritzing库中的Fritzing对象

适合面包板的NeoPixel Breakout

GitHub上的EagleCAD PCB文件

Adafruit Fritzing库中的Fritzing对象

NeoPixel NeoMatrix 8x8

GitHub上的

EagleCAD PCB文件

Adafruit Fritzing库中的Fritzing对象

NeoPixel Arduino Shield

GitHub上的EagleCAD PCB文件

Adafruit Fritzing库中的Fritzing对象

NeoPixel 8 Stick

GitHub上的EagleCAD PCB文件

Adafruit Fritzing库中的Fritzing对象

NeoPixel灯带和钢绞线

NeoPixel最受欢迎的类型是这些柔性LED灯带……它们可以切割成一定长度,并适合各种用途东西。我们已经提供了十二个品种!需要注意的两个重要事项:

尽管这些条被描述为“柔性的”,但它们不容许连续和反复弯曲。” “可成型”可能是一个更好的词。典型的应用程序是体系结构,可以将它们围绕圆柱弯曲然后保持原样。反复弯曲(如在服装上)将很快使焊料连接破裂。对于可穿戴设备,可以将较短的部分固定在半刚性的底座上(例如,帽子,BMX装甲等),也可以使用稍后显示的各个 sewable NeoPixels。

观看你的力量。尽管每个像素只需要一点电流,但它加起来很快 。.. NeoPixel条形如此简单易用,可以很快带走!我们将在“为NeoPixels供电”页面上进行详细说明。

RGB NeoPixel条带

NeoPixel数字RGB LED防风雨条有三种不同的“密度”:每米30个,60个和144个LED,在白色或黑色背板上。

每米30个LED,白带

每米30个LED,黑条

每米60个LED,白条

每米60个LED,黑色带

每米144个LED,白色带

每米144个LED ,黑条

T他的峰值峰值功耗(所有LED均以最大亮度点亮)为:

30 LED:9瓦(约1.8安培)

60 LED:18瓦(5伏时约为3.6安)。

144 LED: 43瓦(5伏时为8.6安)。

混合的颜色和较低的亮度设置将按比例减少功耗。

对于使用Circuit Playground Express或仅需要“ 无需焊接”的用户选项(与大多数教室一样),我们有一个特殊的半米30-LED NeoPixel灯条,上面装有鳄鱼夹。简单!

迷你紧身RGB NeoPixel条纹

Mini Skinny NeoPixel条带大约是经典NeoPixel条带宽度的一半。它们有两种密度和底色可供选择:

每米30个LED,白色条带

每米30个LED,黑条

每米60个LED,白条

每米60个LED,黑条

每米144个LED,白条

每米144个LED,黑条

30 60条LED/米条的宽度为7.5毫米,如果从外壳中卸下条,则为5毫米(与经典条的12.5毫米/10毫米相比)。高密度的144/m胶条大约10毫米宽,或者是除去外壳的7.5毫米。

电源要求类似于上述标准宽度的NeoPixel胶条。

侧光NeoPixel条带

/table》

RGBW NeoPixel条

《表class =“ build-table”》

侧光 NeoPixel带具有照亮 next 而不是 over 。它们的亮度不及常规NeoPixels,但在狭窄的空间或边缘发光的丙烯酸树脂中可能会有有趣的用途。这些灯条在黑色柔性条上以三种密度提供:

60个LED,1米长的黑色灯条

90个LED, 1米长的黑条

120个LED,1米长的黑条

最近添加的是 RGB W NeoPixel条。这些增加了第四个LED元素-纯白色-比红色+绿色+蓝色混合的白色更“真实”和令人赏心悦目。像RGB灯带一样,它们具有不同的像素密度和底衬颜色。

每米30条RGBW LED,白带

《每米每米30个RGBW LED,强光

米,每米60个RGBW LED,白光

每米60个RGBW LED米,黑条

每米144个RGBW LED,白条

每米144个RGBW LED,黑条

每个像素有第四个LED,这些条带可能比其RGB等效条带多消耗33%的电流。最大亮度最大的情况是(大约):

30个RGBW LED:12瓦(5伏时为2.4安)

60 RGBW LED:24瓦(5伏时为4.8安培)

144 RGBW LED:57瓦(5伏时为11.5安培)

宽度与“经典” NeoPixel条带相同……这些尺寸不是“皮包骨头”的尺寸。

“ Neon-Like” NeoPixel Flex Strip

这种独特的NeoPixel柔性条带厚实的硅胶外壳,具有类似 neon-like 的扩散外观。

此条带在仪表上包含 60个LED,但每像素3个LED。因此,基本上,在您的NeoPixel程序中,这看起来像一串20像素长的线。

与NeoPixel带的其他品种不同,该线需要从9伏(最低)到12伏(理想)的功率DC。

带有硅胶管的NeoPixel RGB霓虹灯状LED软灯条-1米

紫外线NeoPixel条

单色 NeoPixel条带的 ultraviolet 变体可用于特殊应用,目前具有一种像素密度和底色:

每米32个UV LED,白色剥离

与紫外线反应性涂料,荧光激光切割丙烯酸等组合使用时,可以提供不同寻常的效果。

通常的NeoPixel R,G和B频道转换为三个单独的紫外线二极管。因此,我们建议您几乎将三个通道都设置为相同的值,范围从(0,0,0)到(255,255,255)。

与“经典” NeoPixel条带的宽度相同,并且在全亮度下的功耗仅略高于RGB 30/m:约9.6W/米(1.9A @ 5V)。

NeoPixel钢绞线

像NeoPixel条一样,这些“ 钢绞线” 灵活,并且可以被包裹在东西周围。像素之间的距离更远(2或4英寸),每个像素被密封在自己的小塑料盒中,使其具有防风雨(但不适合连续浸没)。一串中有 20个像素。

NeoPixel钢绞线— 20 LED 4“间距

NeoPixel钢绞线— 2“间距处的20个LED

关于NeoPixel条的详细信息

144 像素/米NeoPixel条和 32 /m紫外线条的销售长度为一米。每个仪表都是带有末端连接器的单独条。在144个像素/m RGB,RGBW或32/m UV中,不提供更长的连续长度。

30 和 60 像素/米NeoPixel条带以一米 倍数销售。多米的订单将是单个连续条带,最高限额:对于60像素/米带,为4米;对于30像素/米,带为5米。

对于 30 和 60 像素/米带,如果购买《如果该钢带少于完整的卷轴(分别为4米或5米),则该钢带可能会或可能不会在一端或两端焊接了3针JST插头。这些插头用于工厂测试,并且可能位于任一端 –插头并不总是指示输入端!打印在条形上的箭头显示了实际的数据方向。您可能需要焊接自己的电线或插头。

将弯曲带封闭在防风雨的硅胶套中,以防雨淋和飞溅,但是不建议用于连续浸没。早期的144像素/米条带不是防风雨的,但是当前的库存现在提供了此功能。

可以切割和移除硅胶套,以实现更薄的外形,但这会损害条带的耐候性。

极少的胶粘剂会粘附在耐候性硅胶套上。使用拉链扎带进行“机械”粘合通常更快,更容易。我们发现的唯一可靠的胶水是Permatex 66B透明RTV硅树脂(并非所有的硅胶都可以使用!)和乐泰塑料粘合系统(一种由2组分组成的氰基丙烯酸酯胶)。客户还报告了 Permatex超灰色硅胶垫片制造商的出色结果。

但是, 不要使用Permatex 66B硅树脂密封切割条的开口端!像许多RTVsilicones一样,66B在固化时会释放出乙酸,这会破坏电子器件。在条带的外部上很好,但在条带的内部则没问题。使用 GE Silicone II 密封条带末端,或者良好的密封性能

两面地毯胶带,可以轻松抓住硅胶套;类似于便利贴。或者,您也可以尝试在顶部清除管道胶带。

所有LED灯条都是按 1/2米分段制造的然后加入到更长的条中。这些连接处的像素间距通常与其余连接相差2-3毫米。这不是制造错误,而只是物理现实。

某些144像素带状发光二极管在LED之间没有焊盘。如果将它们切成较短的部分,则连接它们的唯一方法(半米部分除外)是小心地直接焊接到LED。缺口的一角是GND引脚。

NeoPixel条仅仅是个开始……我们已经有了形状!圆环,网格,盾牌等等……

NeoPixel环

NeoPixel环是装饰有NeoPixel LED的圆形刚性印刷电路板。最初是为我们的 NeoPixel护目镜套件设计的,事实证明它们在其他项目中非常受欢迎……时计,GPS寻路器,珠宝等……现在我们提供了几种尺寸和品种……

而不是列出了无数个不同的链接,我们只有一个登录页面,可以在所有不同的NeoPixel戒指产品中进行选择:

NeoPixel戒指产品选择器

NeoPixel戒指有 12 , 16 , 24 和 60 像素品种。

60 像素环实际上作为 15 像素季度。要获得整圈,您需要购买 4 和焊料他们在一起。否则,您可能会发现个人弧的创意

像素数外径内径

1237毫米/1.5 “23毫米/1”

1644.5毫米/1.75英寸31.75毫米/1.25英寸

2466毫米/2.6英寸52.5毫米/2.05英寸

60(4个15像素弧)158 mm/6.2“145毫米/5.7英寸

所有环的厚度约为3.6毫米/0.15英寸(1.6毫米)对于PCB,对于NeoPixels,为2毫米)。

RGB NeoPixels最便宜,可以产生数百万的颜色组合。

RGBW NeoPixels除了提供RGB之外,还提供了令人赏心悦目的“真实”白色 。有三种不同的色温可供选择:

酷白:大约 6000 开尔文(K)。

中性:约 4500K 。

暖白:约。 3000K 。

RGBW像素包含一个半透明的扩散器层,以帮助混合和柔化光输出。这使它们看起来强度不如RGB像素(“水透明”)强,但是里面的LED确实相同。

关于NeoPixel环的细部细节

将电线焊接到这些环时,您需要格外警惕焊料斑点和短路。组件之间的间距非常紧密! 从正面插入导线并在背面焊接通常是最容易的。

如果使用鳄鱼夹,我们建议先将短跨接线焊接到环输入并连接夹子出于类似的原因。(我们的一些教程和产品照片的确显示了直接与环相连的鳄鱼夹,但我们在使用它们上有很多经验。)

还有为微粒(以前称为Spark) Photon 开发板专门设计的 24像素RGB 环。

这不是像其他“透明”一样–中心的空间为光子板提供了一个插槽。

NeoPixel矩阵

NeoPixel矩阵是NeoPixels的二维网格,均由单个微控制器引脚控制。

刚性8x8 NeoPixel矩阵

与NeoPixel环一样,这64个像素的矩阵也组装在刚性印刷电路板上,并提供 RGB 和 RGBW 两种版本。

NeoPixel Matrix产品选择器

所有尺寸均为71毫米(2.8英寸)正方形,厚约3.6毫米。有多个安装孔,并且DOUT引脚允许串联连接多个矩阵。

RGB NeoPixels最便宜,可以产生百万种颜色组合。

RGBW NeoPixels除了提供RGB之外,还提供了令人赏心悦目的“真实”白色。有三种不同的色温可供选择:

冷白:大约 6000 开尔文(K)。

中性:约 4500K 。

暖白:约 3000K 。

RGBW像素包含一个半透明的漫反射器层,以帮助混合和柔化光输出。这使它们看起来强度不如RGB像素(“水透明”)强,但是里面的LED确实相同。

灵活的NeoPixel矩阵

灵活的NeoPixel矩阵有三种不同的大小:

8x8 RGB像素

16x16 RGB像素

8x32 RGB像素

大小尺寸LED总数 最大功耗(大约)

8x880mm/3.15 “方形6419瓦(5伏时为3.8安培)

16x16160 mm/6.3“正方形25677瓦(5伏时为15安培)

8x32320毫米x 80毫米/12.6“ x 3” 25677瓦(5伏时为15安)

Flex矩阵的厚度约为2毫米(0.08英寸)。

不过这些矩阵称为“柔性”,这些矩阵不能承受连续和反复的弯曲。“可成形”可能是一个更好的词-它们可以围绕诸如帽子之类的刚性或半刚性形状弯曲。反复弯曲(如在服装上)将很快使焊料连接破裂。 (产品页面上的视频仅强调这些矩阵的灵活性,但这确实是“不要在家中尝试”的东西。)

Flex矩阵仅适用于 RGB像素; 不提供RGBW。

关于NeoPixel矩阵的详细信息

如NeoPixel Strips页面上所述,在使用NeoPixel矩阵时请牢记功耗。

i》

如果需要此处未提供的大小或形状的NeoPixel矩阵,则可以使用部分创建自己的 NeoPixel带!

NeoPixel矩阵不强制执行任何特定的“拓扑”-一些像素行可能是从左到右排列的像素行,其他像素行可能是交替排列的-从右到右和从右到左的行,也可以将它们安装在垂直列中。 这将需要对您的代码进行一些计划。我们的 NeoMatrix 库支持大多数矩阵拓扑。

我们在NeoPixel Shields页面上还有一些特殊用途的矩阵!

NeoPixel Shields

尽管并不是严格意义上的Arduino的所有“ Shields”,但仍有一些NeoPixel产品被设计为直接安装在某些微控制器板上(或下面)。

适用于Arduino的NeoPixel Shield

用于Arduino的5x8 NeoPixel Shield 恰好适合放在顶部一个Arduino Uno或兼容板(推荐5V逻辑)。与我们的许多NeoPixel产品一样,它们提供 RGB 和各种 RGBW 像素类型:

NeoPixel Shield产品选择器 》

默认情况下,LED由Arduino的5V引脚供电。只要您不要以全亮度点亮所有像素就可以了。通过焊接随附的端子块或使用外部电源为屏蔽供电。

NeoPixel在数字引脚6 上进行控制,但是通过一些灵巧的接线,您可以将其更改为任何引脚。

NeoPixel FeatherWing

很可能是可爱小东西历史上最可爱的东西, NeoPixel FeatherWing 是4x8像素矩阵,可以完美地 容纳在我们的 Feather 微控制器板上。

NeoPixels通常是由数字6针控制的,但是底部的焊盘使它可以重新分配。特别是,必须移动 Feather Huzzah ESP8266的默认引脚,尝试使用引脚#15!

NeoPixel Featherwing仅 RGB ;没有RGBW版本。

Pimoroni独角兽帽子

Pimoroni独角兽帽子以神话中的动物恰当地命名-通常我们会说NeoPixels不能与Raspberry Pi一起使用,但是Pimoroni可以使用制作一些神奇的软件,使这种结合成为可能!这是一个8x8 RGB矩阵,可以恰好适合Raspberry Pi Model A +,B +或Pi 2。

由于Unicorn HAT的工作方式,您无法在其旁边使用Pi的模拟音频。如果您看到奇怪的随机颜色模式和闪烁,请确保已禁用模拟音频。

Particle/Spark NeoPixel环形套件

以前在“环”页面上提到过,但后代:此 24像素RGB ring是专门为“粒子”(以前称为Spark) Photon 开发板设计的。

其他NeoPixel形状

NeoPixel Stick

最简单的事情……沿着刚性电路板排成一行的 8 NeoPixels 。像我们的戒指和矩阵一样,这些是棒图的指示器!

NeoPixel棒有 RGB 和 RGBW 品种。

NeoPixel棒产品选择器

所有尺寸均为51.1 x 10.2毫米(2.0 x 0.4英寸)。

NeoPixel珠宝

当您需要比单个NeoPixel所能提供的更多的“打孔”时,这些 7像素珠宝可提供大量照明紧凑的形状。再次提供 RGB 和 RGBW 品种。

NeoPixel珠宝产品选择器

直径均为23毫米(0.9英寸)。

1/4 60 NeoPixel戒指

尽管最初设计为四人一组以完成 60 NeoPixel环,但单个 15像素四分之一环 也可以用于解决有趣的设计问题! RGB 和 RGBW 可用。

NeoPixel环形产品选择器

Side Light NeoPixel LED PCB Bar strong》

A 半米刚性PCB ,紧密包装有 60 侧光NeoPixels。这是一种奇怪的动物,但可能只是紧凑的轻型绘画项目或边缘照明的标牌所用。您会怎么做?

侧灯NeoPixel LED PCB条-60个LED-120个LED/米-500mm长

单个NeoPixels

如果您只需要少量像素……或者如果现成的形状和条带不能完全满足您的需求……单个NeoPixels 提供对放置和数量的最大控制。

集成的NeoPixel产品

某些单独的NeoPixel产品已准备好使用,带有一块装有LED的小型PCB,一个用于电源的去耦电容器,以及用于

Flora RGB Smart NeoPixels

原始的Adafruit NeoPixel尺寸! Flora RGB Smart NeoPixels 专为使用导电线的可穿戴项目而设计,但也可以与电线正常焊接。这些有两种格式:

一包4 ,可以按原样使用。

20张纸 strong》,在需要时将它们剪下来并节省一点钱。

Flora RGB智能像素直径约为12.5毫米(0.5英寸)。这些仅是 RGB ;没有RGBW版本。

适合面包板的RGBSmartNeoPixels

这些类似于可缝制的Flora NeoPixels,但带有一个引脚排列(加上接头)可整齐地插入面包板中以进行原型制作。还提供两种格式:

一包4 ,可以按原样使用。

25张纸 》,根据需要切断。

对于这两种类型,标头都是可选的,不包含。

适合面包板的NeoPixels尺寸为10.2 x 12.7毫米(0.4 x 0.5英寸),并且仅 RGB ;没有RGBW版本。

NeoPixel迷你PCB

NeoPixel Mini PCB -以每包5包-是最小的即用型NeoPixel格式。

这些没有安装孔或焊接通孔…导线必须直接焊接到PCB背面的焊盘上。

每个直径约为10毫米(0.3英寸)。这些仅是 RGB ;没有RGBW版本。

离散NeoPixel产品

对于需要完全定制设计的高级用户,可以使用离散NeoPixel 组件。您需要提供自己的PCB和(取决于像素类型)表面贴装焊接技能。

我们强烈建议 ,每个NeoPixel都有一个随附的附件。 + V和地之间的电容为0.1μF。这样可以防止由于像素驱动器逻辑不足而导致的通信问题。偶尔在成对的像素之间插入一个 个电容器 足够了;我们的某些NeoPixel戒指可以这样工作。

穿透式NeoPixels

离散通孔NeoPixels 有两种尺寸:

8mm Diffused (5包)

5mm Diffused –每包5张。

5mm透明已经停产,但是如果您需要引脚说明,产品页面仍然可用。

通孔NeoPixels仅 RGB ;没有RGBW版本。强烈建议在每个像素的+和地面之间使用0.1μF电容。

SMT NeoPixels

表面贴装“ 5050”(5毫米方形)NeoPixels是可用的品种很多:

5050 RGB LED – 10件装。

RGBW NeoPixel –冷白色–白色外壳-每包10个。

RGBW NeoPixel –中性白–白色案例 –每包10个。

RGBW NeoPixel –暖白–白色案例-每包10张。

RGBW NeoPixel –冷白–黑盒 –每包10张。

RGBW Ne oPixel – NeutralWhite–黑盒 – 10件装。

RGBW NeoPixel – WarmWhite–黑盒 – 10件装。

NeoPixel –冷白(3倍白,无RGB)–每包10张。

NeoPixel –暖白(3倍白,无RGB)–每包10张。/li》

全部为5毫米见方。建议为每个像素在+和地面之间添加一个 0.1 F电容。

白色和黑色外壳的像素在功能上是相同的;这纯粹是您设计的美学选择。

“冷白”的尺寸约为6000开尔文。 “中性白”约为4500K。 “暖白色”约为3000K。

微型表面贴装“ 3535 ”(3.5毫米见方)NeoPixels有两种 RGB 版本;没有RGBW。

NeoPixel Mini 3535 RGB –白色外壳 – 10件装。

NeoPixel Mini 3535 RGB –黑色案例 –建议装10包。

去耦电容器。与“ 5050” NeoPixels一样,白色和黑色外壳版本在功能上相同,这是一种美学设计选项。

WS2811驱动程序集成电路

NeoPixel驱动器逻辑可从LED单独获得,允许电源用户创建极其定制的设计……也许使用其他LED颜色,或者与功率MOSFET结合使用NeoPixel协议来控制大电流LED或“模拟” RGB LED条。

这些要求电路设计技巧,定制PCB和精细的表面贴装焊接。建议为每个芯片使用0.1 uF的去耦电容。

Arduino库安装

“从头开始”控制NeoPixels是一个挑战,因此我们提供了一个库,让您专注于有趣和有趣的部分。该库可与大多数主流Arduino开发板及其衍生产品一起使用:Uno,Mega,Leonardo,Micro,Adafruit Flora等-多数与8至16 MHz的Atmel AVR 8位处理器一起使用的任何东西-还可与Arduino Due和所有

由于使用了特定于处理器的汇编语言,因此该库在Netduino,ChipKIT或其他高级“类似Arduino的”板上不起作用。其他人可能已经编写了代码以及此类板的库,但我们无法为您可能在此处遇到的任何错误或麻烦提供技术支持;这是一些前沿的工程。其中一些替代库位于“高级编码”部分。

通过库管理器安装Adafruit_NeoPixel

最新版本的Arduino IDE(1.6.2及更高版本)使通过库管理器界面的库安装超级容易。在草图菜单中,》 包括库》 管理库 。..在文本输入框中,键入“ NeoPixel 》”。查找“ Adafruit提供的Adafruit NeoPixel ”,然后通过单击安装按钮旁边的弹出菜单来选择最新版本。然后点击安装按钮。安装完成后,您可以点击“ 关闭”按钮。

手动安装Adafruit_NeoPixel库

如果您使用的是旧版IDE,或者只是想手动设置,则该库的“经典”安装如下:您可以访问Github上的Adafruit_NeoPixel库页面,然后从那里下载,或只需单击此按钮:

为Arduino下载Adafruit_NeoPixel

在完成下载后解压缩ZIP文件。

生成的文件夹应包含文件 Adafruit_NeoPixel.cpp , Adafruit_NeoPixel.h 和“ 示例”子文件夹。有时在Windows中,您会得到一个中级文件夹,并且需要四处移动。

将文件夹(包含.cpp和.h文件)重命名为 Adafruit_NeoPixel (下划线和所有内容),然后将其与其他Arduino库一起放置,通常放置在(主文件夹)/Documents/Arduino/Libraries文件夹中。应该永远不要将库 安装在Arduino应用程序旁边的“ Libraries”文件夹中……将它们放在主文件夹的子目录中。

如果当前是Arduino IDE,请重新启动

这是一个教程,它逐步指导了手动正确安装Arduino库的过程。

一个简单的代码示例:strandtest

启动Arduino IDE。从文件菜单中,选择速写本 → 库 → Adafruit_NeoPixel → strandtest

(如果Adafruit_NeoPixel过渡菜单不存在,则说明库未正确安装,或者安装后需要重新启动IDE。请检查上述安装步骤,以确认其正确命名和位置。)

从工具菜单中选择您的主板类型和串行端口,然后尝试上传到主板。如果NeoPixels如前所述已连接并已供电,您应该会看到一点灯光。

没有任何反应!

检查您的连接。最常见的错误是连接到测试条的输出端而不是输入。

发生了什么,但是LED闪烁着奇怪的声音!

如果您使用的是RGBW NeoPixel产品(看一下LED,它们是否分开了?

更改此行:

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_RGBW + NEO_KHZ800);

并重新上载测试链示例。

我没有RGBW LED且LED仍在闪烁

99%的时间是由于没有共享接地线已连接至Arduino。确保来自Neopixels的地线连接到您的电源地线和 Arduino地线。

Arduino库的使用

有关Adafruit_NeoPixel库的Doxygen生成的文档,请参见此处。

目前假设您已安装Arduino的Adafruit_NeoPixel库并成功运行了strandtest示例草图。如果没有,请返回上一页以获取设置方向的指导。

要了解有关编写自己的NeoPixel草图的信息,请先剖析最粗的草图 。..

所有NeoPixel草图首先包括头文件:

下载:文件

复制代码

#include #include

后面的代码块主要是描述性注释。实际上只有几行代码在做任何工作:

下载:文件

复制代码

// Which pin on the Arduino is connected to the NeoPixels?

// On a Trinket or Gemma we suggest changing this to 1:

#define LED_PIN 6

// How many NeoPixels are attached to the Arduino?

#define LED_COUNT 60

// Declare our NeoPixel strip object:

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

// Argument 1 = Number of pixels in NeoPixel strip

// Argument 2 = Arduino pin number (most are valid)

// Argument 3 = Pixel type flags, add together as needed:

// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)

// NEO_KHZ400 400 KHz (classic ‘v1’ (not v2) FLORA pixels, WS2811 drivers)

// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)

// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)

// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products) // Which pin on the Arduino is connected to the NeoPixels?

// On a Trinket or Gemma we suggest changing this to 1:

#define LED_PIN 6

// How many NeoPixels are attached to the Arduino?

#define LED_COUNT 60

// Declare our NeoPixel strip object:

Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRB + NEO_KHZ800);

// Argument 1 = Number of pixels in NeoPixel strip

// Argument 2 = Arduino pin number (most are valid)

// Argument 3 = Pixel type flags, add together as needed:

// NEO_KHZ800 800 KHz bitstream (most NeoPixel products w/WS2812 LEDs)

// NEO_KHZ400 400 KHz (classic ‘v1’ (not v2) FLORA pixels, WS2811 drivers)

// NEO_GRB Pixels are wired for GRB bitstream (most NeoPixel products)

// NEO_RGB Pixels are wired for RGB bitstream (v1 FLORA pixels, not v2)

// NEO_RGBW Pixels are wired for RGBW bitstream (NeoPixel RGBW products)

前几行将数字分配给符号“ LED_PIN”和“ LED_COUNT”,以供以后参考。 不需要以这种方式完成,但是可以更轻松地更改NeoPixel连接的引脚和长度,而无需深入研究代码。

最后一行声明NeoPixel object。我们稍后将通过名称来引用它以控制像素带。括号中有三个参数或自变量:

试条中连续NeoPixel的数量。在此示例中,将其设置为LED_COUNT(在上面定义为60),等于1米的中密度条带。更改此值以匹配您正在使用的实际编号。

与NeoPixel条(或其他设备)连接的引脚号。通常,这将是一个数字,但我们之前已声明符号 LED_PIN 在此处通过名称进行引用。

一个值,指示所连接的NeoPixel的类型。 在大多数情况下,您可以将其保留,仅传递两个参数; 示例代码仅具有额外的描述性。如果您提供经典的“ V1”植物群像素,则需要 NEO_KHZ400 + NEO_RGB 才能在此处传递。 RGBW NeoPixels在这里也需要一个不同的值:NEO_RGBW。

通孔8mm NeoPixels,在条声明中使用NEO_RGB代替NEO_GRB。对于RGBW LED,请使用NEO_RGBW(某些RGBW灯条使用NEO_GRBW,因此,如果您得到意想不到的结果,请尝试!)

然后在 setup()函数,调用 begin()为NeoPixel输出准备数据引脚:

i》下载:文件

复制代码

void setup() {

strip.begin();

strip.show(); // Initialize all pixels to ‘off’

} void setup() {

strip.begin();

strip.show(); // Initialize all pixels to ‘off’

}

第二行, strip.show(),不是绝对必要的,只是要彻底。该功能将数据推送到像素…由于尚未设置颜色,因此如果某些颜色被先前的程序照亮,则它将所有NeoPixels初始化为初始“关闭”状态。

Adafruit Trinket 5V 16 MHz板需要一些额外的设置。您可以在“ strandtest”示例草图中看到所需的步骤。

在strandtest示例中, loop()并不自行设置任何像素颜色-它调用创建动画效果的其他功能。因此,让我们暂时忽略它,并在各个功能内进行展望,看看如何控制条带。

有两种不同的方法可以设置像素的颜色。第一个是:

下载:文件

复制代码

strip.setPixelColor(n, red, green, blue); strip.setPixelColor(n, red, green, blue);

,或者,如果您使用的是RGBW灯条:

下载:文件

复制代码

strip.setPixelColor(n, red, green, blue, white); strip.setPixelColor(n, red, green, blue, white);

第一个参数—在本示例中为n —是条带上的像素数,从最接近Arduino的0开始。如果您有30像素的小条,则它们的编号为0到29。这是计算机的事情。您将使用for循环在代码中看到多个位置,将循环计数器变量作为像素数传递给此函数,以设置多个像素的值。

接下来的三个参数是像素颜色,表示为红色,绿色和蓝色亮度级别,其中0是最暗(关闭),而255是最大亮度。最后一个 optional 参数用于白色,仅在创建时将条定义为RGBW类型且该条实际上是RGBW类型时才使用。

要将第12个像素(#11,从0开始计数)设置为品红色(红色+蓝色),您可以编写:

下载:文件

复制代码

strip.setPixelColor(11, 255, 0, 255); strip.setPixelColor(11, 255, 0, 255);

设置第8个像素(#7从0开始计数)到半亮度白色(带有RGBW条纹),没有红色/绿色/蓝色的光线,请使用:

下载:文件

复制代码

strip.setPixelColor(7, 0, 0, 0, 127); strip.setPixelColor(7, 0, 0, 0, 127);

两个参数:

下载:文件

复制代码

strip.setPixelColor(n, color); strip.setPixelColor(n, color);

在这里,颜色是一种32位类型,将红色,绿色和蓝色值合并为一个数字。对于某些(但不是全部)程序而言,这有时更容易或更快速;您会看到strandtest代码在不同的地方使用了两种语法。

您还可以将单独的红色,绿色和蓝色值转换为单个32位类型以供以后使用:

下载:文件

复制代码

uint32_t magenta = strip.Color(255, 0, 255); uint32_t magenta = strip.Color(255, 0, 255);

然后,您可以仅将“洋红色”作为参数传递给setPixelColor,而不是每次都使用单独的红色,绿色和蓝色数字。

您还可以(可选)在以下位置向颜色添加白色成分最后,像这样:

下载:文件

复制代码

uint32_t greenishwhite = strip.Color(0, 64, 0, 64); uint32_t greenishwhite = strip.Color(0, 64, 0, 64);

setPixelColor()不会立即影响LED。要将颜色数据“推送”到测试条,请调用 show():

下载:文件

复制代码

strip.show(); strip.show();

,这会立即更新整个条带,并尽管采取了额外的步骤实际上是一件好事。如果每次对 setPixelColor()的调用都立即生效,则动画将显得跳动而不是黄油般平滑。

可以将多个像素设置为相同的颜色使用fill()函数,该函数接受一到三个参数。通常这样称呼:

下载:文件

复制代码

strip.fill(color, first, count); strip.fill(color, first, count);

“颜色”是打包的32位RGB(或RGBW)颜色值,可能由strip.Color()返回。这里没有单独的红色,绿色和蓝色选项,因此请调用Color()函数将它们打包为一个值。

“第一个”是要填充的第一个像素的索引,其中0是条中的第一个像素,strip.numPixels()-1是最后一个像素。必须为正值或0。

“计数”是要填充的像素数。必须为正值。

如果不带 count 参数(仅颜色和第一个)调用,则从 first 到条带末尾

如果不带 first 或 count 参数(仅颜色)调用,则整个条带将设置为所需的颜色。

如果使用 no 参数调用,则条带将被填充为黑色或“ off”,但是还有另一种语法可能更易于阅读:

下载:文件

复制代码

strip.clear(); strip.clear();

您可以使用 getPixelColor()查询预先设置的像素的颜色:

下载:文件

复制代码

uint32_t color = strip.getPixelColor(11); uint32_t color = strip.getPixelColor(11);

这将返回32位合并的RGB颜色值。即使使用了“ ColorHSV()”函数(如下所述),这也是始终为RGB 。

先前声明的条中的像素数可以使用 numPixels()进行查询:

下载:文件

复制代码

uint16_t n = strip.numPixels(); uint16_t n = strip.numPixels();

可以使用 setBrightness()调整所有LED的整体亮度。这只需要一个参数,范围在 0 (关闭)到 255 (最大亮度)之间。例如,要将条带设置为1/4亮度:

下载:文件

复制代码

strip.setBrightness(64); strip.setBrightness(64);

就像setPixel()一样,这没有立竿见影的效果。您需要

setBrightness()旨在在setup()中一次被称为 ,以限制当前整个素描过程中,LED的亮度/亮度。它本身不是 动画效果!此功能的操作是“有损的”-它修改RAM中的当前像素数据,而不是show()调用中的-以满足NeoPixels严格的时序要求。通过将亮度设置保持为默认最大值,在您自己的草图逻辑中调制像素亮度并使用setPixel()重绘整个条带,可以更好地实现某些动画效果。

HSV(色相饱和度值)颜色……

NeoPixel库在其中支持某些颜色“ HSV”(色相饱和度值)色彩空间。与通常的RGB(红-绿-蓝)不同,这是一种指定颜色的方式。有些人觉得思考起来更容易或更“自然”……或者,对于某些色彩效果(流行的彩虹周期等),它往往更容易。

在NeoPixel库中, 色相 表示为 16位数字。从红色开始,从0开始,依次递增为黄色(大约65536/6,或10922取一点),然后依次通过绿色,青色(在32768的中点),蓝色,洋红色并返回红色。在您自己的代码中,您可以允许任何与色相相关的变量 overflow 或 underflow ,它们将“环绕”并做正确且可预期的事情,这非常好。

饱和度 确定颜色的强度或纯度…这是一个 8位的数字,范围为0(无饱和度,仅灰度)到255(最大饱和度,纯色)。在中间,您将开始获得柔和的色调。

值 确定颜色的亮度……它也是 8位,范围从0(黑色,不考虑色相或饱和度)到255(最大亮度)。

尽管

setPixelColor()和fill()仍然仍然需要 RGB 值,所以我们可以通过使用ColorHSV()函数从HSV 转换这些值:

下载:文件

复制代码

uint32_t rgbcolor = strip.ColorHSV(hue, saturation, value); uint32_t rgbcolor = strip.ColorHSV(hue, saturation, value);

如果只需要“纯色”(完全饱和和全亮度),则可以省略后两个参数:

下载:文件

复制代码

uint32_t rgbcolor = strip.ColorHSV(hue); uint32_t rgbcolor = strip.ColorHSV(hue);

在两种情况下,都可以将所得的RGB值传递给像素设置功能,例如:

下载:文件

复制代码

strip.fill(rgbcolor); strip.fill(rgbcolor);

没有否相应的功能,从RGB到HSV。这是有目的的并且是有意设计的,因为在该方向上的转换通常是模棱两可的-给定输入可能有多种有效的可能性。如果您查看一些示例草图,您会发现它们跟踪自己的色调…他们不为像素分配颜色,然后尝试将其读回

…和伽玛校正

在进行更细微的颜色变化时,您可能会发现有些东西可能看起来太亮或褪色。通常,对于简单的原色和中间色来说,这不是问题,但对于混合,过渡,以及您可以从ColorHSV()函数获得的各种柔和颜色。 数值颜色值是正确的,但在感知上我们的眼睛对此有所不同,如本指南中所述。

gamma32()函数需要打包的RGB值(可能会脱离Color()或ColorHSV())并过滤结果以使其在感知上更正确。

下载:文件

复制代码

uint32_t rgbcolor = strip.gamma32(strip.ColorHSV(hue, sat, val)); uint32_t rgbcolor = strip.gamma32(strip.ColorHSV(hue, sat, val));

设置像素颜色之前,我们绝不使用strandtest和其他示例草图,我们绝不使用ColorHSV() 将结果通过gamma32()传递。

但是,由于某些原因(包括高级程序员),gamma32操作不是在ColorHSV()中内置的(必须被称为单独的操作)。可能想提供自己设计的更具体的色彩校正功能(gamma32()是“一种尺寸最适合”近似值),或者可能需要保持原始的“在数字上但在视觉上不是正确的”数字。

没有相应的反向操作。当您将像素设置为通过gamma32()过滤的颜色时,回读像素值会产生过滤后的颜色,不是原始RGB值。正是由于这种抽取,高级NeoPixel程序经常将像素缓冲区视为只写资源…它们会根据自己的程序状态生成每个完整的动画帧,而 not 作为一系列读写修改操作。

帮助!

我正在调用setPixel(),但是什么也没发生!

主要有两个原因:

忘记在 setup()中调用 strip.begin() 。

忘记设置像素颜色后调用 strip.show()。

另一种(较不常见)的可能性即将耗尽RAM —请参阅下面的最后一节。如果程序各种各样的可以工作,但是结果无法预测,请考虑一下。

我可以在不同的引脚上有多个NeoPixel对象吗?

当然!每个文件都需要有自己的唯一名称声明:

下载:文件

复制代码

Adafruit_NeoPixel strip_a = Adafruit_NeoPixel(16, 5);

Adafruit_NeoPixel strip_b = Adafruit_NeoPixel(16, 6); Adafruit_NeoPixel strip_a = Adafruit_NeoPixel(16, 5);

Adafruit_NeoPixel strip_b = Adafruit_NeoPixel(16, 6);

上面声明了两个不同的NeoPixel对象,每个对象分别位于引脚5和6上,每个对象包含16个像素,并使用隐式默认类型( NEO_KHZ800 + NEO_GRB )。

我可以将多个NeoPixel带连接到同一Arduino引脚吗?

在很多情况下,是的。然后,所有小条将显示完全相同的内容。尽管这样做只能起到一定的作用……单个引脚上的四个带是一个很好且可靠的数字。如果您还需要更多,则可以将单个NeoPixels用作缓冲区以“扇出”更多条带:将一个Arduino引脚连接到四个单独NeoPixel的输入,然后将每个像素的输出连接到四个条带的输入(或更少) ,如果您不需要那么多)。如果条带长为10像素,则将NeoPixel对象声明为具有11像素。多余的“缓冲区”像素将在位置0处-只需将其关闭即可-然后,条带将从位置1到10开始运行。

我是颜色错误。红色和蓝色被交换!

使用通孔8mm NeoPixels(或V1 Flora像素)时),将NEO_RGB用作Adafruit_NeoPixel声明中的第三个参数。对于所有其他类型的NeoPixels,请使用NEO_GRB。

当我重复使用setBrightness()时,颜色会散开!

请参见上面的注释; setBrightness()被设计为一次性设置功能,而不是动画效果。

另请参见“高级编码”页面-还有一个替代库,其中包括“无损”亮度调节以及其他功能! p》

Pixels Gobble RAM :每个NeoPixel大约需要3个字节的RAM。这听起来似乎不是很多,但是当您开始使用数十个甚至数百个像素时,考虑到主流Arduino Uno只有2 KB的RAM(在其他库提出主张后,其内存通常要少得多),这可能是一个错误。真正的问题!

要使用大量的LED,您可能需要升级到更强大的电路板,例如Arduino Mega或Due。但是,如果您靠近并且只需要一点额外的空间,则有时可以调整代码以提高RAM效率。本教程对内存使用情况有一些提示。

NeoMatrix库

Adafruit_NeoMatrix库基于Adafruit_NeoPixel创建,以使用NeoPixels创建二维图形显示。然后,您可以轻松绘制形状,文本和动画,而不必计算每个X/Y像素位置。商店提供小型NeoPixel矩阵。如上图所示,可以使用NeoPixel条带的部分来形成更大的显示器。

除了Adafruit_NeoPixel库(已在先前步骤中下载并安装)之外,NeoMatrix还需要两个库:

Adafruit_NeoMatrix

Adafruit_GFX

如果您以前使用过任何Adafruit LCD或OLED显示器,则可能已经安装了后者的库。

两者的安装之前与Adafruit_NeoPixel相似:解压缩,确保文件夹名称与其中的.cpp和.h文件匹配,然后移至Arduino库文件夹并重新启动IDE。

Arduino草图需要包含这三个标头只是为了使用该库:

下载:文件

复制代码

#include

#include

#include #include

#include

#include

布局 Adafruit_NeoMatrix使用完全相同的坐标系,颜色函数和图形mmands作为Adafruit_GFX库。如果您不熟悉后者,则可以通过单独的教程说明其用法。 Adafruit_NeoMatrix库中还包含示例草图。

在这里,我们仅关注构造器-如何声明由NeoPixels制成的二维显示。为野兽供电是另一回事,在上一页中进行了介绍。

该库处理单个矩阵(所有NeoPixel都在一个统一的网格中)和 tiled 矩阵-多个网格组合成一个更大的显示:

让我们从声明单个矩阵开始,因为它比较容易解释。在这种情况下,我们将展示适用于Arduino的NeoPixel Shield-NeoPixels的8x5矩阵。当以可读的方向看这个盾牌时,第一个像素#0位于左上方。每个连续的像素都在一个位置的右边,像素1直接在像素0的右边,依此类推。在每一行的末尾,下一个像素位于下一行的左侧。这不是我们在代码中决定的事情……这是NeoPixels如何在包含屏蔽的电路板上硬接线。

我们将此布局称为 row major 和 progressive。 Row major 表示像素以水平线排列(相反,垂直线为 column major )。 Progressive 表示每一行都沿相同方向前进。一些矩阵会在每行上反转方向,因为这样连接起来会更容易。我们称其为 zigzag 布局。

但是,在此示例中,我们希望沿“竖直”方向使用屏蔽,因此Arduino通过USB电缆位于桌面上顶端。当我们以这种方式打开电路板时,矩阵布局会发生变化……

现在,第一个像素位于右上方。像素从上到下递增-现在是专业栏。列的顺序仍然是渐进式。

我们以此声明矩阵:

下载:文件

复制代码

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(5, 8, 6,

NEO_MATRIX_TOP + NEO_MATRIX_RIGHT +

NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,

NEO_GRB + NEO_KHZ800); Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(5, 8, 6,

NEO_MATRIX_TOP + NEO_MATRIX_RIGHT +

NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE,

NEO_GRB + NEO_KHZ800);

前两个参数-5和8-是宽度和高度矩阵的像素数。第三个参数6是NeoPixels连接到的引脚号。在屏蔽层上,这是硬连线至数字引脚6,但是独立矩阵可以自由使用其他引脚。

下一个论点是有趣的。这表明矩阵中第一个像素的位置以及行或列的排列。第一个像素必须位于四个角之一;通过将 NEO_MATRIX_TOP 或 NEO_MATRIX_BOTTOM 添加到 NEO_MATRIX_LEFT 或 NEO_MATRIX_RIGHT 。通过将 NEO_MATRIX_COLUMNS 或 NEO_MATRIX_ROWS 添加到 NEO_MATRIX_PROGRESSIVE 或 NEO_MATRIX_ZIGZAG 中来指示行/列的排列。这些值都按上述代码添加为一个值。

NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE

最后一个参数与NeoPixel库完全相同,指示使用的LED像素的类型。在大多数使用最新NeoPixel产品的情况下,您可以简单地忽略此参数……示例代码只是具有更多描述性。

此设置的要点是,草图的其余部分无需思考关于矩阵的布局。不管第一个NeoPixel的实际位置如何,绘图图形的坐标(0,0)总是 位于左上角。

Adafruit_GFX仅可处理旋转。尽管它可以处理上面的示例,但是它并没有涵盖某些矩阵布局可能发生的旋转和镜像的所有排列,更不用说之字形功能或此后的其他功能了……

平铺矩阵一个 tiled 矩阵由多个较小的NeoPixel矩阵组成。有时这更易于组装或分配电源。所有子矩阵都必须具有相同的大小,并且必须以可预测的方式进行排序。然后, Adafruit_NeoMatrix()构造函数将接收一些附加参数:

下载:文件

复制代码

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(

matrixWidth, matrixHeight, tilesX, tilesY, pin, matrixType, ledType); Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(

matrixWidth, matrixHeight, tilesX, tilesY, pin, matrixType, ledType);

前两个参数是每个对子矩阵进行平铺,而不对整个显示进行平铺。

接下来的两个参数是水平和垂直方向上的平铺数目。这样,整个显示器的尺寸将始终是子矩阵尺寸的倍数。

第五个参数是引脚号,与之前和NeoPixel库相同。最后一个参数也遵循先前的行为,并且在大多数情况下可以忽略。

倒数第二个参数……这变得很复杂……

对于单个矩阵,有一个起始角,一个主轴(行或列)和行顺序(逐行或之字形)。现在已翻倍-对于单个图块内的像素顺序,和都需要类似的信息,同时和在显示中图块的整体布置。和以前一样,我们添加一个符号列表以产生一个描述显示格式的参数。

NEO_MATRIX _ * 符号的作用与之前的单矩阵情况相同,现在参考整体显示中的各个子矩阵。所有图块必须遵循相同的格式。另一组符号的工作方式类似,然后描述了图块的顺序。

第一个图块必须位于四个角之一。添加 NEO_TILE_TOP 或 NEO_TILE_BOTTOM 和 NEO_TILE_LEFT 或 NEO_TILE_RIGHT 来指示第一个图块的位置。这与图块中第一个像素的位置无关。它们可以是不同的角。

标题可以水平排列或垂直排列。同样,这与图块中的像素顺序无关。添加 NEO_TILE_ROWS 或 NEO_TILE_COLUMNS 。

最后,图块的行或列可以按渐进或Z字形排列;也就是说,每一行或每一列都以相同顺序进行,或者交替的行/列切换方向。添加 NEO_TILE_PROGRESSIVE 或 NEO_TILE_ZIGZAG 来指示顺序。 但…如果选择了 NEO_TILE_ZIGZAG 顺序,则瓷砖的交替线必须旋转180度。这是有意设计的;它使平铺间的布线更加一致和简单。 NEO_TILE_PROGRESSIVE 不需要旋转。

标题不必为正方形!以上只是一种可能的布局。此页面顶部显示的内容是由NeoPixel条带组装而成的三个10x8瓦片。一旦定义了矩阵,项目的其余部分与Adafruit_NeoPixel相似。记住在绘图后使用 setup()函数中的 matrix.begin()和 matrix.show()来更新显示。 setBrightness()函数也可用。该库包含几个示例草图供参考。

其他布局对于其他未均匀平铺的情况,您可以提供自己的功能,以将X/Y坐标重新映射到NeoPixel带索引。此函数应接受两个无符号的16位参数(像素X,Y坐标),并返回一个无符号的16位值(对应的条带索引)。最简单的以行为主的渐进函数可能类似于:

下载:文件

复制代码

uint16_t myRemapFn(uint16_t x, uint16_t y) {

return WIDTH * y + x;

} uint16_t myRemapFn(uint16_t x, uint16_t y) {

return WIDTH * y + x;

}

这是一个粗略的例子。您可能是为以螺旋(易于布线)或希尔伯特曲线排列的像素设计的。

然后使用 setRemapFunction():

启用该功能

下载:文件

复制代码

matrix.setRemapFunction(myRemapFn); matrix.setRemapFunction(myRemapFn);

RAM再次基于像素,Adafruit_NeoMatrix是比Adafruit_NeoPixel需要更多的内存,每个像素需要3字节的RAM。但是二维显示器中的像素数量呈指数增长……16x16显示器需要的内存是8x8显示器的四倍,或者大约768字节的RAM(接近Arduino可用空间的一半) Uno)。它可以从 tricky 到不可能的任何位置,将大型显示器与需要大量内存的库(例如 SD 或 ffft )结合起来。

伽玛校正,因为Adafruit_GFX库是最初是为LCD设计的(色彩保真度有限),它将色彩处理为16位值(而不是NeoPixels可以使用的全部24位)。这似乎不是很大的损失。人类视觉的怪异使得明亮的色彩比昏暗的色彩难以辨认。 Adafruit_NeoMatrix库使用伽玛校正选择视觉上(尽管不是数字上)等距的亮度级别。红色和蓝色共有32个等级,绿色有64个等级。

Color()函数执行必要的转换;您不需要做任何数学运算。它接受8位的红色,绿色和蓝色值,并返回经过伽玛校正的16位颜色,然后可以将其传递给其他绘图函数。

高级编码

FastLED库

如果希望增强NeoPixel的实力,您可以在FastLED库中找到所需的一切。它是Adafruit_NeoPixel库的替代方案,提供了更高级的功能,例如HSV颜色支持,无损亮度设置和高速数学运算。 (它也适用于其他类型的LED,例如DotStars!)

FastLED的工作原理完全不同;

注意:FastLED当前仅适用于 RGB NeoPixels;它不是Adafruit_NeoPixel的直接替代品,现有的草图将需要重写。 尚不支持RGBW像素。 完全。您将获得不正确且不可预测的颜色。

我们不编写或维护FastLED,也无法提供软件故障排除建议。如果需要帮助在论坛中使用FastLED NeoPixel项目时,我们通常会要求您尝试使用一种已知有效的Adafruit_NeoPixel示例草图,以缩小是硬件还是软件问题。

访问FastLED网站上开始。

常见问题解答和进一步的编程见解

帮助!与NeoPixels结合使用时,我的Arduino伺服代码停止工作!

不幸的是,NeoPixel和伺服库不能很好地配合使用;一个依赖于定期禁用中断,另一个绝对需要中断。这里有几个选项:

使用专用的伺服控制板或分线板,将任务从处理器上卸载下来,这样就不会产生中断。

使用一个基于硬件PWM的伺服库,而不是库存的Arduino Servo库。这样可以提供稳定的伺服定时而不会中断,但只能控制非常有限数量的伺服(2-3),并且只能控制非常特定的引脚。

在驾驶NeoPixels时,无法在红外接收器上接收红外代码!

就像伺服一样,红外库使用软件中断来轮询IR LED,而标准NeoPixellibrary在更新NeoPixel时阻止中断。

如果您不经常更新NeoPixel,IR可以在两次更新之间工作,但是如果一直更新,则需要使用另一个库和比UnoorMega更强大的微控制器。理想情况下,它具有DMA,这样NeoPixels不会占用任何CPU周期。

Marc MERLIN会根据您所拥有的芯片(Teensy,ESP8266或ESP32)来说明如何做到这一点:

http://marc.merlins.o rg/perso/arduino/post_2017-04-03_Arduino-328P-Uno-Teensy3_1-ESP8266-ESP32-IR-and-Neopixels.html

可以多快我刷新了(N)个像素的字符串?

NeoPixels接收来自固定频率800 KHz数据流(“ V1” Flora像素除外,后者使用400 KHz)。因此,每个数据位需要1/800,000秒-1.25微秒。一个像素需要24位(红色,绿色,蓝色分别为8位)— 30微秒。发出最后一个像素的数据后,流必须停止至少50微秒,新颜色才能“锁存”。

对于100个像素带,即(100 * 30)+ 50,或3,050微秒。 1,000,000/3,050 =每秒约328次更新。

但是…

仅将推入位所需的时间电线。 实际刷新率将小于此值,并且在所有情况下都无法将其估算为单个数字。处理动画的每个“帧”都需要时间。多少时间取决于数学的复杂性和代码的效率(例如,浮点计算可能相对较慢)。上面的公式给出了最大的理论速率,但这仅仅是一个起点。在某些情况下,现实可能会低于此数量级。

对于探索性基准测试,您始终可以编写代码,就像存在大量像素一样,然后对结果进行计时。该条带将忽略掉多余的输出位(或者甚至可以根本不连接NeoPixels进行测试)。

那是行不通的。现在怎么办?

由于NeoPixels使用固定频率的时钟,因此选项受到限制。您无法切换到速度更快的微控制器,并期望获得完全不同的结果。

一种选择是使用其他类型的LED,例如我们的DotStar或LPD8806灯条或WS2801像素。尽管它们在NeoPixels上确实有其他折衷(成本,颜色分辨率和/或像素密度),但仍可以以更高的数据速率来驱动。另一种方法是在功能更强大的微控制器或FPGA上开发自己的代码。并行驱动多个 NeoPixel条 。稍后将显示一个这样的项目-用于Teensy 3微控制器的OctoWS2811。这种事情很复杂,不建议初学者使用。甚至在经验丰富的程序员中,当 real 瓶颈存在于其他地方时,通常也会过分强调数据速率……除非您能确定这是问题的根源,否则不要过多地谈论它。/p》

我可以使用(Board X)控制NeoPixels吗?

我们目前仅提供Arduino库。稍后请参阅其他设备的链接。除此之外,如果考虑编写自己的库,请了解某些处理器比其他处理器更适合该任务。通读以下所示的时序要求,并确定所讨论的芯片是否可以合成满足那些规格的信号。一个8 MHz的AVR几乎无法跟上…任何较慢的速度都可能会带来麻烦,尽管某些特定于硬件的黑客(例如巧妙地使用SPI)也许可以实现。在许多情况下,需要汇编语言。

为什么不使用Raspberry Pi?

运行Linux的Raspberry Pi是一个多任务系统,控件可以随时在多个正在运行的程序之间切换。因此,无法保证NeoPixels要求的严格的800 KHz信号。您也许可以在短时间内捏捏它,但这并不是可以依靠的。这就是为什么我们在Raspberry Pi光绘项目中使用DotStar LED。

用于ARM Cortex-M0板的DMA NeoPixels

如果您正在使用最新的“ M0”开发板,例如Adafruit Feather M0,Circuit Playground Express或Arduino Zero,备用NeoPixel库,利用这些设备的直接内存访问(DMA)功能使操作更流畅。然后,高级Arduino草图可以使用不受惩罚的中断,并且依赖millis()或micros()函数的代码也不会浪费时间。

NeoMatrix库也有相应的DMA版本。

p》

加上超强的 8路并发NeoPixel DMA库。我们提供了羽翼和分线板的同伴,使连接和电平转换更加轻松!

第三方库

除了前面提到的FastLED库之外,NeoPixel兼容库也已经为Arduino以外的设备开发的。请记住,Adafruit并未开发任何代码,也无法修复错误或提供技术帮助。这是Wild West的东西。

OctoWS2811:专用于PJRC Teensy 3.0微控制器板。使用DMA最多可同时驱动多达8个NeoPixel条带,而处理器负载却最小。可以级联多个板以用于更大的显示器。

FadeCandy:也适用于Teensy 3.0。不支持OctoWS2811那样多的像素,但为纯色派增加了抖动和平滑插值。

LEDscape:专为BeagleBone Black设计。尽管BeagleBone是像不兼容NeoPixel的Raspberry Pi这样的多任务Linux系统,但是此代码利用了BeagleBone Black特有的硬件功能来驱动数百米的NeoPixel带,实际上没有处理器负载。/li》

用于视差推进器的WS2812 LED驱动器。

xCORE NeoPixel测试代码(用于XMOS xCORE startKIT)。

其中一些是3.3V器件。有关通过3.3V微控制器控制5V NeoPixel的说明,请参见“为NeoPixel供电”页面。

i》

WS2811? WS2812?为什么我会看到提到的两个不同的名称?

WS2811是较早的驱动器芯片,与RGB LED。数据信号类似,但运行速度只有一半。到WS2812(带有集成的LED)发布时,已经围绕WS2811的名称建立了许多代码和项目。有时,“用于WS2811”的代码实际上可能是针对较新的芯片,或针对任何一种类型。 Adafruit_NeoPixel库同时支持。

编写您自己的库

WS2812数据表解释了数据传输协议。这是一个自计时信号-只有一根线,没有分开的数据线和时钟线。通过更改固定频率方波的占空比来表示“ 1”和“ 0”位。

数据表的时序值中有一个数学错误。改用这些数字:

请注意,这个时间有将近25%的“摆动空间”。因此,如果您的代码与建议的时间不完全匹配,那么只要关闭就可以了。

每个像素有三个字节的数据。这些应该以绿色,红色,蓝色的顺序发布,并以最高有效位优先。

首先发布像素#0(与微控制器最近)的数据,然后发布像素#1,依此类推直到最远的像素。这不像传统的移位寄存器那样运行!

所有颜色数据发送完毕后,必须将数据线保持低电平至少50微秒,以使新颜色“锁存”。

您可能想要深入研究我们的Arduino库以获取见解。时序关键部分使用AVR汇编语言编写,但使用类似C的伪代码进行了广泛注释。

我的微处理器不够快

WS2812似乎与400 KHz WS2811信号向后兼容。如果您可以精确匹配后一种芯片的时序,则两种芯片都会响应。 WS2811协议是 不是 只是半速WS2812。“ 0”和“ 1”位略有不同。从WS2811数据表中:

责任编辑:wv

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

    关注

    237

    文章

    22444

    浏览量

    645843
收藏 人收藏

    评论

    相关推荐

    热敏FET使用指南

    电子发烧友网站提供《热敏FET使用指南.pdf》资料免费下载
    发表于 02-22 09:35 0次下载
    热敏FET<b class='flag-5'>使用指南</b>

    4G路由器的使用指南及技巧

    4G路由器的使用指南及技巧
    的头像 发表于 11-06 11:27 393次阅读

    AT32F425入门使用指南

    AT32F425入门使用指南旨在让用户快速使用AT32F425xx 进行项目开发。
    发表于 10-26 07:46

    AT32F402/405 DMA使用指南

    AT32F402/405 DMA使用指南主要就DMA 的基本功能进行讲解和案列解析。
    发表于 10-26 07:29

    AT32 VSCode PlatFormIO使用指南

    AT32 VSCode PlatFormIO使用指南旨在帮助使用VSCode+PlatFormIO开发AT32的用户,快速建立开发环境并进行开发。
    发表于 10-26 07:14

    AT32F423入门使用指南

    AT32F423入门使用指南旨在让用户快速使用AT32F423xx 进行项目开发。
    发表于 10-26 06:37

    AT32F425 ADC使用指南

    AT32F425 ADC使用指南本文主要以ADC 的特色功能进行讲解和案列解析。
    发表于 10-25 08:29

    AT32F425 DMA使用指南

    AT32F425 DMA使用指南本文主要就DMA 的基本功能进行讲解和案列解析。
    发表于 10-25 07:52

    AT32F435/437 EDMA使用指南

    AT32F435/437 EDMA使用指南本文主要就EDMA 的基本功能进行讲解和案列解析。
    发表于 10-25 07:24

    AT32F421入门使用指南

    AT32F421入门使用指南旨在让用户快速使用AT32F421xx 进行项目开发。
    发表于 10-24 07:38

    AT32F413入门使用指南

    AT32F413入门使用指南旨在让用户快速使用AT32F413xx 进行项目开发。
    发表于 10-24 07:34

    EdgeBoard使用指南

    电子发烧友网站提供《EdgeBoard使用指南.pdf》资料免费下载
    发表于 09-15 10:56 0次下载
    EdgeBoard<b class='flag-5'>使用指南</b>

    使用Adafruit NeoPixel环的模型灯塔

    电子发烧友网站提供《使用Adafruit NeoPixel环的模型灯塔.zip》资料免费下载
    发表于 07-06 14:24 0次下载
    使用<b class='flag-5'>Adafruit</b> <b class='flag-5'>NeoPixel</b>环的模型灯塔

    适用于Arduino的Adafruit NeoPixel Shield

    电子发烧友网站提供《适用于Arduino的Adafruit NeoPixel Shield.zip》资料免费下载
    发表于 06-09 10:27 0次下载
    适用于Arduino的<b class='flag-5'>Adafruit</b> <b class='flag-5'>NeoPixel</b> Shield

    在适用Arduino的Adafruit NeoPixel Shield上显示文本

    电子发烧友网站提供《在适用Arduino的Adafruit NeoPixel Shield上显示文本.zip》资料免费下载
    发表于 06-09 10:24 0次下载
    在适用Arduino的<b class='flag-5'>Adafruit</b> <b class='flag-5'>NeoPixel</b> Shield上显示文本