Luxafor Signal AT Command Reference Extended Edition with Examples

1. Introduction

The Luxafor Signal device is controlled through a text-based AT command interface. This extended edition documents every command with syntax, parameters, responses, and a worked example. A compact summary of the same command set is available in the short edition of this reference. Commands can be sent over any of the following channels:

  • USB CDC – virtual serial port over USB (TinyUSB CDC-ACM).
  • Cloud WebSocket – commands relayed through the cloud server connection.
  • Local HTTP server – commands submitted through the device’s local REST endpoint (available in AP and STA modes).

1.1 Command Format

Each command is an ASCII string terminated by a carriage return / line feed. Command names are case-insensitive. Commands that take parameters use the = form:

AT+<NAME>              Execute/action command
AT+<NAME>?             Query ( get ) command
AT+<NAME>=<params>     Set command , parameters separated by commas

1.2 Responses

Every response is terminated with \r\n. The response shape depends on the command type:

  • Set / action commands answer with a single OK on success.
  • Single-value queries answer with one +<TAG>:<data> line. No trailing OK is sent after it.
  • List queries (file lists, scan results, pattern lists) send one +<TAG>: line per item, followed by a final OK.
  • Failures answer with ERROR: <code>, where <code> is a numeric error code (see Section 9). A few commands report textual errors in the form ERROR: <reason>; these are noted where they occur.
  • Data transfers (AT+CP=, AT+UF=) answer with the prompt > and wait for follow-up data.


2. General Commands

2.1 AT — Test Command

Verifies that the command interface is alive. The device simply answers OK

AT 
OK

2.2 AT+RST — Restart Device

Restarts the device. The OK is sent before the restart is performed, so the host should expect the connection to drop shortly afterwards.

AT+RST 
OK 

2.3 AT+FRST — Factory Reset

Resets all configuration to factory defaults, formats the storage, and restarts the device.

AT+FRST
OK


3. Device Information Commands

3.1 AT+GDN — Get Device Name

Returns the device name, which is also used as the mDNS hostname. The name is derived from the last three bytes of the device MAC address.

AT+GDN
+DN:luxafor_signal-3F2A1B 

3.2 AT+GMN — Get Manufacturer Name

AT+GMN
+MN:SIA GREYNUT

3.3 AT+GID — Get Device ID

Returns the unique device identifier (the Wi-Fi MAC address as a 12-digit hex string).

AT + GID
+ID:A1B2C3D4E5F6 

3.4 AT+GFV — Get Firmware Version

AT+GFV
+FV:1.0 

3.5 AT+GHV — Get Hardware Version

AT+GHV
+HV:1.0

3.6 AT+GESPV — Get ESP-IDF Version

Returns the ESP-IDF version the firmware was built with.

AT+GESPV
+ESPV:v5.5.1 

3.7 AT+GESPCT — Get Firmware Compile Time

AT+GESPCT
+ESPCT:Mar 10 2026 14:22:31

3.8 AT+GCHI — Get Chip Information

Returns chip model, silicon revision, core count, and a comma-separated feature list (possible features: WiFi, BT, BLE, EmbFlash, EmbPSRAM, ExtPSRAM).

AT+GCHI
+CHI:ESP32-S3,2,2 ,WiFi,BLE,ExtPSRAM 

3.9 AT+GTEMP — Get Internal Temperature

Returns the internal chip temperature in degrees Celsius with one decimal place. On sensor failure a textual error such as ERROR: Failed to read temperature is returned.

AT+GTEMP
+TEMP:42.5 

3.10 AT+GLEC — Get Last Error Code

Returns the most recent error code (see Section 9). -1 means no error has occurred yet.

AT+GLEC
+LEC:-1

3.11 AT+GLRR0 / AT+GLRR1 — Get Last Reset Reason

Return the last reset reason code for CPU core 0 and core 1 respectively.

AT+GLRR0
+LRR0:1
AT+GLRR1
+LRR1:14

4. File and Storage Commands

4.1 AT+GFL — Get File List

Lists all files on the storage, one +FL: line per file with name, type, and size in bytes, followed by a final OK.

AT+GFL
+FL:notify.mp3,file,48213
+FL:config.json,file,1024
+FL:logo.bmp,file,32768 
OK

4.2 AT+GML — Get MP3 List

Lists only MP3 files, one +ML: line per file, followed by a final OK.

AT+GML
+ML:notify.mp3,48213
+ML:alarm.mp3,102400
OK 

4.3 AT+GFSS — Get Free Storage Size

Returns free storage space in bytes.

AT+GFSS
+FSS:1439744

4.4 AT+GTSS — Get Total Storage Size

Returns total storage size in bytes.

AT+GTSS
+TSS:1572864

4.5 AT+GF — Get (Download) File

Syntax:   AT+GF=<file_name>

Requests a file from the device. The device replies with the file name and size, then streams the raw file bytes, and finishes with OK.

AT+GF=config.json
+GF:config.json,1024
<1024 raw bytes follow>
OK 

If the file does not exist, the device answers ERROR:3 (file_not_found).

4.6 AT+UF — Upload File

Syntax:   AT+UF=<file_name>,<file_size>

Uploads a file to the device. The device validates the size, checks the available storage space, and answers with the prompt >. The host must then send exactly <file_size> raw bytes.

AT+UF=notify.mp3,48213
> 
< host sends 48213 raw bytes > 
OK

4.7 AT+DF — Delete File

Syntax:   AT+DF=<file_name>

AT+DF=old_sound.mp3
OK
AT+DF=missing.mp3
ERROR:3 

4.8 AT+DL — Download File from URL

Syntax:   AT+DL=<url>,<file_name>

Downloads a file from an HTTP(S) URL to the device storage.

AT+DL=https://example.com/sounds/chime.mp3,chime.mp3
+DL:OK,chime.mp3

A failed download answers:

AT+DL=https://example.com/missing.mp3,missing.mp3
ERROR:0,DOWNLOAD_FAILED 

4.9 AT+DPR — Download Progress Reporting

Syntax:  AT+DPR=<0|1>

Enables (1) or disables (0) progress reporting for AT+DL downloads over the cloud connection.

AT+DPR=1
OK 

4.10 AT+AFSS — Activate File Storage Scan

Requests a re-scan of the file storage.

AT+AFSS
OK 

4.11 AT+FD — Format Disk

Formats the storage. All files are erased.

AT+FD
OK


5. LED Commands

5.1 LED Addressing

The Luxafor Signal has 12 addressable RGB LEDs on a single strip. Every LED command selects LEDs with a decimal bit mask, <led_pins>:

  • Bit 0 (value 1) is LED 1, bit 1 (value 2) is LED 2, . . . , bit 11 (value 2048) is LED 12.
  • 4095 (0x0FFF) selects all 12 LEDs.
  • LEDs 1–6 (mask 63) form the right half and LEDs 7–12 (mask 4032) the left half of the strip.
  • Bit 12 (value 4096) is a clear-others modifier. When it is set, every LED that is not selected by the mask is switched off (solid color) or reset to the background color (pattern step). When it is clear, unselected LEDs keep their current color

Colors are given as six hex digits RRGGBB, e.g. FF8000 is orange and 000000 is off.


5.2 AT+SC? — Get Solid Color

Returns the current solid color as an LED bit mask and an RRGGBB hex color.

AT+SC?
+SC:63,FF8000

5.3 AT+SC= — Set Solid Color

Syntax:   AT+SC=<led_pins>,<color>

Parameters: <led_pins>  is a decimal bit mask selecting which LEDs to set (e.g. 63 = all six LEDs); <color> is an RRGGBB hex value.

Setting a solid color stops any running pattern, applies the color immediately and saves it to the configuration. It is also the color the device returns to when a pattern finishes.

Set all LEDs to orange:

AT+SC=63,FF8000
OK

Set only LED 1 and LED 2 (mask 3) to blue; the other LEDs keep their color:

AT+SC=3,0000FF
OK

Set the right half green and switch the left half off (mask 63 + clear-others bit 4096):

AT+SC=4159,00FF00
OK

A missing or malformed parameter answers ERROR:2.

5.4 Pattern Step Format

A custom pattern is a list of up to 40 steps. Each step is one line in the same format that AT+CP? prints:

+CP: <led_bits>, <RRGGBB>, <speed>, <delay>

led_pins: LED bit mask (Section 5.1). Add 4096 to reset all LEDs not in the mask to the background color; this is what running-light effects use so that only one LED is lit at a time.

RRGGBB: Target color of the selected LEDs.

speed: Fade rate from the previous color to the target color. The LED driver moves each color channel by up to 5 units per update, and <speed> is the number of 0.25 ms ticks to wait between updates. A full 0–255 change therefore takes about 13 × (speed + 1) ms:

delay: Minimum hold time of the step in milliseconds, counted from the moment the step starts. The next step begins once both the fade has finished and the delay has elapsed. A delay of 0 advances as soon as the fade completes.

Steps play in order from the first to the last line; one pass through all lines counts as one repetition for AT+PP=.

5.5 AT+CP? — Get Custom Pattern

Returns the stored custom pattern, one +CP: line per step, followed by a final OK. If no pattern is stored only OK is returned.

AT+CP?
+ CP:63,FF0000,10,500
+ CP:63,000000,10,500
OK 

5.6 AT+CP= — Set Custom Pattern (Prompted)

Syntax:   AT+CP=<line_count>

Parameters: <line_count> is the number of step lines that follow, 1–39.

Begins a prompted custom pattern upload. The device stops any running pattern, discards the previously stored pattern and answers with the prompt >. The host then sends exactly <line_count> step lines, each terminated by a carriage return (\r). After the last expected line has been received the pattern is applied, saved to the configuration and the device answers OK.

AT+CP=2
> 
+ CP:4095,FF0000,5,10
+ CP:4095,000000,5,10
OK 

A line that does not parse is skipped (the last error code is set to 2) and the device keeps waiting for the remaining lines. Lines sent beyond <line_count> are ignored. A count of 40 or more answers ERROR:4; a non-numeric count answers ERROR:2.

5.7 AT+CPD= — Set Custom Pattern (Direct)

Syntax:   AT+CPD=<pattern_lines>

Sets a custom pattern in a single command without the prompt step and works on every channel. The step lines are concatenated in the parameter and separated by the literal twocharacter sequences \r\n (backslash, r, backslash, n), so the whole command stays on one line. Any running pattern is stopped, the old pattern is replaced, and the new one is saved to the configuration.

AT+CPD=+CP:4095,FF0000,5,10\r\n+CP:4095,000000,5,10 
OK

Up to 40 steps are accepted. A malformed line, or a parameter with no valid line, answers ERROR:2; more than 40 lines answers ERROR:4.

5.8 AT+PP? — Get Pattern Play Status

AT+PP?
+PP:1,255 

Here 1 means a pattern is playing and 255 is the repeat count (255 = infinite loop). The values reflect the last AT+PP= command.

5.9 AT+PP= — Play / Stop Pattern

Syntax:   AT+PP=<0-1>,<1-255>

Parameters: First value: 1 = play, 0 = stop. Second value: repeat count; 255 loops forever.

Play the stored pattern five times:

AT+PP=1,5
OK 

Stop pattern playback (the device returns to the solid color):

AT+PP=0,1 
OK

When the repeat count is exhausted the device also returns to the solid color by itself. If no custom pattern is stored, the device answers ERROR:4 (invalid_size); an out-of-range value answers ERROR:2.

5.10 AT+GDPL — Get Default Pattern List

Lists the 25 built-in patterns, one +DPL: line per pattern, followed by a final OK

AT+GDPL
+DPL:0,Police
+DPL:1,Traffic Lights
+DPL:2,Red Flashes
...
+DPL:24,Alert
OK 

5.11 AT+DP= — Load Default Pattern

Syntax:   AT+DP=<pattern_id>

Parameters: <pattern_id> is 0–24 (see AT+GDPL).

Copies a built-in pattern into the custom pattern slot, replacing the stored custom pattern, and saves it to the configuration. Playback is not started; use AT+PP= to play it. AT+CP? afterwards prints the individual steps of the loaded pattern. An unknown ID answers ERROR:2.

AT+DP=23
OK
AT+PP=1,255
OK 

6. Audio Commands

6.1 AT+PLAY? — Get Playback Status

Returns the current MP3 file name, whether it is playing, the requested repeat count, and the current iteration.

AT+PLAY?
+PLAY:notify.mp3,1,2,1

When nothing is playing:

AT+PLAY?
+PLAY:NONE,0,0,0 

6.2 AT+PLAY= — Play MP3 File

Syntax: AT+PLAY=<filename>[,<repeat_count>]

Plays an MP3 file from the storage. The repeat count is optional and defaults to 1.

AT+PLAY=notify.mp3
OK
AT+PLAY=alarm.mp3,3
OK
AT+PLAY=missing.mp3
ERROR:3

6.3 AT+STOP — Stop Playback

AT+STOP
OK 

6.4 AT+VOL? — Get Volume

AT+VOL?
+VOL:80

6.5 AT+VOL= — Set Volume

Syntax:    AT+VOL=<0-100>

AT+VOL=60
OK
AT+VOL=150
ERROR:2 

7. Wi-Fi Commands

7.1 AT+WM? — Get Wi-Fi Mode

Modes:   0 = OFF, 1 = Station, 2 = Access Point, 3 = Station + AP.

AT+WM?
+WM:1 

7.2 AT+WM= — Set Wi-Fi Mode

Syntax:  AT+WM=<mode>

Switches the Wi-Fi mode. Cloud services are stopped when Wi-Fi is turned off and restarted when connectivity returns. In AP modes the local HTTP server is started automatically.

AT+WM=1
OK
AT+WM=0
OK

7.3 AT+STA? — Get Station Status

Returns connection flag, SSID, IP address, and RSSI.

AT+STA?
+STA:1,HomeNetwork,192.168.1.42,-51

When disconnected:

AT+STA?
+STA:0, ,0.0.0.0,0 

7.4 AT+STA= — Connect to Network

Syntax:   AT+STA=<ssid>,<password>

Saves the station credentials. If the device is already in STA or STA+AP mode it reconnects immediately; otherwise switch modes with AT+WM=1.

AT+STA=HomeNetwork,secretpassword
OK
AT+WM=1
OK

7.5 AT+DSTA — Disconnect Station

AT+DSTA
OK 

7.6 AT+GIP — Get IP Address

Returns the station IP address, or 0.0.0.0 when not connected.

AT+GIP
+IP:192.168.1.42

7.7 AT+AP? — Get Access Point Status

Returns the AP SSID and the number of connected stations, or DISABLED when the AP is off.

AT+AP?
+AP:Luxafor-Signal-AP,2

AT+AP?
+AP:DISABLED 

7.8 AT+AP= — Configure Access Point

Syntax:   AT+AP=<ssid>,<password>[,<channel>,<max_conn>,<auth>]

Defaults: channel 6, maximum 4 connections, WPA2-PSK authentication.

Configures and starts the access point. The device switches to AP mode if it is not already in an AP-capable mode.

AT+AP=Luxafor-Signal-AP,ap-password
OK
AT+AP=Luxafor-Signal-AP,ap-password,11,2,3
OK 

7.9 AT+APST? — List AP Stations

Returns the number of stations connected to the AP, followed by one line per station with MAC address, IP address, and RSSI, and a final OK.

AT+APST?
+APST:2
+APST:AA:BB:CC:DD:EE:01,192.168.4.2,-40
+APST:AA:BB:CC:DD:EE:02,192.168.4.3,-63
OK

7.10 AT+APKICK= — Kick Station from AP

Syntax:  AT+APKICK=<mac_address>

AT+APKICK=AA:BB:CC:DD:EE:02
OK

7.11 AT+WSCAN= — Start Wi-Fi Scan

Syntax:   AT+WSCAN=[<ssid_filter>][,<auth_filter>]

Starts an asynchronous Wi-Fi scan. Both filters are optional: the SSID filter is a case insensitive substring match, the auth filter matches the security mode name (e.g. WPA2, OPEN).

Read the results afterwards with AT+WSCAN?.

Scan everything:

AT+WSCAN=
OK

Scan for WPA2 networks whose SSID contains home:

AT+WSCAN=home,WPA2
OK

7.12 AT+WSCAN? — Get Scan Results

Returns the number of matching networks, followed by one line per network with SSID, channel, RSSI, and auth mode, and a final OK. While a scan is still running the device answers with a single +WSCAN:BUSY line.

AT+WSCAN ?
+WSCAN:3
+WSCAN:HomeNetwork,6,-52,WPA2
+WSCAN:CoffeeShop,1,-70,OPEN
+WSCAN:Neighbor,11,-78,WPA/WPA2
OK 

While scanning:

AT+WSCAN?
+WSCAN:BUSY


8. Local Server Commands

8.1 AT+GLHA — Get Local Host Address

Returns the mDNS hostname, IP address, and port of the local HTTP server.

AT+GLHA
+LHA:luxafor_signal-3F2A1B.local,192.168.1.42,8080

8.2 AT+LS? — Get Local Server Status

Returns whether the server is enabled, its port, whether authentication is required, and the current run state (RUNNING or STOPPED).

AT+LS?
+LS:1,8080,1,RUNNING

8.3 AT+LS= — Configure Local Server

Syntax:   AT+LS=<enable>,<port>,<auth_token>

Constraints: The port must be between 80 and 65535. Providing a non-empty token enables authentication.

AT+LS=1,8080,my-secret-token
OK
AT+LS=1,42,token
ERROR:2

8.4 AT+LT? — Get Auth Token

Returns the current local server authentication token. On failure a textual error in the form ERROR:<reason> is returned.

AT+LT
+LT:8f3a1c9e2b7d4056

8.5 AT+LT — Regenerate Auth Token

Generates a new random authentication token and returns it. Clients using the old token must be updated.

AT+LT
+LT:4e7b2d901a5c8f36

9. Error Codes

Failed commands reply with ERROR:<code>. The last error code can also be read back with AT+GLEC.


10. Complete Session Examples

10.1 First-Time Setup

AT
OK
AT+GDN
+DN:luxafor_signal-3F2A1B 
AT+WSCAN=
OK
AT+WSCAN?
+WSCAN:2
+WSCAN:HomeNetwork,6,-52,WPA2
+WSCAN:Neighbor,11,-78,WPA/WPA2
OK
AT+STA=HomeNetwork,secretpassword
OK
AT+WM =1
OK
AT+STA?
+STA:1,HomeNetwork,192.168.1.42,-51

10.2 Uploading and Playing a Sound

AT+GFSS
+FSS:1439744
AT+UF=notify.mp3,48213
> 
<host sends 48213 raw bytes>
OK
AT+VOL=80
OK
AT+PLAY=notify.mp3,2
OK 

10.3 Creating and Playing a Light Pattern

Upload a two-step red flash over USB with the prompted command, play it forever, then stop it:

AT+CP=2
> 
+CP:4095,FF0000,5,10
+CP:4095,FF0000,5,10
OK
AT+PP=1,255
OK
AT+PP?
+PP:1,255
AT+PP=0,1
OK 

The same pattern over the cloud or local HTTP channel, using the direct command, followed by a built-in pattern:

AT+CPD=+CP:4095,FF0000,5,10\r\n+CP:4095,000000,5,10
OK
AT+PP=1,5
OK
AT+GDPL
+DPL:0,Police
...
+DPL:24,Alert
OK
AT+DP=0
OK
AT+CP?
+CP:4032,FF0000,3,20
+ CP:4032,000000,3,20
+ CP:4032,FF0000,3,20
+ CP:4032,000000,3,20
+ CP:63,0000FF,3,20
+ CP:63,000000,3,20
+ CP:63,0000FF,3,20
+ CP:63,000000,3,20
OK
AT+PP=1,255
OK
Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us