GIF209 icon

GIF209 v1.0

GIF209 is a professional, open-source hardware controller based on the STM32F030K6T6 ARM Cortex-M0 microcontroller. It is specifically designed to drive up to 19 independent WS2812/WS2811 LED strips and features standalone animation recording and playback via an SD card.

GIF209 RGB Controller Module - STM32F030K6T6 with WS2812 LED strips GIF209 PCB and schematic based on STM32F030K6T6

Hardware Specifications

FeatureSpecification
MicrocontrollerSTM32F030K6T6 (ARM Cortex-M0, 48 MHz, LQFP32)
Channels19 independent LED data lines (A1–A19)
Pixels per ChannelUp to 256 (Total 4,864 pixels)
StorageSD Card via SPI1 (Raw access, no filesystem)
CommunicationBluetooth HC-05 (UART, 115200 baud; set the module with AT+UART=115200,0,0)
Supported LEDsWS2812, WS2812B, WS2811, WS2813, WS2815

Pinout & Channel Map

Channels are mapped based on the physical pin number of the LQFP32 package (from pin 2 to 30) to make PCB routing easier.

Reserved Pins:

Command Protocol

Commands are sent via Bluetooth as plain text. Every line must end with a newline character (\n or \r\n). The controller acknowledges most commands with next for flow control.

1. Pixel Data (ARGBSE)

To control LEDs, send a 12-character hex string representing 6 variables:

A R G B S E
VariableMeaningRangeHex Range
AChannel Address1 – 1901 – 13
RRed Intensity0 – 25500 – FF
GGreen Intensity0 – 25500 – FF
BBlue Intensity0 – 25500 – FF
SStart Pixel0 – 25500 – FF
EEnd Pixel0 – 25500 – FF

Example: 01FF00000005 sets Channel 1, pixels 0 to 5, to Red (FF0000).

2. Control Commands

CommandDescriptionResponse
waitClears untouched channels (used as a frame separator)next
wait=NClears untouched channels and waits N millisecondsnext
RECStarts recording frames to the SD cardREC OK
ENDStops recording and saves the headerSAVED n
PLAYPlays the recorded frames oncePLAY DONE
LOOPPlays the recorded frames continuously (loop)STOPPED
STOPStops playback or recording immediatelySTOPPED
AUTO=0Enables auto-loop on boot (Default)OK AUTO=0
AUTO=1Disables auto-loop (waits for user command)OK AUTO=1
ERASEClears the recording header (frames=0)ERASED
INFOShows current status (frames, channels, delay, auto)frames=.. ch=..
DUMPSends raw data of all stored frames to terminal (for debugging)HDR raw:...

Web Application

The GIF209 Web App allows you to convert images or draw custom pixel art, and then generate the exact hex commands needed for the controller. It automatically handles the REC and END wrappers and formats everything perfectly.

🚀 Launch Web App

🎞️ GIF import: drop an animated GIF into the app and it is split into frames automatically. Each frame becomes one line of commands, and the GIF frame delays can be converted to wait=N.

GIF splitting needs a browser with ImageDecoder support (Chrome or Edge). In other browsers the GIF is added as a still image.

Safety Warning

⚠️ Important Notice

1. The SD card is accessed in RAW mode. There is no filesystem (FAT32) on it. The controller will overwrite sectors starting around 2000. Always use a spare or blank SD card.

2. The STM32 operates at 3.3V logic. If you are using 5V LED strips (WS2812B), you must use a logic level converter (like 74HCT245 or 74HCT125) to prevent damaging the microcontroller.

Flashing the Firmware (Boot Jumper)

The two SWD programming pins (PA13 and PA14) are used as LED outputs on this board, so the firmware cannot be flashed or debugged through SWD. Instead, the STM32 built-in bootloader is used over UART (PA9 / PA10), and it only starts when the BOOT0 pin is held high during reset. This is the job of the BOOT jumper.

  1. Disconnect the Bluetooth module (it shares PA9/PA10), and connect a 3.3V USB-to-serial adapter: adapter TX to PA10 (RX), adapter RX to PA9 (TX), and GND to GND.
  2. Flash mode: connect (install) the BOOT jumper, then power the board or press reset.
  3. Flash main.c (compiled) with a UART bootloader tool such as STM32CubeProgrammer (UART mode) or stm32flash.
  4. Normal mode: remove the BOOT jumper, reconnect the Bluetooth module, and reset the board so the firmware starts.

Important: if the BOOT jumper stays connected, the board will enter the bootloader on every reset and the LEDs will not work. Always remove the jumper after flashing.

Downloads

Get the source code, PCB schematics, and the latest firmware updates from the repository.