ESP8266
ESP8266的GPIO有效翻转大约需要2.5us(0.4MHz),而ws2812的控制电平要求精度在百ns级别,所以直接控制GPIO比较难实现。
在网上搜索了一下各种可行的方案:
-
Arduino配合ws2812库
-
non_os SDK,配合
Adafruit_NeoPixel.c
-
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 -
使用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). -
使用这个库THKDev/NeoPixelBus_ESP8266_RTOS: Adafruit enhanced NeoPixel support library with ESP8266 RTOS support,但是example都是基于arduino的。内置了很多效果。这里是WIKI地址Home · Makuna/NeoPixelBus Wiki,这里是案例Examples · Makuna/NeoPixelBus Wiki。
-
使用WS2812FX移植库THKDev/WS2812FX_ESP8266_RTOS: WS2812 FX Library for ESP8266 RTOS,需要同时安装NeoPixelBus库这里还有使用WS2812FX库的方法。
-
PabloCastellano/awesome-ws2812: A curated list of awesome resources for ws2812 LED strips and matrices 这个仓库收集了很多ws2812相关的资料和驱动库链接。
-
一个非常好的web控制案例:toblum/McLighting: The ESP8266 based multi-client lighting gadget
ESP32
相关资源:
- 视频-【IOT College】ESP-IDF 环境下使用ESP32 驱动LED WS2812
- esp-idf/examples/peripherals/rmt/led_strip at 1cb31e50943bb757966ca91ed7f4852692a5b0ed · espressif/esp-idf
- 安信可ESP32-C3模组阿里云远程控制WS2812RGB灯条(基于ESP-IDF的SDK)_安信可科技 -CSDN博客
- JSchaenzle/ESP32-NeoPixel-WS2812-RMT: NeoPixel (WS2812) Driver Example code using RMT peripheral
- DominikN/ESP32_ledstrip_webserver: Control WS2812 based LED strip using a web server hosted by ESP32.
- 使用spi协议的方式传输控制数据
- 使用i2s协议的方式传输控制数据(据说最多支持12个灯?)
其它可能的方法:
据说ESP8266 GPIO0翻转速度比其它IO要快,但是似乎这种方法不太稳定。