You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32使用Neopixel库触发TG1WDT_SYS_RESET启动循环求助

ESP32 DOIT DEVKIT V1 使用Adafruit_NeoPixel库触发TG1WDT_SYS_RESET看门狗复位

问题描述

在Arduino IDE环境下,使用DOIT ESP32 DEVKIT V1开发板运行Adafruit_NeoPixel库代码时,出现TG1WDT_SYS_RESET启动循环故障,即使运行官方极简示例代码也会触发该问题。

报错信息

rst:0x8 (TG1WDT_SYS_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT) configsip: 0, SPIWP:0xee clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00 mode:DIO, clock div:1 load:0x3fff0030,len:1184 load:0x40078000,len:13160 load:0x40080400,len:3036 entry 0x400805e4

触发问题的示例代码

#include <Adafruit_NeoPixel.h>

#define PIN 6
#define NUMPIXELS 1
Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRBW);
#define DELAYVAL 500

void setup() {
  pixels.begin();
}

void loop() {
  pixels.clear();
  for (int i = 0; i < NUMPIXELS; i++) {
    pixels.setPixelColor(i, pixels.Color(0, 150, 0));
    pixels.show();
    delay(DELAYVAL);
  }
}

已尝试的无效解决方案

  • 降级ESP32 Core版本(3.0.8 → 2.0.7 → 2.0.4)
  • 降级Adafruit_NeoPixel库版本(1.12.3 → 1.10.4)
  • 将LED数量减少至1
  • 禁用/重置看门狗定时器
  • 添加yield()函数

可行解决方案建议

1. 更换引脚(最直接有效)

ESP32的GPIO6是SPI Flash的片选引脚(SPI_CS0),Neopixel的信号传输会占用该引脚,干扰Flash的正常读写,直接触发看门狗复位。立即更换为非SPI Flash相关的引脚,比如GPIO2、GPIO4、GPIO13、GPIO14等。修改代码中的#define PIN 6为其他可用引脚即可。

2. 修改Neopixel库的定时器配置

TG1WDT属于Timer Group 1的系统看门狗,Adafruit_NeoPixel库默认可能使用了Timer Group 1的定时器,导致资源冲突。可以手动修改库文件:

  • 找到Arduino库目录下的Adafruit_NeoPixel/Adafruit_NeoPixel.cpp文件
  • 找到定时器初始化相关代码,将TIMER_1替换为TIMER_0(对应Timer Group 0),重新编译上传。

3. 硬件排查

检查开发板的GPIO6引脚是否存在外部接线短路、虚焊等问题;如果更换引脚后问题依旧,尝试更换同型号开发板排查硬件故障。

4. 启用PSRAM(适用带PSRAM的型号)

部分DOIT ESP32 DEVKIT V1搭载了PSRAM,在Arduino IDE中开启PSRAM选项:

  • 进入工具 > 开发板 > ESP32 Arduino > 核心调试级别 > 无
  • 选择工具 > 板载PSRAM > 启用
    重新编译上传代码,可能缓解内存相关的看门狗触发问题。

内容的提问来源于stack exchange,提问作者DerekLF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 19:03:14