合宙的ESP32C3开发板控制ws2812彩灯同时连接WiFi会出现彩灯显示不正常?

系统:WIN7
硬件:合宙ESP32C3 单核、160mhZ,
软件:
1、使用 FastLED ,wifi 库
2、Vscode 搭建 Platformio开发平台

场景一、合宙esp32c3单独连接wifi,能正常连接wifi。
场景二、合宙esp32c3单独控制12颗ws2812灯珠时,ws2812的颜色、亮度均正常。
场景三、连接wifi,并同时控制12颗ws2812灯珠显示蓝色,会出现灯珠闪烁,一会蓝灯、一会绿灯、一会红灯?

下面是代码,哪位有经验的朋友帮我看看。谢谢!

#include 
#include 
#include 

/*********************以下为ws2812定义*********************/
#define DATA_PIN  18
//esp32c3驱动ws2812可用引脚 7,5,4,18,1,0
#define LED_TYPE    WS2812
#define COLOR_ORDER GRB
#define NUM_LEDS    12        //led的个数
CRGB leds[NUM_LEDS];        //建立LED光带
unsigned char max_bright=2;  //光带亮度0~255
CHSV MYHSVCOLOR(100,200,200);//自定义HSV颜色
//CRGB MYRGBCOLOR(100,200,200);//自定义RGB颜色

/*********************以下为wifi定义*********************/
const char * ID = "huawei5z";
const char * PASSWORD = "12349876";

void setup() 
{
  Serial.begin(9600);
  delay(100);   
  LEDS.addLeds(leds, NUM_LEDS);  //启动灯带 
  FastLED.setBrightness(max_bright);


  Serial.println("WiFi:");
  Serial.println(ID);
  Serial.println("PASSWORLD:");
  Serial.println(PASSWORD);
  
  WiFi.begin(ID,PASSWORD);
  
  while(WiFi.status()!=WL_CONNECTED)
  {
    delay(500);
    Serial.println("正在连接...");
  } 
  Serial.println("连接成功!");

}

void loop()
{
  fill_solid(leds, 12, CRGB::Blue);
  FastLED.show();
  delay(300);
}

总算弄完了,回来做个记号
解决方法有2种
方法一:不更换平台,继续使用paltformio,但不使用FastLED库,而是用Adafruit_NeoPixel库驱动ws2812;
方法二:更换平台,使用乐鑫官方的IDF。
个人分析:FastLED库的底层代码与wifi库的底层有外设上的冲突。

该回答内容部分引用GPT,GPT_Pro更好的解决问题
这个问题可能是由于控制ws2812彩灯和连接WiFi同时进行所导致的,具体原因可能是 ESP32C3 单核、160mhZ 的处理速度不够,无法同时进行控制ws2812和连接WiFi的任务,导致灯珠闪烁。要解决这个问题,可以尝试以下几种方法:

  1. 将使用的FastLED库的帧频减小,减少计算量。
  2. 使用更快的ESP32C3处理器,提高处理速度。
  3. 使用WiFi延时功能,避免灯珠和WiFi同时工作。
  4. 尝试使用其他库,如FastLED_NeoPixel库。
  5. 用一个中断函数来控制灯珠,这样可以更好地保证在WiFi工作的情况下可以正常控制灯珠。
    如果回答有帮助,望采纳。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这可能是由于ESP32C3开发板的WiFi和ws2812灯珠都使用了ESP32芯片的时序控制器,导致控制冲突,从而影响ws2812灯珠的正常工作。为了避免这个问题,你可以尝试以下解决方法:

  1. 使用外部时序控制器:可以使用外部的时序控制器,例如74HC125等芯片,将ws2812灯珠的时序控制与ESP32C3开发板的WiFi控制隔离,从而避免控制冲突。
  2. 降低ws2812灯珠刷新频率:降低ws2812灯珠的刷新频率可以减少对时序控制的需求,从而避免控制冲突。
  3. 更换开发板:如果以上两种方法都不能解决问题,可以尝试更换其他开发板或者使用独立的ESP32模块和ws2812灯珠模块,分别进行控制,从而避免控制冲突。

另外,在代码中,可以尝试将WiFi的连接过程放在setup()函数中,避免在loop()函数中频繁地连接WiFi,从而提高代码的效率。同时,为了避免ws2812灯珠的电源不足导致的显示不正常,可以使用电源稳压器或电容器等电路进行稳压。