ESP8266/ESP32控制ws2812的几种方法

ESP8266

ESP8266的GPIO有效翻转大约需要2.5us(0.4MHz),而ws2812的控制电平要求精度在百ns级别,所以直接控制GPIO比较难实现。
在网上搜索了一下各种可行的方案:

  1. Arduino配合ws2812库

  2. non_os SDK,配合 Adafruit_NeoPixel.c

  3. SPI驱动(使用GPIO13)。将SPI的时钟调整为8MHz,发送一个字节所需时间1.25us,等于ws2812一个位的时间,SPI总线发送11000000b即为向ws2812发送逻辑0,SPI总线发送11111100b即为向ws2812发送逻辑1。
    初始化控制禁用CS和MISO使能,只使用MOSI作为WS2812的输出引脚。同时必须需要设置spi的事件回调函数,即使它是空的。
    原博客参考链接:https://blog.csdn.net/gengyuchao/article/details/93239317

  4. 使用open_rtos_sdk的驱动 (使用GPIO3即UART0_RXD)
    esp8266-setup/ws2812_i2s: WS2812 LED library from open-rtos-sdk ported to esp8266-setup and the original RTOS SDK
    Using RAM for DMA buffer. 12 bytes per pixel.
    Can not change output PIN. Use I2S DATA output pin which is GPIO3(UART0_RXD).

ESP32

相关视频资源:
【IOT College】ESP-IDF 环境下使用ESP32 驱动LED WS2812

其它可能的方法:
据说GPIO0翻转速度比其它IO要快,但是似乎这种方法不太稳定。

你可能感兴趣的:(ESP8266,ESP32)