{"id":21855726,"url":"https://github.com/qmsk/esp","last_synced_at":"2025-04-14T18:14:19.840Z","repository":{"id":37490282,"uuid":"100892462","full_name":"qmsk/esp","owner":"qmsk","description":"ESP8266/ESP32 FreeRTOS projects","archived":false,"fork":false,"pushed_at":"2025-04-11T16:29:17.000Z","size":2127,"stargazers_count":34,"open_issues_count":15,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-04-14T18:14:14.255Z","etag":null,"topics":["artnet","dmx","esp32","sk6812rgbw","sk9822","ws2811","ws2812b"],"latest_commit_sha":null,"homepage":"","language":"C","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/qmsk.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-08-20T22:32:14.000Z","updated_at":"2025-04-11T16:29:17.000Z","dependencies_parsed_at":"2024-01-26T17:48:55.338Z","dependency_job_id":"b1e470ad-8cab-4a55-a452-85206d539b2a","html_url":"https://github.com/qmsk/esp","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qmsk%2Fesp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qmsk%2Fesp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qmsk%2Fesp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/qmsk%2Fesp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/qmsk","download_url":"https://codeload.github.com/qmsk/esp/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248933340,"owners_count":21185460,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["artnet","dmx","esp32","sk6812rgbw","sk9822","ws2811","ws2812b"],"created_at":"2024-11-28T02:17:40.998Z","updated_at":"2025-04-14T18:14:19.813Z","avatar_url":"https://github.com/qmsk.png","language":"C","funding_links":[],"categories":[],"sub_categories":[],"readme":"ESP8266/32 based Art-NET over WiFi node for RGBW pixel LEDs with support for multiple outputs/universes and additional Web UI, DMX input/output support.\n\n[![Build](https://github.com/qmsk/esp/actions/workflows/build.yml/badge.svg)](https://github.com/qmsk/esp/actions/workflows/build.yml)\n\n# Features\n\n* Single codebase for ESP8266 and ESP32 support\n* Simple two-button + four-led physical interface for configuration reset and basic diagnostics/tests\n* USB Console CLI and HTTP Web UI for configuration and advanced diagnostics (WiP)\n* Fully configurable via the USB Console CLI or HTTP Web UI\n* WiFi STA/AP support with DHCP or static addressing\n* Ethernet support with DHCP client/server or static addressing\n* Support for WS2811/WS2812B, SK6812 RGBW, SK9822 and APA102/P9813 LED protocols\n* Up to four separate SPI, UART or I2S outputs with different protocols\n* GPIO output-enable multiplexing for multiple outputs with a single output peripheral\n* I2C GPIO expander (PCA9534/9554) support for status LEDs, DMX/LED output enables\n* I2S output with a bit-clock signal (SK9822)\n* I2S parallel outputs using ESP-32 I2S1 8-bit mode (memory-efficient)\n* Multiple Art-NET universes per output for \u003e170 LEDs\n* Software power-limiting for LED outputs with configurable total and per-group limits\n* Art-NET poll/discovery support\n* Art-NET sync support (recommended when outputting multiple universes per port)\n* Art-NET DMX seq support (ignore out-of-order packets)\n* Art-NET DMX input (UART)\n* Art-NET DMX outputs (UART) with GPIO output-enable multiplexing\n* ATX-PSU power-enable/good support\n\n# Build\n\n## Web UI\n\nRun the webpack build for the `web-dist` files to be included in the SPIFFS image:\n\n    $ USER_ID=$UID docker compose -f web/docker-compose.yml run --rm npm install\n    $ USER_ID=$UID docker compose -f web/docker-compose.yml run --rm npm run build\n\n## ESP8266\n\nUsing the docker-based [Espressif ESP8266 RTOS SDK](https://github.com/espressif/ESP8266_RTOS_SDK) [v3.4](https://github.com/espressif/ESP8266_RTOS_SDK/releases/tag/v3.4) + patches SDK/toolchain:\n\n    $ docker compose -f projects/esp8266/docker-compose.yml build sdk\n\nBuild firmware images (bootloader + app + web-dist):\n\n    $ USER_ID=$UID docker compose -f projects/esp8266/docker-compose.yml run --rm build\n\nFlash firmware images (bootloader + app + web-dist) to NodeMCU devkit:\n\n    $ ESPPORT=/dev/ttyUSB? docker compose -f projects/esp8266/docker-compose.devices.yml run --rm flash\n\nAccess the USB console:\n\n    $ ESPPORT=/dev/ttyUSB? docker compose -f projects/esp8266/docker-compose.devices.yml run --rm monitor\n\n## ESP32\n\nUsing the docker-based [Espressif ESP-IDF](https://github.com/espressif/esp-idf) [v4.4](https://github.com/espressif/esp-idf/releases/tag/v4.4.4) + patches SDK/toolchain:\n\n    $ BUILD_UID=$(id -u) BUILD_GID=$(id -g) docker compose -f projects/esp32/docker-compose.yml build sdk\n\nBuild firmware images (bootloader + app + web-dist):\n\n    $ docker compose -f projects/esp32/docker-compose.yml run --rm build\n\nFlash firmware images (bootloader + app + web-dist) to the ESP32-devkit:\n\n    $ ESPPORT=/dev/ttyUSB? docker compose -f projects/esp32/docker-compose.devices.yml run --rm flash\n\nAccess the USB console:\n\n    $ ESPPORT=/dev/ttyUSB? docker compose -f projects/esp32/docker-compose.devices.yml run --rm monitor\n\n# Usage\n\nBy default, the ESP8266 will establish an (open) WiFi Access-Point with a `qmsk-esp-******` name.\n\nOnce connected to the `qmsk-esp-******` WiFi network, the integrated Web UI will be available at the matching `http://qmsk-esp-******.local` address.\n\nPlease configure a WiFi password, and optionally a HTTP username/password.\n\n## USB Console\n\nBy default, the ESP8266 will print log messages and open a CLI console on UART0, which can be accessed via the same USB UART used for bootloader flashing:\n\n    ESPPORT=/dev/ttyUSB? docker compose run --rm monitor\n\nIf using the UART0 pins for other IO (e.g. `spi-leds` I2S interface), the console can be closed manually using the `exit` command,\nor automatically at boot using the `timeout` config. The console can be re-started using a short press on the FLASH button;\nthis will re-initiate any configured `timeout`. The console can also be disabled completely using the `enabled` config.\n\nIf using the UART0 peripheral for other IO (e.g. `dmx-input`), the SDK `CONFIG_ESP_CONSOLE_UART_CUSTOM` config must be used to redirect SDK logging output. The UART0 console can still be temporarily activated at boot using the `timeout` config to briefly show logging output and offer the option of opening the CLI, or disabled completely using the `enabled` config.\n\nIf the `timeout` config is used, the console will use the UART0 to prompt the user, before timing out and releasing the UART0:\n\n    ! Use [ENTER] to open console\n\n## User LEDs / Buttons\n\nSupports four LEDs and two buttons for a very basic user interface.\n\nUse the `make menuconfig` -\u003e \"qmsk-esp\" component options to configure how the status LEDs/Buttons are connected.\n\n#### ESP8266\n\nDefaults for NodeMCU ESP8266 devkit, matching the built-in LEDs/buttons on the following pins:\n\n* D0 (GPIO16): USER_LED (active-low with pull-up) -\u003e built-in LED\n* D3 (GPIO0): FLASH_LED (active-low with pull-up) -\u003e built-in BOOT/FLASH button\n* D8 (GPIO15): ALERT_LED (active-high with pull-down)\n\nThe active-low LEDs should be connected from +3.3V to the GPIO pin.\nThe active-high LEDs should be connected from the GPIO pin to GND.\n\n#### ESP32\n\nDefaults for ESP32 devkits, without any built-in LEDs/buttons accessible on the external pins:\n\n* IO2: USER_LED (active-low with internal pull-up)\n* IO4: FLASH_LED (active-low with internal pull-up)\n* IO15: ALERT_LED (active-low with internal pull-up)\n\nThe active-low LEDs should be connected from +3.3V to the GPIO pin.\nThe active-high LEDs should be connected from the GPIO pin to GND.\n\nThe built-in BOOT/FLASH button is connected to IO0 on the ESP32 devkits, but not all devkits break out IO0 on the external pin headers.\n\n### User LED\n\nThe USER LED on GPIO16 (ESP8266) / IO2 (ESP32) is used to indicate network connectivity:\n\n* Off: Boot / reset\n* Fast blinking: WiFi / Ethernet connecting\n* Slow blinking: WiFi / Ethernet disconnected\n* On: WiFi / Ethernet connected\n\n### Flash LED\n\nThe FLASH LED on GPIO0 (ESP8266) / IO4 (ESP32) is used to indicate activity:\n\nFlashes for ~10ms on each LED output / update.\n\n### Flash Button\n\nThe FLASH button on GPIO0 (ESP8266) / GPIO4 (ESP32) is used to trigger config mode or a config reset.\n\nPress the FLASH button briefly until the ALERT LED starts flashing, and release to enter configuration mode. The UART0 console will be activated if stopped, which will block any I2S output.\n\nPress and hold FLASH button for \u003e5s until the ALERT LED stops flashing, and the system will reset the configuration and restart.\n\nIf the FLASH button is held pressed at app boot, the configuration will not be loaded, and the Alert LED will flash slowly to indicate that the default configuration is active. Note that this only applies on a soft reset, if the FLASH button is held at power reset, the bootloader will enter UART flashing mode.\n\n### Alert LED\n\nThe ALERT LED on GPIO15 (ESP8266) / IO15 (ESP32) is used to indicate configuration issues:\n\n* On: Boot failed\n* Slow: Missing configuration\n* Fast: Invalid configuration\n\n### Alert Button (Test)\n\nThe ALERT button on GPIO15 (ESP266) / IO15 (ESP32) is used to initiate the built-in self-test mode:\n\n* Short press: cycle through the test modes manually, leaving them active when released\n* Long press: cycle through the test modes automatically, and clear the test mode when released\n\n## CLI\n\nFrom `help` output:\n\n```\nhelp: Show commands\nsystem info: Print system info\nsystem memory: Print system memory\nsystem partitions: Print system partitions\nsystem status: Print system status\nsystem tasks: Print system tasks\nsystem interfaces: Print system network interfaces\nsystem restart: Restart system\nstatus-leds off: Turn off USER LED\nstatus-leds on: Turn on USER LED\nstatus-leds slow: Blink USER LED slowly\nstatus-leds fast: Blink USER LED fast\nstatus-leds flash: Blink FLASH LED once\nstatus-leds read: Read FLASH button\nstatus-leds alert: Turn on ALERT LED\nspiffs info [LABEL]: Show SPIFFS partition\nspiffs format [LABEL]: Format SPIFFS partition\nvfs ls PATH: List files\nconfig show [SECTION]: Show config settings\nconfig get SECTION NAME: Get config setting\nconfig set SECTION NAME VALUE: Set and write config\nconfig clear SECTION NAME: Clear and write config\nconfig reset: Remove stored config and reset to defaults\nwifi scan [SSID]: Scan available APs\nwifi connect [SSID] [PSK]: Connect AP\nwifi info : Show connected AP\nspi-leds clear : Clear all output values\nspi-leds all RGB [A]: Set all output pixels to value\nspi-leds set OUTPUT INDEX RGB [A]: Set one output pixel to value\ndmx zero COUNT: Output COUNT channels at zero on all output\ndmx all COUNT VALUE: Output COUNT channels at VALUE on all outputs\ndmx out OUTPUT VALUE...: Output given VALUEs as channels on output\ndmx count OUTPUT COUNT: Output COUNT channels with 0..COUNT as value\n```\n\n## Configuration\nFrom `config show`, `GET /config.ini` output:\n\n```\n# Control ATX-PSU based on spi-leds output.\n# The ATX-PSU will be powered on when spi-led outputs are active, and powered off into standby mode if all spi-led outputs are idle (zero-valued).\n[atx_psu]\nenabled = false\ngpio = 0\n# Power off ATX PSU after timeout seconds of idle\ntimeout = 10\n\n# WiFi station mode, connecting to an SSID with optional PSK.\n# Uses DHCP for IPv4 addressing.\n[wifi]\nmode = AP # OFF STA [AP] APSTA\n# For STA mode: minimum threshold for AP provided auth level\n# For AP mode: provided auth level\nauth_mode = WPA2-PSK # OPEN WEP WPA-PSK [WPA2-PSK] WPA-WPA2-PSK WPA3-PSK WPA2-WPA3-PSK\n# For STA mode: connect to AP with given SSID\n# For AP mode: start AP with given SSID, or use default\nssid =\npassword = ***\nhostname =\n\n# HTTP API + Web frontend with optional HTTP basic authentication.\n[http]\nenabled = true\nhost = 0.0.0.0\nport = 80\n# Optional HTTP basic authentication username/password\nusername =\n# Optional HTTP basic authentication username/password\npassword = ***\n\n# Art-Net receiver on UDP port 6454.\n# Art-Net addresses consist of the net (0-127) + subnet (0-15) + universe (0-15). All outputs share the same net/subnet, each output uses a different universe. Up to four outputs are supported.\n[artnet]\nenabled = false\n# Set network address, 0-127.\nnet = 0\n# Set sub-net address, 0-16.\nsubnet = 0\n\n# Control LEDs using synchronous (separate clock/data) serial protocols via Art-Net.\n# Multiple serial outputs can be multiplexed from the same SPI driver by using GPIOs to control an external driver chip with active-high/low output-enable GPIO lines.\n[spi-leds0]\nenabled = false\nprotocol = APA102 # [APA102] P9813\n# Longer cable runs can be noisier, and may need a slower rate to work reliably.\nrate = 1M # 20M 10M 5M 2M [1M] 500K 200K 100K 50K 20K 10K 1K\n# Delay data signal transitions by system clock cycles to offset clock/data transitions and avoid coupling glitches.\ndelay = 0\ncount = 0\n# Multiplex between multiple active-high/low GPIO-controlled outputs\ngpio_mode = OFF # [OFF] HIGH LOW\n# GPIO pin to activate when transmitting on this output\ngpio_pin = 0\nartnet_enabled = false\n# Output from artnet universe (0-15) within [artnet] net/subnet.\nartnet_universe = 0\n# Art-Net DMX channel mode\nartnet_mode = BGR # RGB [BGR] GRB\n\n# Control LEDs using synchronous (separate clock/data) serial protocols via Art-Net.\n# Multiple serial outputs can be multiplexed from the same SPI driver by using GPIOs to control an external driver chip with active-high/low output-enable GPIO lines.\n[spi-leds1]\nenabled = false\nprotocol = APA102 # [APA102] P9813\n# Longer cable runs can be noisier, and may need a slower rate to work reliably.\nrate = 1M # 20M 10M 5M 2M [1M] 500K 200K 100K 50K 20K 10K 1K\n# Delay data signal transitions by system clock cycles to offset clock/data transitions and avoid coupling glitches.\ndelay = 0\ncount = 0\n# Multiplex between multiple active-high/low GPIO-controlled outputs\ngpio_mode = OFF # [OFF] HIGH LOW\n# GPIO pin to activate when transmitting on this output\ngpio_pin = 0\nartnet_enabled = false\n# Output from artnet universe (0-15) within [artnet] net/subnet.\nartnet_universe = 0\n# Art-Net DMX channel mode\nartnet_mode = BGR # RGB [BGR] GRB\n\n# Control LEDs using synchronous (separate clock/data) serial protocols via Art-Net.\n# Multiple serial outputs can be multiplexed from the same SPI driver by using GPIOs to control an external driver chip with active-high/low output-enable GPIO lines.\n[spi-leds2]\nenabled = false\nprotocol = APA102 # [APA102] P9813\n# Longer cable runs can be noisier, and may need a slower rate to work reliably.\nrate = 1M # 20M 10M 5M 2M [1M] 500K 200K 100K 50K 20K 10K 1K\n# Delay data signal transitions by system clock cycles to offset clock/data transitions and avoid coupling glitches.\ndelay = 0\ncount = 0\n# Multiplex between multiple active-high/low GPIO-controlled outputs\ngpio_mode = OFF # [OFF] HIGH LOW\n# GPIO pin to activate when transmitting on this output\ngpio_pin = 0\nartnet_enabled = false\n# Output from artnet universe (0-15) within [artnet] net/subnet.\nartnet_universe = 0\n# Art-Net DMX channel mode\nartnet_mode = BGR # RGB [BGR] GRB\n\n# Control LEDs using synchronous (separate clock/data) serial protocols via Art-Net.\n# Multiple serial outputs can be multiplexed from the same SPI driver by using GPIOs to control an external driver chip with active-high/low output-enable GPIO lines.\n[spi-leds3]\nenabled = false\nprotocol = APA102 # [APA102] P9813\n# Longer cable runs can be noisier, and may need a slower rate to work reliably.\nrate = 1M # 20M 10M 5M 2M [1M] 500K 200K 100K 50K 20K 10K 1K\n# Delay data signal transitions by system clock cycles to offset clock/data transitions and avoid coupling glitches.\ndelay = 0\ncount = 0\n# Multiplex between multiple active-high/low GPIO-controlled outputs\ngpio_mode = OFF # [OFF] HIGH LOW\n# GPIO pin to activate when transmitting on this output\ngpio_pin = 0\nartnet_enabled = false\n# Output from artnet universe (0-15) within [artnet] net/subnet.\nartnet_universe = 0\n# Art-Net DMX channel mode\nartnet_mode = BGR # RGB [BGR] GRB\n\n# DMX output via UART1 -\u003e RS-485 transceiver.\n# Because UART1 TX will spew debug messages reset/flash/boot, avoid DMX glitches by using a GPIO pin that is kept low during reset/boot to drive the RS-485 transceiver's active-high transmit/output-enable.\n[dmx0]\nenabled = false\n# GPIO pin will be taken high to enable output once the UART1 TX output is safe.\ngpio_pin = 0\n# Multiplex between multiple active-high/low GPIO-controlled outputs\ngpio_mode = OFF # [OFF] HIGH LOW\nartnet_enabled = false\n# Output from universe (0-15) within [artnet] net/subnet.\nartnet_universe = 0\n\n# DMX output via UART1 -\u003e RS-485 transceiver.\n# Because UART1 TX will spew debug messages reset/flash/boot, avoid DMX glitches by using a GPIO pin that is kept low during reset/boot to drive the RS-485 transceiver's active-high transmit/output-enable.\n[dmx1]\nenabled = false\n# GPIO pin will be taken high to enable output once the UART1 TX output is safe.\ngpio_pin = 0\n# Multiplex between multiple active-high/low GPIO-controlled outputs\ngpio_mode = OFF # [OFF] HIGH LOW\nartnet_enabled = false\n# Output from universe (0-15) within [artnet] net/subnet.\nartnet_universe = 0\n```\n\n### Configuration Reset\n\nTo recover from a broken configuration, either press and hold the FLASH button, or erase the SPIFFS partition using the USB bootloader:\n\n    ESPPORT=/dev/ttyUSB? docker compose run --rm config-reset\n\n# Components\n\n## `uart1`\n\nSynchronous TX-only UART1 implementation using interrupts and FreeRTOS queues.\n\nWrites bypass the TX queue and interrupt handler if there is room in the hardware FIFO. UART TX interrupt handler empties the queue.\n\nSupports RS232/458 breaks as required for e.g. DMX resets, outputting break/mark for a specified duration.\n\n## `i2s_out`\n\nDMA based I2S output for generating arbitrary (32-bit aligned) bit streams, using interrupts to wait for TX to complete.\n\nDesigned for generating WS2812B data signals.\n\n## `logging`\n\nProvide `DEBUG` / `INFO` / `WARN` / `ERROR` logging with function context.\n\n## `cli`\n\nBasic line buffering from stdin/stdout, evaluating input lines via `cmd`.\n\nSupport for the following ASCII control codes:\n\n* `\\r` (ignored)\n* `\\n` (end of line)\n* `\\b` (wipeout)\n\n## `cmd`\n\nCLI commands with arguments, subcommands, usage help.\n\n## `config`\n\nSupport for reading/writing configuration structs via INI files.\n\nConfig read/write from stdio FILE can be used with SPIFFS, CLI and HTTP handlers.\n\n## `status_led`\n\nSimple GPIO LED blinking.\n\n## `dmx`\n\nDMX input/output support.\n\nUses UART0 alternate RTS/CTS output pins for DMX input.\n\nUses UART1 for DMX output.\n\n## `spi_leds`\n\nControl RGB LEDs using SPI/UART/I2S output interfaces, with protocol support for:\n\n* APA102/SK9822 (SPI)\n* P9813 (SPI)\n* WS2812B / WS2811 (UART, I2S)\n* SK6812-GRBW (UART, I2S)\n\nSupports optional GPIO output for multiplexing a single SPI/UART/I2S output interface between multiple `spi_leds` outputs.\n\n## `artnet`\n\nArt-NET UDP receiver with support for polling/discovery and multiple DMX outputs with sequence numbering support.\n\nSupports local DMX input.\n\n## `json`\n\nStack-based JSON serializer for stdio output.\n\n## `http`\n\nHTTP protocol support.\n\n## `httpserver`\n\nHTTP server support with listeners, routes, requests and responses.\n\n# Features\n\n## `wifi`\n\nConfigure WIFI STA from loaded configuration (SSID, PSK).\n\n### Commands\n\n#### `wifi info`\n```\nStation e8:db:84:94:5a:7e: Connected\n\tBSSID               : aa:bb:cc:dd:ee:ff\n\tSSID                : qmsk-iot\n\tChannel             : 11:0\n\tRSSI                : -60\n\tAuthMode            : WPA2-PSK\n\tPairwise Cipher     : NONE\n\tGroup Cipher        : NONE\n\tFlags               : 11b 11g   \nTCP/IP:\n\tHostname            : espressif\n\tDHCP Client         : STARTED\n\tIP                  : 172.29.16.47\n\tNetmask             : 255.255.0.0\n\tGateway             : 172.29.0.1\n\tDNS (main)          : 172.29.0.1\n\tDNS (backup)        : 0.0.0.0\n\tDNS (fallback)      : 0.0.0.0\n```\n\n#### `wifi scan`\n```\nBSSID            \tSSID                            \tCH:CH\tRSSI\t  AUTHMODE\t     PAIRW/GROUP CIPHFLAGS\nxx:xx:xx:xx:xx:xx\t                                \t11:0 \t-58 \tWPA2-PSK  \tCCMP      /CCMP      bgn  \naa:bb:cc:dd:ee:ff\tqmsk                            \t11:0 \t-60 \tWPA/2-PSK \tTKIP-CCMP /TKIP      bgn  \naa:bb:cc:dd:ee:ff\tqmsk-guest                      \t11:0 \t-61 \tWPA/2-PSK \tTKIP-CCMP /TKIP      bgn  \naa:bb:cc:dd:ee:ff\tqmsk-iot                        \t11:0 \t-61 \tWPA2-PSK  \tCCMP      /CCMP      bgn  \n```\n\n## `eth`\n\nEthernet support using an external PHY.\n\nUse `idf.py menuconfig` -\u003e Component config -\u003e qmsk-esp-eth -\u003e Ethernet board type to select a supported board type:\n\n* WT32-ETH01 (v1.2)\n\nThe `eth` interface can be configured in three modes:\n\n* `NONE` - no IPv4 addressing, the `ip` / `netmask` / `gw` settings are ignored\n* `DHCP_CLIENT` - start DHCP client, the `ip` / `netmask` / `gw` settings are ignored\n* `DHCP_SERVER` - start DHCP server, requires the `ip` / `netmask` / `gw` to be configured\n* `STATIC` - use static IPv4 address, requires the `ip` / `netmask` / `gw` to be configured\n\n## `atx_psu`\n\nControl an ATX PSU `#PS_EN` via GPIO. Powers on the PSU whenever SPI-LED output is active, with a configurable shutdown timeout.\n\n## `artnet`\n\nArt-NET UDP receiver.\n\nSupports up to four Art-NET outputs on the [Art-Net Sub-Net](https://art-net.org.uk/how-it-works/universe-addressing/) matching the higher bits of the configured `universe`. With e.g. `universe = 0`, artnet outputs can use universes 0-15. To use an artnet output universe 16, the `[artnet] universe` must be configured to `16`, and then output universes 16-31 can be used.\n\n## `dmx-input`\n\nArt-NET DMX input via UART2 RX (using UART0 alternate RTS/CTS pins).\n\nThe FLASH LED will blink on DMX updates.\n\nCan be used to control local Art-NET outputs using a configured Art-NET universe.\n\n## `dmx-output`\n\nArt-NET DMX output via UART1 TX.\n\nSupports up to two multiplexed outputs using active-high/low GPIOs.\n\nThe FLASH LED will blink on DMX updates.\n\n## `leds`\n\nArt-NET DMX controller for RGB LEDs.\n\nSupports up to four separate outputs with different interfaces, protocols.\n\nSupports GPIO-multiplexed outputs sharing the same interface peripheral, with external line driver active-high/low output-enable GPIOs.\n\nThe FLASH LED will flash on SPI-LEDs updates.\n\nThe ATX PSU output will enable when any SPI-LEDs are active.\n\nThe *ESP32* I2S output supports arbitrary clock, data and inverted-data output IO pins. Up to 8 data pins can be configured for parallel outputs with a higher refresh rate, at the cost of higher memory usage for DMA buffers (`I2S1` only).\n\nThe *ESP8266* I2S output uses the same IO pins as the UART0 console, and cannot be used while the console is active. Disable the console or set a console timeout to use the I2S output interface.\n\n# HTTP\n\n### `GET /`\n\nLoad the integrated Web UI.\n\n### `GET /config.ini`\n\nReturns the boot config in INI form.\n\n### `POST /config.ini`\n\nLoad the running config from INI form.\n\n### `GET /api/config`\n\nReturns a JSON structure describing the config schema and current values.\n\n### `POST /api/config`\n\nAccepts `application/x-www-form-urlencoded` form parameters in a `[module]name=value` format, as per `config set ...`.\n\n### `GET /api/system`\n\nReturns a JSON object describing the system info, state and status.\n\n* `info`\n* `status`\n* `partitions`\n* `tasks`\n* `interfaces`\n\n### `GET /api/system/tasks`\n\nRefresh the running tasks info.\n\n### `POST /api/system/restart`\n\nRestart the system.\n\n### `GET /api/leds`\n\nReturn LED config/state.\n\n### `POST /api/leds`\n\nAccepts `application/x-www-form-urlencoded` form parameters using the following syntax:\n* `index=%d` (1-4)\n* `all=%x[.%x]` (`RRGGBB` or `RRGGBB.XX`)\n* `%u=%x[.%x]` (`RRGGBB` or `RRGGBB.XX`)\n\nThe `.XX` suffix is optional, and the interpretation depends on the protocol, per the `GET /api/leds` -\u003e `color_parameter` field:\n* `NONE`: not used\n* `DIMMER`: 0-255 controls the LED brightness\n* `WHITE`: 0-255 controls the white LED\n\n### `GET /api/leds/test`\n\nReturns `[{\"mode\": ...}]` parameters usable for `POST`.\n\n### `POST /api/leds/test`\n\nAccepts `application/x-www-form-urlencoded` form parameters using the following syntax:\n\n* `index=%d` (1-4)\n* `mode=%s` (see `GET /api/leds/test`)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqmsk%2Fesp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fqmsk%2Fesp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fqmsk%2Fesp/lists"}