Has anyone successfully managed to control an led strip (WS2812) with nRF52840's I2S by any chance? I'm trying to use the led_ws2812 sample (docs.nordicsemi.com/.../README.html) from Nordic but I keep running into this build error:
/Users/joonhojang/Local_Drive/Workspace/KEYBOARD/Firmware_Modules/nRF52840/led_ws2812/build/led_ws2812/zephyr/include/generated/zephyr/devicetree_generated.h:1337:42: error: 'DT_N_S_ws2812_P_chain_length' undeclared here (not in a function); did you mean 'DT_N_S_ws2812_P_compatible'?
1337 | #define DT_N_ALIAS_led_strip DT_N_S_ws2812
| ^~~~~~~~~~~~~
However I'm pretty sure I declared the chain length in my nrf52840dk_nrf52840.overlay
#include <zephyr/dt-bindings/led/led.h>
/* Wiring:
* - M1.S connected to GND
* - SDOUT connected to M1.D
* - ~300 ohm resistor between M1.D and TP5 (5V / Vbus)
*/
&pinctrl {
i2s0_default_alt: i2s0_default_alt {
group1 {
psels = <NRF_PSEL(I2S_SCK_M, 1, 15)>,
<NRF_PSEL(I2S_LRCK_M, 1, 12)>,
<NRF_PSEL(I2S_SDOUT, 1, 13)>,
<NRF_PSEL(I2S_SDIN, 1, 14)>;
};
};
};
i2s_led: &i2s0 {
status = "okay";
pinctrl-0 = <&i2s0_default_alt>;
pinctrl-names = "default";
};
/ {
led_strip: ws2812 {
compatible = "worldsemi,ws2812-i2s";
i2s-dev = <&i2s_led>;
chain-length = <10>; /* arbitrary; change at will */
color-mapping = <LED_COLOR_ID_GREEN
LED_COLOR_ID_RED
LED_COLOR_ID_BLUE>;
out-active-low;
reset-delay = <120>;
};
aliases {
led-strip = &led_strip;
};
};
This is my prj.conf
CONFIG_LOG=y CONFIG_LED_STRIP=y CONFIG_LED_STRIP_LOG_LEVEL_DBG=y # CONFIG_WS2812_STRIP=y (UNDEFINED SYMBOL VALUE) CONFIG_I2S=y CONFIG_WS2812_STRIP_I2S=y