diff --git a/Documentation/index.rst b/Documentation/index.rst
index 0607bdaa5c89d6b1508c25c809375db529a9ee36..56631e81dfff20e8416a71d752fa93128535c18f 100644
--- a/Documentation/index.rst
+++ b/Documentation/index.rst
@@ -38,6 +38,7 @@ Last but not least, if you want to start hacking the lower-level firmware, the
    pycardium/simple_menu
    pycardium/utime
    pycardium/vibra
+   pycardium/ws2812
 
 .. toctree::
    :maxdepth: 1
diff --git a/Documentation/pycardium/ws2812.rst b/Documentation/pycardium/ws2812.rst
new file mode 100644
index 0000000000000000000000000000000000000000..91ff691f14413e14a0b013946588f01f32863878
--- /dev/null
+++ b/Documentation/pycardium/ws2812.rst
@@ -0,0 +1,30 @@
+.. py:module:: ws2812
+
+``ws2812`` - Neopixel LEDs
+==========================
+The ``ws2812`` module controls LEDs of the WS2812 type. Just as the ``leds`` module, it exposes a function :py:func:`ws2812.set_all`, which works a similar fashion.
+
+.. py:function:: set_all(pin, colors)
+
+   Set multiple of the LEDs to RGB values.
+
+   Filling starts at the LED connected to the specified gpio pin.
+
+   :param int pin: ID of the pin to use for sending the data.
+   :param colors: List of RGB triplets.
+
+   **Example**
+
+   .. code-block:: python
+
+      import color, utime, ws2812, gpio
+
+      i = 0
+      while True:
+          col1 = color.from_hsv(i % 360, 1.0, 0.1)
+          col2 = color.from_hsv((i + 20) % 360, 1.0, 0.1)
+          col3 = color.from_hsv((i + 40) % 360, 1.0, 0.1)
+          ws2812.set_all(gpio.WRISTBAND_2, [col1, col2, col3])
+          i += 1
+          utime.sleep_ms(10)
+