\section{NeoPixel Unit} The NeoPixel unit implements the protocol needed to control a digital \gls{LED} strip with WS2812, WS2811, or compatible \gls{LED} driver chips. The NeoPixel protocol (explained in section~\ref{sec:theory-neo}) is implemented in software, therefore it is available on any \gls{GPIO} pin of the module. The color data can be loaded in five different format: as packed bytes (3$\times$8 bits color), or as the little- or big-endian encoding of colors in a 32-bit format: 0x00RRGGBB or 0x00BBGGRR. The 32-bit format is convenient when the colors are already represented as an array of 32-bit integers, e.g. extracted from a screen capture or an image. \subsection{NeoPixel Configuration} \begin{inicode} [NPX:neo@3] # Data pin pin=A0 # Number of pixels pixels=32 \end{inicode} \subsection{NeoPixel Commands} \begin{cmdlist} 0 & \cname{CLEAR} Switch all \glspl{LED} off (sets them to black) & \\ 1 & \cname{LOAD} Load a sequence of R,G,B bytes & \begin{cmdreq} \item For each \glspl{LED}: \begin{pldlist} \cfield{u8} red \cfield{u8} green \cfield{u8} blue \end{pldlist} \end{cmdreq} \\ 4 & \cname{LOAD\_U32\_ZRGB} Load 32-bit big-endian 0xRRGGBB (0,R,G,B) & \begin{cmdreq} \cfield{u32[]} color data (big-endian) \end{cmdreq} \\ 5 & \cname{LOAD\_U32\_ZBGR} Load 32-bit big-endian 0xBBGGRR (0,B,G,R) & \begin{cmdreq} \cfield{u32[]} color data (big-endian) \end{cmdreq} \\ 6 & \cname{LOAD\_U32\_RGBZ} Load 32-bit little-endian 0xBBGGRR (R,G,B,0) & \begin{cmdreq} \cfield{u32[]} color data (little-endian) \end{cmdreq} \\ 7 & \cname{LOAD\_U32\_BGRZ} Load 32-bit little-endian 0xRRGGBB (B,G,R,0) & \begin{cmdreq} \cfield{u32[]} color data (little-endian) \end{cmdreq} \\ 10 & \cname{GET\_LEN} Get number of \glspl{LED} in the strip & \begin{cmdresp} \cfield{u16} number of \glspl{LED} \end{cmdresp} \\ \end{cmdlist}