Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
32 changes: 16 additions & 16 deletions docs/gettingstarted/installer.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,22 +10,22 @@ For a step-by-step instruction, go to <a href="https://moonmodules.org/MoonLight

MoonLight v0.6.0, 7 November 2025

| Name | Image* | Flash | Shop | Board presets |
|------|--------|-------|------|---------------|
| esp32-s3-devkitc-1-n8r8v | ![esp32-s3-devkitc-1-n8r8v](../firmware/installer/images/esp32-s3-devkitc-1-n8r8v.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-s3-devkitc-1-n8r8v.json"></esp-web-install-button> | | esp32-s3-stephanelec-16p ![esp32-s3-stephanelec-16p](../firmware/installer/images/esp32-s3-stephanelec-16p.jpg){: style="width:100px"} |
| esp32-s3-devkitc-1-n16r8v | ![esp32-s3-devkitc-1-n16r8v](../firmware/installer/images/esp32-s3-devkitc-1-n8r8v.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-s3-devkitc-1-n16r8v.json"></esp-web-install-button> | [Ali*](https://s.click.aliexpress.com/e/_DBAtJ2H){:target="_blank"} | |
| esp32-s3-atoms3r | ![esp32-s3-atoms3r](../firmware/installer/images/esp32-s3-atoms3r.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-s3-atoms3r.json"></esp-web-install-button> | [M5Stack store](https://shop.m5stack.com/products/atoms3r-dev-kit){:target="_blank"} | |
| esp32-s3-zero-n4r2 | ![esp32-s3-zero-n4r2](../firmware/installer/images/esp32-s3-zero-n4r2.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-s3-zero-n4r2.json"></esp-web-install-button> | [Ali*](https://s.click.aliexpress.com/e/_EukjHX8){:target="_blank"} | |
| esp32-p4-nano | ![esp32-p4-nano](../firmware/installer/images/esp32-p4-nano.jpg){: style="width:100px"} | [esp32-c6-firmware-update](https://esp32-c6-firmware-update.github.io/) * <br><esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-p4-nano.json"></esp-web-install-button> | [Waveshare](https://www.waveshare.com/esp32-p4-nano.htm){:target="_blank"} | |
| esp32-d0-wrover | ![esp32-d0-wrover](../firmware/installer/images/esp32-d0-wrover.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-d0-wrover.json"></esp-web-install-button> | [Ali*](https://a.aliexpress.com/_EzhPi6g){:target="_blank"} | |
| esp32-d0-wrover-moonbase | ![esp32-d0-wrover](../firmware/installer/images/esp32-d0-wrover.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-d0-wrover-moonbase.json"></esp-web-install-button> | [Ali*](https://a.aliexpress.com/_EzhPi6g){:target="_blank"} | |
| esp32-d0-16mb | ![esp32-d0-16mb](../firmware/installer/images/esp32-d0-16mb.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-d0-16mb.json"></esp-web-install-button> | [Serg74](https://www.tindie.com/products/serg74/esp32-wroom-usb-c-d1-mini32-form-factor-board/){:target="_blank"} | |
| esp32-d0 | ![esp32-d0](../firmware/installer/images/esp32-d0.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-d0.json"></esp-web-install-button> | | |
| esp32-d0-moonbase | ![esp32-d0](../firmware/installer/images/esp32-d0.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-d0-moonbase.json"></esp-web-install-button> | | |
| esp32-p4-olimex 🚧 | ![esp32-p4-olimex](../firmware/installer/images/esp32-p4-olimex.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-p4-olimex.json"></esp-web-install-button> | [Olimex](https://www.olimex.com/Products/IoT/ESP32-P4/ESP32-P4-DevKit/open-source-hardware){:target="_blank"} | |
| esp32-c3-devkitm-1 | ![esp32-c3-devkitm-1](../firmware/installer/images/esp32-c3-devkitm-1.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-c3-devkitm-1.json"></esp-web-install-button> | [Ali*](https://s.click.aliexpress.com/e/_EIl7NKw){:target="_blank"} | |
| esp32-c3-supermini | ![esp32-c3-supermini](../firmware/installer/images/esp32-c3-supermini.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-c3-supermini.json"></esp-web-install-button> | [Ali*](https://s.click.aliexpress.com/e/_EIl7NKw){:target="_blank"} | |
| others | ![others](../firmware/installer/images/others.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest.json"></esp-web-install-button> | | |
| Name | Image* | Flash | Shop & Board presets |
|------|--------|-------|----------------------|
| esp32-d0 | ![esp32-d0](../firmware/installer/images/esp32-d0.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-d0.json"></esp-web-install-button> | [Dig Uno](https://quinled.info/pre-assembled-quinled-dig-uno/):<br>![Dig Uno](https://quinled.info/wp-content/uploads/2020/02/QuinLED-Dig-Uno-v3_front.png){: style="width:100px"}<br>[Dig Quad](https://quinled.info/pre-assembled-quinled-dig-quad/):<br>![Dig Quad](https://quinled.info/wp-content/uploads/2021/11/QuinLED-Dig-Quad-AB_v3r1-2048x1154.png){: style="width:100px"} |
| esp32-d0-16mb | ![esp32-d0-16mb](../firmware/installer/images/esp32-d0-16mb.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-d0-16mb.json"></esp-web-install-button> | [Dig Octa](https://quinled.info/quinled-dig-octa/):<br>![Dig Octa](https://quinled.info/wp-content/uploads/2024/10/20240924_141857-2048x1444.png){: style="width:100px"}<br>[Serg ESP32](https://www.tindie.com/products/serg74/esp32-wroom-usb-c-d1-mini32-form-factor-board/){:target="_blank"} and [Shield](https://www.tindie.com/products/serg74/wled-shield-board-for-addressable-leds/)<br>![Shield](https://cdn.tindiemedia.com/images/resize/44YE-eNQ9pJQUh_SmtwwfBXFbAE=/p/fit-in/1370x912/filters:fill(fff)/i/93057/products/2021-08-14T14%3A44%3A14.418Z-shield_v3-1.jpg?1628927139){: style="width:100px"} |
| esp32-s3-devkitc-1-n8r8v | ![esp32-s3-devkitc-1-n8r8v](../firmware/installer/images/esp32-s3-devkitc-1-n8r8v.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-s3-devkitc-1-n8r8v.json"></esp-web-install-button> | SE-16p<br>![SE-16p](../firmware/installer/images/esp32-s3-stephanelec-16p.jpg){: style="width:100px"} |
| esp32-s3-devkitc-1-n16r8v | ![esp32-s3-devkitc-1-n16r8v](../firmware/installer/images/esp32-s3-devkitc-1-n8r8v.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-s3-devkitc-1-n16r8v.json"></esp-web-install-button> | [Ali*](https://s.click.aliexpress.com/e/_DBAtJ2H){:target="_blank"} |
| esp32-s3-atoms3r | ![esp32-s3-atoms3r](../firmware/installer/images/esp32-s3-atoms3r.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-s3-atoms3r.json"></esp-web-install-button> | [M5Stack store](https://shop.m5stack.com/products/atoms3r-dev-kit){:target="_blank"} |
| esp32-s3-zero-n4r2 | ![esp32-s3-zero-n4r2](../firmware/installer/images/esp32-s3-zero-n4r2.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-s3-zero-n4r2.json"></esp-web-install-button> | [Ali*](https://s.click.aliexpress.com/e/_EukjHX8){:target="_blank"} |
| esp32-p4-nano | ![esp32-p4-nano](../firmware/installer/images/esp32-p4-nano.jpg){: style="width:100px"} | [esp32-c6-firmware-update](https://esp32-c6-firmware-update.github.io/) * <br><esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-p4-nano.json"></esp-web-install-button> | [Waveshare](https://www.waveshare.com/esp32-p4-nano.htm){:target="_blank"} <br>[ESP32-P4 shield](https://shop.myhome-control.de/en/ABC-WLED-ESP32-P4-shield/HW10027):<br>![ESP32-P4 shield](https://shop.myhome-control.de/thumbnail/ed/a1/f1/1762031307/WLED_ESP32_P4_Shield_04_1920x1354.jpg?ts=1762031316){: style="width:100px"} |
| esp32-d0-wrover | ![esp32-d0-wrover](../firmware/installer/images/esp32-d0-wrover.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-d0-wrover.json"></esp-web-install-button> | [Ali*](https://a.aliexpress.com/_EzhPi6g){:target="_blank"} |
| esp32-d0-wrover-moonbase | ![esp32-d0-wrover](../firmware/installer/images/esp32-d0-wrover.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-d0-wrover-moonbase.json"></esp-web-install-button> | [Ali*](https://a.aliexpress.com/_EzhPi6g){:target="_blank"} |
| esp32-d0-moonbase | ![esp32-d0](../firmware/installer/images/esp32-d0.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-d0-moonbase.json"></esp-web-install-button> | |
| esp32-p4-olimex 🚧 | ![esp32-p4-olimex](../firmware/installer/images/esp32-p4-olimex.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-p4-olimex.json"></esp-web-install-button> | [Olimex](https://www.olimex.com/Products/IoT/ESP32-P4/ESP32-P4-DevKit/open-source-hardware){:target="_blank"} |
| esp32-c3-devkitm-1 | ![esp32-c3-devkitm-1](../firmware/installer/images/esp32-c3-devkitm-1.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-c3-devkitm-1.json"></esp-web-install-button> | [Ali*](https://s.click.aliexpress.com/e/_EIl7NKw){:target="_blank"} |
| esp32-c3-supermini | ![esp32-c3-supermini](../firmware/installer/images/esp32-c3-supermini.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest_esp32-c3-supermini.json"></esp-web-install-button> | [Ali*](https://s.click.aliexpress.com/e/_EIl7NKw){:target="_blank"} |
| others | ![others](../firmware/installer/images/others.jpg){: style="width:100px"} | <esp-web-install-button manifest="https://moonmodules.org/MoonLight/firmware/installer/manifest.json"></esp-web-install-button> | |

* Most recommended boards are listed first. If your board isn't listed here, try 'others'
* Images are examples, especially the esp32-d0 has many variants. Look at the esp32 chip on the board to find out what type it is.
Expand Down
32 changes: 25 additions & 7 deletions docs/moonbase/inputoutput.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,13 @@ For each board the following presets are defined:

* Modded: if any change to the default preset is made.
* Max Power: adjust the brightness to approach this max power, depending on the number of LEDs used.
* Jumper1: If the board contains a jumper, it can define pin behaviour. Eg. select between Infrared and Ethernet.
* Pins: This module is the central place to assign functionality to gpio pins. Other modules and nodes use the pin assignments made here.

* Per pin:
* GPIO = gpio_num;
* Usage: Can be updated, see below
* Usage: See below
* Index: specify first, second, third, ... usage output, e.g. LED D01 to LED D16
* Summary
* Valid (✅)
* Output (💡)
Expand All @@ -29,11 +31,11 @@ For each board the following presets are defined:
## Pin usage

* Supported
* LEDs DIO 01 to 20
* LEDs
* Voltage
* Current
* Infrared
* Button On/Off
* Button LightsOn: sets on/off in [Light Control](https://moonmodules.org/MoonLight/moonlight/lightscontrol/)
* Planned soon
* Battery
* Relay brightness
Expand All @@ -44,7 +46,23 @@ For each board the following presets are defined:

## Naming convention

- MCU: The ESP32 chip
- MCU-Board: MCU on a PCB
- Carrier Board: MCU-board + connectors...
- Device: All of the above in a box
- MicroController (MCU): The ESP32 chip
- MCU-Board (MCB): MCU on a PCB
- Carrier Board (CRB): board that the MCU-board plugs into (Or shield or controller board or interface board)
- Device (DVC): All of the above in a box with connectors

## Board details

### QuinLed boards

* Choose the esp32-d0 (4MB) board in the [MoonLight Installer](https://moonmodules.org/MoonLight/gettingstarted/installer/)
* On first install, erase flash first as MoonLight uses a partition scheme with 3MB of flash (no ota at the moment).
* You might need to reset your router if you first run WLED on the same MCU and no new IP is assigned.

!!! Tip
Dig Uno: Remove fuse to connect USB cable to flash the board.

### SE16 v1

* Choose the esp32-s3-devkitc-1-n8r8v board in the [MoonLight Installer](https://moonmodules.org/MoonLight/gettingstarted/installer/)
* Set jumper1 the same as you set it on the board: on: Infrared, off: Ethernet
1 change: 0 additions & 1 deletion firmware/esp32-p4.ini
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ upload_speed = 921600
; monitor_speed = 115200
build_flags = ${esp32-p4-base.build_flags}
-Wl,-wrap,esp_dma_capable_malloc ;; makes SDIO for ESP-Hosted use PSRAM if available.
; -D FT_ETHERNET=1 ; 🚧 not implemented yet

lib_deps = ${esp32-p4-base.lib_deps}
; RAM: [= ] 11.2% (used 36580 bytes from 327680 bytes)
Expand Down
1 change: 0 additions & 1 deletion firmware/esp32-s3.ini
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,6 @@ board_build.extra_flags =
-DBOARD_HAS_PSRAM
build_flags = ${esp32-s3-base.build_flags}
-D LOLIN_WIFI_FIX ; some boards have wifi issues if this is not defined, this sets WIFI_POWER_8_5dBm
; -D FT_ETHERNET=1 ; 🚧 not implemented yet
; -D USE_M5UNIFIED=1 ;for MoonManEffect (but low on heap) crashes on this board
lib_deps = ${esp32-s3-base.lib_deps}
; m5stack/M5Unified ;for MoonManEffect (but low on heap)
Expand Down
42 changes: 25 additions & 17 deletions interface/src/lib/components/moonbase/MultiRow.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -115,21 +115,25 @@
return data[property.name]
.map((item: any, index: number) => ({ item, originalIndex: index }))
.filter(({ item }: { item: any }) => {
const matchFound = property.n.slice(0, 3).some((propertyN: any) => {
let valueStr;

if (
propertyN.values &&
Array.isArray(propertyN.values) &&
isNumber(item[propertyN.name])
) {
valueStr = propertyN.values[item[propertyN.name]];
} else {
valueStr = item[propertyN.name];
}

return String(valueStr).toLowerCase().includes(query);
});
const matchFound = property.n
.filter((propertyN: any, index: number) => {
return index < 3 || propertyN.show === true;
})
.some((propertyN: any) => {
let valueStr;

if (
propertyN.values &&
Array.isArray(propertyN.values) &&
isNumber(item[propertyN.name])
) {
valueStr = propertyN.values[item[propertyN.name]];
} else {
valueStr = item[propertyN.name];
}

return String(valueStr).toLowerCase().includes(query);
});

return isNegated ? !matchFound : matchFound;
});
Expand Down Expand Up @@ -195,7 +199,9 @@
items={filteredItems}
onReorder={handleReorder}
class="space-y-2"
dragDisabled={!(findItemInDefinition?.crud == null || findItemInDefinition?.crud?.includes('s'))}
dragDisabled={!(
findItemInDefinition?.crud == null || findItemInDefinition?.crud?.includes('s')
)}
>
{#snippet children({ item: itemWrapper }: { item: any })}
<!-- svelte-ignore a11y_click_events_have_key_events -->
Expand All @@ -204,7 +210,9 @@
<Grip class="h-6 w-6 text-base-content/30 cursor-grab flex-shrink-0" />
{/if}
<!-- Show the first 3 fields -->
{#each property.n.slice(0, 3) as propertyN}
{#each property.n.filter((propertyN: any, index: any) => {
return index < 3 || propertyN.show === true;
}) as propertyN}
{#if propertyN.type != 'array' && propertyN.type != 'controls' && propertyN.type != 'password'}
<MultiInput
property={propertyN}
Expand Down
2 changes: 1 addition & 1 deletion lib/framework/ESP32SvelteKit.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,7 @@ void ESP32SvelteKit::begin()
_wifiSettingsService.initWiFi();

// SvelteKit uses a lot of handlers, so we need to increase the max_uri_handlers
// WWWData has 77 Endpoints, Framework has 27, and Lighstate Demo has 4
// WWWData has 77->27!! Endpoints, Framework has 27, and each module has 4 // 🌙 updated numbers
_server->config.max_uri_handlers = _numberEndpoints;
_server->listen(80);

Expand Down
21 changes: 12 additions & 9 deletions lib/framework/EthernetSettingsService.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -83,17 +83,20 @@ void EthernetSettingsService::configureNetwork(ethernet_settings_t &network)
ETH.config(INADDR_NONE, INADDR_NONE, INADDR_NONE);
}
// (re)start ethernet
#if CONFIG_IDF_TARGET_ESP32
// 🌙 compiler directives to variables
#ifdef CONFIG_IDF_TARGET_ESP32S3
if (v_ETH_SPI_SCK != UINT8_MAX) {
// For SPI based ethernet modules like W5500, ENC28J60 etc.
SPI.begin(v_ETH_SPI_SCK, v_ETH_SPI_MISO, v_ETH_SPI_MOSI);
ETH.begin(v_ETH_PHY_TYPE, v_ETH_PHY_ADDR, v_ETH_PHY_CS, v_ETH_PHY_IRQ, v_ETH_PHY_RST, SPI);
}
else
ETH.begin();
#elif defined(CONFIG_IDF_TARGET_ESP32P4)
ETH.begin(); // for the time being, todo: setup in P4
#else // CONFIG_IDF_TARGET_ESP32, what about S2/C3 ...
// ESP32 chips with built-in ethernet MAC/PHY
ETH.begin();
#elif CONFIG_IDF_TARGET_ESP32P4
// todo: setup in P4
#else
#ifdef ETH_PHY_TYPE //only if defined
// For SPI based ethernet modules like W5500, ENC28J60 etc.
SPI.begin(ETH_SPI_SCK, ETH_SPI_MISO, ETH_SPI_MOSI);
ETH.begin(ETH_PHY_TYPE, ETH_PHY_ADDR, ETH_PHY_CS, ETH_PHY_IRQ, ETH_PHY_RST, SPI);
#endif
#endif
// set hostname (again) after (re)starting ethernet due to a bug in the ESP-IDF implementation
ETH.setHostname(_state.hostname.c_str());
Expand Down
15 changes: 14 additions & 1 deletion lib/framework/EthernetSettingsService.h
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@

#define ETHERNET_EVENT_DELAY 500

#define ETHERNET_SETTINGS_FILE "/.config/ethernetSettings.json"
#define ETHERNET_SETTINGS_FILE "/.config/ethernetSettings.json" // 🌙 MoonLight uses .config (hidden)
#define ETHERNET_SETTINGS_SERVICE_PATH "/rest/ethernetSettings"

#define EVENT_ETHERNET "ethernet"
Expand Down Expand Up @@ -110,6 +110,19 @@ class EthernetSettingsService : public StatefulService<EthernetSettings>
String getHostname();
String getIP();

// 🌙 compiler directives to variables
#ifdef CONFIG_IDF_TARGET_ESP32S3
uint8_t v_ETH_SPI_SCK = UINT8_MAX; //42; v_ETH_SPI_SCK is check if configured, see configureNetwork and ModuleIO
uint8_t v_ETH_SPI_MISO = 44;
uint8_t v_ETH_SPI_MOSI = 43;

eth_phy_type_t v_ETH_PHY_TYPE = ETH_PHY_W5500; //currently only one supported for S3 ...
int32_t v_ETH_PHY_ADDR = 1;
int v_ETH_PHY_CS = 41;
int v_ETH_PHY_IRQ = 2; // -1 if you won't wire
int v_ETH_PHY_RST = 1; // -1 if you won't wire
#endif

private:
PsychicHttpServer *_server;
SecurityManager *_securityManager;
Expand Down
Loading