3619|24

3386

帖子

0

TA的资源

五彩晶圆(中级)

楼主
 

【花雕体验】19 合宙ESP32_C3点亮WS2812B硬屏 [复制链接]

 

手头有64位和256位WS2812B的硬屏各一片,现在尝试点亮它们

 

 

最新回复

,我当时也买了一块合宙的C3,还没玩,好先学习学习   详情 回复 发表于 2022-7-12 11:41
点赞 关注
 

回复
举报

3386

帖子

0

TA的资源

五彩晶圆(中级)

沙发
 

WS2812主要特点
●     智能反接保护,电源反接不会损坏IC。
●     IC控制电路与LED点光源公用一个电源。
●     控制电路与RGB芯片集成在一个5050封装的元器件中,构成一个完整的外控像素点。
●     内置信号整形电路,任何一个像素点收到信号后经过波形整形再输出,保证线路波形畸变不会累加。
●     内置上电复位和掉电复位电路。
●     每个像素点的三基色颜色可实现256级亮度显示,完成16777216种颜色的全真色彩显示,扫描频率不低于400Hz/s。
●     串行级联接口,能通过一根信号线完成数据的接收与解码。
●     任意两点传传输距离在不超过5米时无需增加任何电路。
●     当刷新速率30帧/秒时,级联数不小于1024点。
●      数据发送速度可达800Kbps。
●      光的颜色高度一致,性价比高。

 

 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

板凳
 

WS2812模块电原理图

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

4
 

合宙CORE ESP32-C3核心板,是基于乐鑫ESP32-C3芯片进行设计的一款开发板。尺寸仅有21mm×51mm,板边采用邮票孔设计,板载 Wi-Fi/BLE天线,方便开发者在不同场景下的使用。核心板支持UART、GPIO、SPI、I2C、ADC、PWM等接口,可根据实际需要选用。

 

1路SPI FLASH,板载4MB,支持最高 16MB
2路UART接口,UART0~UART1,其中下载口为UART0
6 路 12 比特 ADC,最高采样率 100KSPS
1路低速SPI接口,支持主模式
1路IIC控制器
4路PWM接口
GPIO外部管脚15路,可复用
2路贴片LED指示灯
1路复位按键+1路BOOT按键
1路USB转TTL下载调试口
2.4G PCB板载天线

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

5
 

打开Arduino IDE——工具——管理库,搜索Adafruit NeoPixel,并安装

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

6
 

  【花雕体验】19 合宙ESP32_C3点亮WS2812B硬屏
  实验程序一:64位绿色上漂灯

 

  • /*
  • 【花雕体验】19 合宙ESP32_C3点亮WS2812B硬屏
  • 实验程序一:64位绿色上漂灯
  • */
  • #include <Adafruit_NeoPixel.h>
  • #define PIN 9
  • #define MAX_LED 64
  • int val = 0;
  • Adafruit_NeoPixel strip = Adafruit_NeoPixel( MAX_LED, PIN, NEO_RGB + NEO_KHZ800 );
  • void setup() {
  • strip.setBrightness(150);
  • strip.begin();
  • strip.show();
  • }
  • void loop() {
  • uint8_t i, a = 0;
  • uint32_t color = strip.Color(160, 10, 10);
  • while (a < 64)
  • {
  • for (i = 0; i < 64; i++)
  • {
  • if (i == a) strip.setPixelColor(i, color);
  • else strip.setPixelColor(i, 0);
  • }
  • strip.show();
  • delay(6);
  • a++;
  • }
  • }

 

 
 
 

回复

183

帖子

1

TA的资源

一粒金砂(高级)

7
 

,我当时也买了一块合宙的C3,还没玩,好先学习学习

点评

我收了8片,留着做项目,多交流  详情 回复 发表于 2022-7-12 11:43
 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

8
 

  实验串口返回情况

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

9
 
chrisrh 发表于 2022-7-12 11:41 ,我当时也买了一块合宙的C3,还没玩,好先学习学习

我收了8片,留着做项目,多交流

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

10
 

实验场景图  动态图

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

11
 

  【花雕体验】19 合宙ESP32_C3点亮WS2812B硬屏
  实验程序二:一个基本的NeoPixel 灯板灯条测试程序

 

  • /*
  • 【花雕体验】19 合宙ESP32_C3点亮WS2812B硬屏
  • 实验程序二:一个基本的NeoPixel 灯板灯条测试程序
  • */
  • #include <Adafruit_NeoPixel.h>
  • #define PIN 9
  • #define NUMPIXELS 64
  • Adafruit_NeoPixel strip = Adafruit_NeoPixel(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800);
  • void setup() {
  • strip.setBrightness(50);
  • strip.begin();
  • strip.show();
  • }
  • void loop() {
  • // Fill along the length of the strip in various colors...
  • colorWipe(strip.Color(255, 0, 0), 50); // Red
  • colorWipe(strip.Color( 0, 255, 0), 50); // Green
  • colorWipe(strip.Color( 0, 0, 255), 50); // Blue
  • // Do a theater marquee effect in various colors...
  • theaterChase(strip.Color(127, 127, 127), 50); // White, half brightness
  • theaterChase(strip.Color(127, 0, 0), 50); // Red, half brightness
  • theaterChase(strip.Color( 0, 0, 127), 50); // Blue, half brightness
  • rainbow(10); // Flowing rainbow cycle along the whole strip
  • theaterChaseRainbow(50); // Rainbow-enhanced theaterChase variant
  • }
  • // Some functions of our own for creating animated effects -----------------
  • // Fill strip pixels one after another with a color. Strip is NOT cleared
  • // first; anything there will be covered pixel by pixel. Pass in color
  • // (as a single 'packed' 32-bit value, which you can get by calling
  • // strip.Color(red, green, blue) as shown in the loop() function above),
  • // and a delay time (in milliseconds) between pixels.
  • void colorWipe(uint32_t color, int wait) {
  • for (int i = 0; i < strip.numPixels(); i++) { // For each pixel in strip...
  • strip.setPixelColor(i, color); // Set pixel's color (in RAM)
  • strip.show(); // Update strip to match
  • delay(wait); // Pause for a moment
  • }
  • }
  • // Theater-marquee-style chasing lights. Pass in a color (32-bit value,
  • // a la strip.Color(r,g,b) as mentioned above), and a delay time (in ms)
  • // between frames.
  • void theaterChase(uint32_t color, int wait) {
  • for (int a = 0; a < 10; a++) { // Repeat 10 times...
  • for (int b = 0; b < 3; b++) { // 'b' counts from 0 to 2...
  • strip.clear(); // Set all pixels in RAM to 0 (off)
  • // 'c' counts up from 'b' to end of strip in steps of 3...
  • for (int c = b; c < strip.numPixels(); c += 3) {
  • strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
  • }
  • strip.show(); // Update strip with new contents
  • delay(wait); // Pause for a moment
  • }
  • }
  • }
  • // Rainbow cycle along whole strip. Pass delay time (in ms) between frames.
  • void rainbow(int wait) {
  • // Hue of first pixel runs 5 complete loops through the color wheel.
  • // Color wheel has a range of 65536 but it's OK if we roll over, so
  • // just count from 0 to 5*65536. Adding 256 to firstPixelHue each time
  • // means we'll make 5*65536/256 = 1280 passes through this outer loop:
  • for (long firstPixelHue = 0; firstPixelHue < 5 * 65536; firstPixelHue += 256) {
  • for (int i = 0; i < strip.numPixels(); i++) { // For each pixel in strip...
  • // Offset pixel hue by an amount to make one full revolution of the
  • // color wheel (range of 65536) along the length of the strip
  • // (strip.numPixels() steps):
  • int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
  • // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
  • // optionally add saturation and value (brightness) (each 0 to 255).
  • // Here we're using just the single-argument hue variant. The result
  • // is passed through strip.gamma32() to provide 'truer' colors
  • // before assigning to each pixel:
  • strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
  • }
  • strip.show(); // Update strip with new contents
  • delay(wait); // Pause for a moment
  • }
  • }
  • // Rainbow-enhanced theater marquee. Pass delay time (in ms) between frames.
  • void theaterChaseRainbow(int wait) {
  • int firstPixelHue = 0; // First pixel starts at red (hue 0)
  • for (int a = 0; a < 30; a++) { // Repeat 30 times...
  • for (int b = 0; b < 3; b++) { // 'b' counts from 0 to 2...
  • strip.clear(); // Set all pixels in RAM to 0 (off)
  • // 'c' counts up from 'b' to end of strip in increments of 3...
  • for (int c = b; c < strip.numPixels(); c += 3) {
  • // hue of pixel 'c' is offset by an amount to make one full
  • // revolution of the color wheel (range 65536) along the length
  • // of the strip (strip.numPixels() steps):
  • int hue = firstPixelHue + c * 65536L / strip.numPixels();
  • uint32_t color = strip.gamma32(strip.ColorHSV(hue)); // hue -> RGB
  • strip.setPixelColor(c, color); // Set pixel 'c' to value 'color'
  • }
  • strip.show(); // Update strip with new contents
  • delay(wait); // Pause for a moment
  • firstPixelHue += 65536 / 90; // One cycle of color wheel over 90 frames
  • }
  • }
  • }

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

12
 

实验场景图  动态图

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

13
 

实验场景图  动态图

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

14
 

实验场景图  动态图

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

15
 

  【花雕体验】19 合宙ESP32_C3点亮WS2812B硬屏
  实验程序三:256位显示 RGBW 的 WHITE 通道的测试使用

 

  • /*
  • 【花雕体验】19 合宙ESP32_C3点亮WS2812B硬屏
  • 实验程序三:256位显示 RGBW 的 WHITE 通道的测试使用
  • */
  • #include <Adafruit_NeoPixel.h>
  • #define LED_PIN 9
  • #define LED_COUNT 256
  • Adafruit_NeoPixel strip(LED_COUNT, LED_PIN, NEO_GRBW + NEO_KHZ800);
  • void setup() {
  • strip.setBrightness(30);
  • strip.begin();
  • strip.show();
  • }
  • void loop() {
  • // Fill along the length of the strip in various colors...
  • colorWipe(strip.Color(255, 0, 0) , 50); // Red
  • colorWipe(strip.Color( 0, 255, 0) , 50); // Green
  • colorWipe(strip.Color( 0, 0, 255) , 50); // Blue
  • colorWipe(strip.Color( 0, 0, 0, 255), 50); // True white (not RGB white)
  • whiteOverRainbow(75, 5);
  • pulseWhite(5);
  • rainbowFade2White(3, 3, 1);
  • }
  • // Fill strip pixels one after another with a color. Strip is NOT cleared
  • // first; anything there will be covered pixel by pixel. Pass in color
  • // (as a single 'packed' 32-bit value, which you can get by calling
  • // strip.Color(red, green, blue) as shown in the loop() function above),
  • // and a delay time (in milliseconds) between pixels.
  • void colorWipe(uint32_t color, int wait) {
  • for (int i = 0; i < strip.numPixels(); i++) { // For each pixel in strip...
  • strip.setPixelColor(i, color); // Set pixel's color (in RAM)
  • strip.show(); // Update strip to match
  • delay(wait); // Pause for a moment
  • }
  • }
  • void whiteOverRainbow(int whiteSpeed, int whiteLength) {
  • if (whiteLength >= strip.numPixels()) whiteLength = strip.numPixels() - 1;
  • int head = whiteLength - 1;
  • int tail = 0;
  • int loops = 3;
  • int loopNum = 0;
  • uint32_t lastTime = millis();
  • uint32_t firstPixelHue = 0;
  • for (;;) { // Repeat forever (or until a 'break' or 'return')
  • for (int i = 0; i < strip.numPixels(); i++) { // For each pixel in strip...
  • if (((i >= tail) && (i <= head)) || // If between head & tail...
  • ((tail > head) && ((i >= tail) || (i <= head)))) {
  • strip.setPixelColor(i, strip.Color(0, 0, 0, 255)); // Set white
  • } else { // else set rainbow
  • int pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
  • strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue)));
  • }
  • }
  • strip.show(); // Update strip with new contents
  • // There's no delay here, it just runs full-tilt until the timer and
  • // counter combination below runs out.
  • firstPixelHue += 40; // Advance just a little along the color wheel
  • if ((millis() - lastTime) > whiteSpeed) { // Time to update head/tail?
  • if (++head >= strip.numPixels()) { // Advance head, wrap around
  • head = 0;
  • if (++loopNum >= loops) return;
  • }
  • if (++tail >= strip.numPixels()) { // Advance tail, wrap around
  • tail = 0;
  • }
  • lastTime = millis(); // Save time of last movement
  • }
  • }
  • }
  • void pulseWhite(uint8_t wait) {
  • for (int j = 0; j < 256; j++) { // Ramp up from 0 to 255
  • // Fill entire strip with white at gamma-corrected brightness level 'j':
  • strip.fill(strip.Color(0, 0, 0, strip.gamma8(j)));
  • strip.show();
  • delay(wait);
  • }
  • for (int j = 255; j >= 0; j--) { // Ramp down from 255 to 0
  • strip.fill(strip.Color(0, 0, 0, strip.gamma8(j)));
  • strip.show();
  • delay(wait);
  • }
  • }
  • void rainbowFade2White(int wait, int rainbowLoops, int whiteLoops) {
  • int fadeVal = 0, fadeMax = 100;
  • // Hue of first pixel runs 'rainbowLoops' complete loops through the color
  • // wheel. Color wheel has a range of 65536 but it's OK if we roll over, so
  • // just count from 0 to rainbowLoops*65536, using steps of 256 so we
  • // advance around the wheel at a decent clip.
  • for (uint32_t firstPixelHue = 0; firstPixelHue < rainbowLoops * 65536;
  • firstPixelHue += 256) {
  • for (int i = 0; i < strip.numPixels(); i++) { // For each pixel in strip...
  • // Offset pixel hue by an amount to make one full revolution of the
  • // color wheel (range of 65536) along the length of the strip
  • // (strip.numPixels() steps):
  • uint32_t pixelHue = firstPixelHue + (i * 65536L / strip.numPixels());
  • // strip.ColorHSV() can take 1 or 3 arguments: a hue (0 to 65535) or
  • // optionally add saturation and value (brightness) (each 0 to 255).
  • // Here we're using just the three-argument variant, though the
  • // second value (saturation) is a constant 255.
  • strip.setPixelColor(i, strip.gamma32(strip.ColorHSV(pixelHue, 255,
  • 255 * fadeVal / fadeMax)));
  • }
  • strip.show();
  • delay(wait);
  • if (firstPixelHue < 65536) { // First loop,
  • if (fadeVal < fadeMax) fadeVal++; // fade in
  • } else if (firstPixelHue >= ((rainbowLoops - 1) * 65536)) { // Last loop,
  • if (fadeVal > 0) fadeVal--; // fade out
  • } else {
  • fadeVal = fadeMax; // Interim loop, make sure fade is at max
  • }
  • }
  • for (int k = 0; k < whiteLoops; k++) {
  • for (int j = 0; j < 256; j++) { // Ramp up 0 to 255
  • // Fill entire strip with white at gamma-corrected brightness level 'j':
  • strip.fill(strip.Color(0, 0, 0, strip.gamma8(j)));
  • strip.show();
  • }
  • delay(100); // Pause 1 second
  • for (int j = 255; j >= 0; j--) { // Ramp down 255 to 0
  • strip.fill(strip.Color(0, 0, 0, strip.gamma8(j)));
  • strip.show();
  • }
  • }
  • delay(50); // Pause 1/2 second
  • }

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

16
 

实验场景图  

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

17
 

实验场景图  动态图

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

18
 

  【花雕体验】19 合宙ESP32_C3点亮WS2812B硬屏
  实验程序四:256位使用FastLED库的八种快速调色板

 

  • /*
  • 【花雕体验】19 合宙ESP32_C3点亮WS2812B硬屏
  • 实验程序四:256位使用FastLED库的八种快速调色板
  • */
  • #include <FastLED.h>
  • #define LED_PIN 9
  • #define NUM_LEDS 256
  • #define BRIGHTNESS 20
  • #define LED_TYPE WS2811
  • #define COLOR_ORDER GRB
  • CRGB leds[NUM_LEDS];
  • #define UPDATES_PER_SECOND 100
  • CRGBPalette16 currentPalette;
  • TBlendType currentBlending;
  • extern CRGBPalette16 myRedWhiteBluePalette;
  • extern const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM;
  • void setup() {
  • delay( 3000 ); // power-up safety delay
  • FastLED.addLeds<LED_TYPE, LED_PIN, COLOR_ORDER>(leds, NUM_LEDS).setCorrection( TypicalLEDStrip );
  • FastLED.setBrightness( BRIGHTNESS );
  • currentPalette = RainbowColors_p;
  • currentBlending = LINEARBLEND;
  • }
  • void loop() {
  • ChangePalettePeriodically();
  • static uint8_t startIndex = 0;
  • startIndex = startIndex + 1; /* motion speed */
  • FillLEDsFromPaletteColors( startIndex);
  • FastLED.show();
  • FastLED.delay(1000 / UPDATES_PER_SECOND);
  • }
  • void FillLEDsFromPaletteColors( uint8_t colorIndex) {
  • uint8_t brightness = 255;
  • for ( int i = 0; i < NUM_LEDS; ++i) {
  • leds[i] = ColorFromPalette( currentPalette, colorIndex, brightness, currentBlending);
  • colorIndex += 3;
  • }
  • }
  • void ChangePalettePeriodically() {
  • uint8_t secondHand = (millis() / 1000) % 60;
  • static uint8_t lastSecond = 99;
  • if ( lastSecond != secondHand) {
  • lastSecond = secondHand;
  • if ( secondHand == 0) {
  • currentPalette = RainbowColors_p;
  • currentBlending = LINEARBLEND;
  • }
  • if ( secondHand == 10) {
  • currentPalette = RainbowStripeColors_p;
  • currentBlending = NOBLEND;
  • }
  • if ( secondHand == 15) {
  • currentPalette = RainbowStripeColors_p;
  • currentBlending = LINEARBLEND;
  • }
  • if ( secondHand == 20) {
  • SetupPurpleAndGreenPalette();
  • currentBlending = LINEARBLEND;
  • }
  • if ( secondHand == 25) {
  • SetupTotallyRandomPalette();
  • currentBlending = LINEARBLEND;
  • }
  • if ( secondHand == 30) {
  • SetupBlackAndWhiteStripedPalette();
  • currentBlending = NOBLEND;
  • }
  • if ( secondHand == 35) {
  • SetupBlackAndWhiteStripedPalette();
  • currentBlending = LINEARBLEND;
  • }
  • if ( secondHand == 40) {
  • currentPalette = CloudColors_p;
  • currentBlending = LINEARBLEND;
  • }
  • if ( secondHand == 45) {
  • currentPalette = PartyColors_p;
  • currentBlending = LINEARBLEND;
  • }
  • if ( secondHand == 50) {
  • currentPalette = myRedWhiteBluePalette_p;
  • currentBlending = NOBLEND;
  • }
  • if ( secondHand == 55) {
  • currentPalette = myRedWhiteBluePalette_p;
  • currentBlending = LINEARBLEND;
  • }
  • }
  • }
  • // This function fills the palette with totally random colors.
  • void SetupTotallyRandomPalette() {
  • for ( int i = 0; i < 16; ++i) {
  • currentPalette[i] = CHSV( random8(), 255, random8());
  • }
  • }
  • void SetupBlackAndWhiteStripedPalette() {
  • // 'black out' all 16 palette entries...
  • fill_solid( currentPalette, 16, CRGB::Black);
  • // and set every fourth one to white.
  • currentPalette[0] = CRGB::White;
  • currentPalette[4] = CRGB::White;
  • currentPalette[8] = CRGB::White;
  • currentPalette[12] = CRGB::White;
  • }
  • // This function sets up a palette of purple and green stripes.
  • void SetupPurpleAndGreenPalette() {
  • CRGB purple = CHSV( HUE_PURPLE, 255, 255);
  • CRGB green = CHSV( HUE_GREEN, 255, 255);
  • CRGB black = CRGB::Black;
  • currentPalette = CRGBPalette16(
  • green, green, black, black,
  • purple, purple, black, black,
  • green, green, black, black,
  • purple, purple, black, black );
  • }
  • const TProgmemPalette16 myRedWhiteBluePalette_p PROGMEM =
  • {
  • CRGB::Red,
  • CRGB::Gray, // 'white' is too bright compared to red and blue
  • CRGB::Blue,
  • CRGB::Black,
  • CRGB::Red,
  • CRGB::Gray,
  • CRGB::Blue,
  • CRGB::Black,
  • CRGB::Red,
  • CRGB::Red,
  • CRGB::Gray,
  • CRGB::Gray,
  • CRGB::Blue,
  • CRGB::Blue,
  • CRGB::Black,
  • CRGB::Black
  • };

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

19
 

实验场景图  

 

 
 
 

回复

3386

帖子

0

TA的资源

五彩晶圆(中级)

20
 

实验场景图  动态图

 

 

 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条
有奖直播 | AI之眼——安森美图像传感器 报名中
直播时间:2025年4月25日(周五)上午10:00-11:30
直播主题:AI之眼——安森美图像传感器
报名观看直播、直播间提问、填写问卷均有机会获得精美礼品!

查看 »

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

 
机器人开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网 6

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表