ESP8266-Arduino编程实例-PCA9685 LED控制器驱动

PCA9685 LED控制器驱动

1、PCA9685介绍

PCA9685 是一款 I²C 总线控制的 16 通道 LED 控制器,针对红色/绿色/蓝色/琥珀色 (RGBA) 彩色背光应用进行了优化。 每个 LED 输出都有自己的 12 位分辨率(4096 步)固定频率独立 PWM 控制器,该控制器以典型的 24 Hz 至 1526 Hz 的可编程频率运行,占空比可在 0% 至 100% 之间调节,以允许 LED 要设置为特定的亮度值。 所有输出都设置为相同的 PWM 频率。

在这里插入图片描述

每个 LED 输出可以关闭或打开(无 PWM 控制),或设置为其单独的 PWM 控制器值。 LED 输出驱动器被编程为在 5 V 时具有 25 mA 电流吸收能力的开漏极或在 5 V 时具有 25 mA 灌电流和 10 mA 拉电流能力的图腾柱。PCA9685 在 2.3 V 的电源电压范围内工作 至 5.5 V,输入和输出可承受 5.5 V。 LED 可以直接连接到 LED 输出(高达 25 mA、5.5 V)或通过外部驱动器和最少数量的分立元件进行控制,以实现更大电流或更高电压的 LED。

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • TMP102传感器模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

传感器引脚 ESP8266开发板引脚
Vin 5v
Gnd Gnd
SCL D1
SDA D2

LED与PCA9681第1个输出端口连接。

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

本次实例使用的驱动库如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <Wire.h>
#include <Adafruit\_PWMServoDriver.h>

// called this way, it uses the default address 0x40
Adafruit_PWMServoDriver pwm = Adafruit\_PWMServoDriver();

void setup() {
Serial.begin(9600);
Serial.println("16 channel PWM test!");
pwm.begin();
pwm.setPWMFreq(1600); // This is the maximum PWM frequency

// save I2C bitrate
//uint8\_t twbrbackup = TWBR;
// must be changed after calling Wire.begin() (inside pwm.begin())
//TWBR = 12; // upgrade to 400KHz!

}

void loop() {
// Drive each PWM in a 'wave'
for (uint16\_t i=0; i<4096; i += 8)
{
for (uint8\_t pwmnum=0; pwmnum < 16; pwmnum++)
{
pwm.setPWM(pwmnum, 0, (i + (4096/16)\*pwmnum) % 4096 );
}
}
}

文章来源: https://iotsmart.blog.csdn.net/article/details/126737427