mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-10-04 22:35:08 +00:00
* fix(web): accept every panel size and row address type the rgbmatrix library does The Display form capped columns at 128 and chain length at 24, and its submit handler (fixInvalidNumberInputs) rewrote anything larger to the cap, so wide panels and long chains silently saved as the wrong size. The config API checked none of the hardware numbers, so values the library rejects (odd rows, parallel 4, PWM dither bits 3) saved and the matrix then refused to start. - Form limits now match the pinned library: rows even 8-64, cols >= 16 and chain_length >= 1 with no upper bound, parallel 1-3, PWM dither bits 0-2, PWM LSB nanoseconds 50-3000. - save_main_config rejects out-of-range rows, cols, chain_length, parallel, brightness, scan_mode, pwm_bits, pwm_dither_bits, pwm_lsb_nanoseconds and gpio_slowdown with a 400. - A stored gpio_slowdown or pwm_dither_bits of 0 renders as 0 instead of the default, so saving the tab no longer overwrites it. - Row Address Type offers 5 (SM5368 / B707 row shift register). Verified on a Waveshare 96x48 V2 (24S-A1) on a Pi 4 with the Adafruit Triple LED Matrix Bonnet: rows 48, cols 96, row address type 5, BGR, GPIO slowdown 8. - Help text and docs: FM6124-family panels use Panel Type Standard; on a Pi 5 the library supports only row address types 0 and 2. No change to the rpi-rgb-led-matrix submodule. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(web): drop the rows cap and document every display setting accurately Rows: no upper limit in the form or the API. Still even and at least 8. The current rgbmatrix library rejects more than 64 per panel, so a larger value saves but the matrix won't start; the help tip, README, config reference and troubleshooting section all say so, and nothing here needs changing if the library lifts the limit. limit_refresh_rate_hz: the form accepts 0 (the library's "no cap"), a stored 0 no longer renders and re-saves as 120, and the API rejects negatives. pwm_dither_bits stays 0-2: the library rejects 3 and 4, so the old form's 0-4 only ever let users save a config the display couldn't start with. Docs and help tips, checked against the pinned library and its README: - panel_type and rp1_rio get README entries - show_refresh_rate prints to stdout; it never drew on the panel - dither bits raise the refresh rate; the tip said they lowered it - scan_mode is about interlacing at low refresh, not wrong colours - disable_hardware_pulsing: hardware pulsing needs OE on GPIO 18 and the onboard sound driver off; software timing makes rows flash brighter - gpio_slowdown guidance agrees between the README and the UI - all 22 multiplexing values listed; every numeric setting states its range - troubleshooting for a blank panel after a settings change, jumping rows and brightness flashes Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * fix(web): reject true and 5.5 for row_address_type and multiplexing Both still went straight through int(), so a JSON true saved as 1 and 5.5 as 5. They now use the shared hardware range check like the other panel fields. Review feedback on #586. Also: the RP1 Backend tooltip said it is ignored on Pi 3/4 (it is ignored on every model but the Pi 5), and the README gave the dynamic-duration default cap as 90s; the code default is 180s. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> * feat: refuse matrix settings a Raspberry Pi 5 can't drive On a Pi 5 the pinned rgbmatrix library drives the panel through the RP1 chip, and that path supports only row address types 0 and 2, parallel 1-3 and the regular / regular-pi1 / classic / adafruit-hat(-pwm) mappings (Rp1PioConfigSupported in lib/rp1/rp1_pio_backend.cc). For anything else CreateFromOptions returns NULL; the Python binding doesn't check, so the display process crashed on its first call into the matrix and systemd restarted it into the same crash every 10 seconds. - src/pi5_matrix_support.py: the rule and Pi 5 detection, matching the library's /proc/device-tree/model check - DisplayManager raises before creating the matrix, so it is a logged init failure (reported by /api/v3/hardware/status) and fallback mode - the config API rejects those settings on a Pi 5 when a request sets row_address_type, parallel or hardware_mapping - the Display form offers only row address types 0 and 2 on a Pi 5, and warns when a stored value can't be used - CLAUDE.md: re-check the rule whenever the submodule is bumped Review feedback on #586. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
364 lines
11 KiB
Markdown
364 lines
11 KiB
Markdown
# Getting Started with LEDMatrix
|
||
|
||
## Welcome
|
||
|
||
This guide will help you set up your LEDMatrix display for the first time and get it running in under 30 minutes.
|
||
|
||
---
|
||
|
||
## Prerequisites
|
||
|
||
**Hardware:**
|
||
- Raspberry Pi (3, 4, or 5 recommended)
|
||
- RGB LED Matrix panel (32x64 or 64x64)
|
||
- Adafruit RGB Matrix HAT or similar
|
||
- Power supply (5V, 4A minimum recommended)
|
||
- MicroSD card (16GB minimum)
|
||
|
||
**Network:**
|
||
- WiFi network (or Ethernet cable)
|
||
- Computer with web browser on same network
|
||
|
||
---
|
||
|
||
## Quick Start
|
||
|
||
### 1. Install LEDMatrix
|
||
|
||
There is no prebuilt SD card image — you install LEDMatrix onto stock
|
||
Raspberry Pi OS Lite yourself:
|
||
|
||
1. Flash Raspberry Pi OS Lite to the MicroSD card (Raspberry Pi Imager)
|
||
2. Connect the LED matrix to your Raspberry Pi, insert the card, and
|
||
power on
|
||
3. SSH into the Pi and run the one-shot installer:
|
||
```bash
|
||
curl -fsSL https://raw.githubusercontent.com/ChuckBuilds/LEDMatrix/main/scripts/install/one-shot-install.sh | bash
|
||
```
|
||
or clone the repo and run `sudo ./first_time_install.sh` — see the
|
||
[README Installation Steps / Quick Install](../README.md#installation-steps)
|
||
for full details
|
||
|
||
**Expected Behavior after install:**
|
||
- LED matrix will light up
|
||
- A fresh install ships only the bundled `starlark-apps` and
|
||
`web-ui-info` plugins — clock, weather, sports, etc. must be
|
||
installed from the Plugin Store (web UI → Plugin Manager) before
|
||
anything else displays
|
||
- Pi creates WiFi network "LEDMatrix-Setup" if not connected
|
||
|
||
### 2. Connect to WiFi
|
||
|
||
**If you see "LEDMatrix-Setup" WiFi network:**
|
||
1. Connect your device to "LEDMatrix-Setup" (open network, no password)
|
||
2. Open browser to: `http://192.168.4.1:5000`
|
||
3. Navigate to the WiFi tab
|
||
4. Click "Scan" to find your WiFi network
|
||
5. Select your network, enter password
|
||
6. Click "Connect"
|
||
7. Wait for connection (LED matrix will show confirmation)
|
||
|
||
**If already connected to WiFi:**
|
||
1. Find your Pi's IP address (check your router, or run `hostname -I` on the Pi)
|
||
2. Open browser to: `http://your-pi-ip:5000`
|
||
|
||
### 3. Access the Web Interface
|
||
|
||
Once connected, access the web interface:
|
||
|
||
```
|
||
http://your-pi-ip:5000
|
||
```
|
||
|
||
You should see:
|
||
- Overview tab with system stats
|
||
- Live display preview
|
||
- Quick action buttons
|
||
|
||
---
|
||
|
||
## Initial Configuration (15 Minutes)
|
||
|
||
### Step 1: Configure Display Hardware
|
||
|
||
1. Open the **Display** tab
|
||
2. Set your matrix configuration:
|
||
- **Rows**: match your panel — commonly 32 or 64; any even number
|
||
from 8 to 64
|
||
- **Columns**: match your panel — commonly 64 or 96; at least 16,
|
||
with no upper limit
|
||
- **Chain Length**: Number of panels chained horizontally
|
||
- **Hardware Mapping**: usually `adafruit-hat-pwm` (with the PWM jumper
|
||
mod) or `adafruit-hat` (without). See the root README for the full list.
|
||
- **Brightness**: 70–90 is fine for indoor use
|
||
3. Click **Save**
|
||
4. From the **Overview** tab, click **Restart Display Service** to apply
|
||
|
||
**Tip:** if the display shows garbage or nothing, the most common culprits
|
||
are an incorrect `hardware_mapping`, a `gpio_slowdown` value that doesn't
|
||
match your Pi model, or panels needing the E-line mod. See
|
||
[TROUBLESHOOTING.md](TROUBLESHOOTING.md).
|
||
|
||
### Step 2: Set Timezone and Location
|
||
|
||
1. Open the **General** tab
|
||
2. Set your timezone (e.g., `America/New_York`) and location
|
||
3. Click **Save**
|
||
|
||
Correct timezone ensures accurate time display, and location is used by
|
||
weather and other location-aware plugins.
|
||
|
||
### Step 3: Install Plugins
|
||
|
||
1. Open the **Plugin Manager** tab
|
||
2. Scroll to the **Plugin Store** section to browse available plugins
|
||
3. Click **Install** on the plugins you want
|
||
4. Wait for installation to finish — installed plugins appear in the
|
||
**Installed Plugins** section above and get their own tab in the second
|
||
nav row
|
||
5. Toggle the plugin to enabled
|
||
6. From **Overview**, click **Restart Display Service**
|
||
|
||
You can also install community plugins straight from a GitHub URL using the
|
||
**Install from GitHub** section further down the same tab — see
|
||
[PLUGIN_STORE_GUIDE.md](PLUGIN_STORE_GUIDE.md) for details.
|
||
|
||
### Step 4: Configure Plugins
|
||
|
||
1. Each installed plugin gets its own tab in the second navigation row
|
||
2. Open that plugin's tab to edit its settings (favorite teams, API keys,
|
||
update intervals, etc.)
|
||
3. Click **Save**
|
||
4. Restart the display service from **Overview** so the new settings take
|
||
effect
|
||
|
||
**Note:** how long each plugin stays on screen is not set in the
|
||
plugin's own tab — use the **Rotation** tab's **Screen Durations**
|
||
section instead (saved to `display.display_durations` in
|
||
`config.json`).
|
||
|
||
**Example: Weather Plugin**
|
||
- Set your location (city, state, country)
|
||
- Add an API key from OpenWeatherMap (free signup) to
|
||
`config/config_secrets.json` or directly in the plugin's config screen
|
||
- Set the update interval (300 seconds is reasonable)
|
||
|
||
---
|
||
|
||
## Testing Your Display
|
||
|
||
### Run a single plugin on demand
|
||
|
||
The fastest way to verify a plugin works without waiting for the rotation:
|
||
|
||
1. Open the plugin's tab (second nav row)
|
||
2. Scroll to **On-Demand Controls**
|
||
3. Click **Run On-Demand** — the plugin runs immediately even if disabled
|
||
4. Click **Stop On-Demand** to return to the normal rotation
|
||
|
||
### Check the live preview and logs
|
||
|
||
- The **Overview** tab shows a **Live Display Preview** that mirrors what's
|
||
on the matrix in real time — handy for debugging without looking at the
|
||
panel.
|
||
- The **Logs** tab streams the display and web service logs. Look for
|
||
`ERROR` lines if something isn't working; normal operation just shows
|
||
`INFO` messages about plugin rotation.
|
||
|
||
---
|
||
|
||
## Common First-Time Issues
|
||
|
||
### Display Not Showing Anything
|
||
|
||
**Check:**
|
||
1. Power supply connected and adequate (5V, 4A minimum)
|
||
2. LED matrix connected to the bonnet/HAT correctly
|
||
3. Display service running: `sudo systemctl status ledmatrix`
|
||
4. Hardware configuration matches your matrix (rows/cols/chain length)
|
||
|
||
**Fix:**
|
||
1. Restart from the **Overview** tab → **Restart Display Service**
|
||
2. Or via SSH: `sudo systemctl restart ledmatrix`
|
||
|
||
### Web Interface Won't Load
|
||
|
||
**Check:**
|
||
1. Pi is connected to network: `ping your-pi-ip`
|
||
2. Web service running: `sudo systemctl status ledmatrix-web`
|
||
3. Correct port: the web UI listens on `:5000`
|
||
4. Firewall not blocking port 5000
|
||
|
||
**Fix:**
|
||
1. Restart web service: `sudo systemctl restart ledmatrix-web`
|
||
2. Check logs: `sudo journalctl -u ledmatrix-web -n 50`
|
||
|
||
### Plugins Not Showing
|
||
|
||
**Check:**
|
||
1. Plugin is enabled (toggle on the **Plugin Manager** tab)
|
||
2. Display service was restarted after enabling
|
||
3. Plugin's display duration is non-zero
|
||
4. No errors in the **Logs** tab for that plugin
|
||
|
||
**Fix:**
|
||
1. Enable the plugin from **Plugin Manager**
|
||
2. Click **Restart Display Service** on **Overview**
|
||
3. Check the **Logs** tab for plugin-specific errors
|
||
|
||
### Weather Plugin Shows "No Data"
|
||
|
||
**Check:**
|
||
1. API key configured (OpenWeatherMap)
|
||
2. Location is correct (city, state, country)
|
||
3. Internet connection working
|
||
|
||
**Fix:**
|
||
1. Sign up at openweathermap.org (free)
|
||
2. Add API key to config_secrets.json or plugin config
|
||
3. Restart display
|
||
|
||
---
|
||
|
||
## Next Steps
|
||
|
||
### Customize Your Display
|
||
|
||
**Adjust display durations:**
|
||
- Open the **Rotation** tab and use the **Screen Durations** section to
|
||
set how long each plugin stays on screen per rotation (saved to
|
||
`display.display_durations`).
|
||
|
||
**Organize plugin order:**
|
||
- The **Rotation** tab also has a drag-and-drop **Rotation Order** list
|
||
(saved to `display.plugin_rotation_order`). Enable/disable plugins
|
||
from the **Plugin Manager** tab.
|
||
|
||
**Add more plugins:**
|
||
- Check the **Plugin Store** section of **Plugin Manager** for new plugins.
|
||
- Install community plugins straight from a GitHub URL via
|
||
**Install from GitHub** on the same tab.
|
||
|
||
### Enable Advanced Features
|
||
|
||
**Vegas Scroll Mode:**
|
||
- Continuous scrolling ticker display
|
||
- See [ADVANCED_FEATURES.md](ADVANCED_FEATURES.md) for details
|
||
|
||
**On-Demand Display:**
|
||
- Manually trigger specific plugins
|
||
- Pin important information
|
||
- See [ADVANCED_FEATURES.md](ADVANCED_FEATURES.md) for details
|
||
|
||
**Background Services:**
|
||
- Non-blocking data fetching
|
||
- Faster plugin rotation
|
||
- See [ADVANCED_FEATURES.md](ADVANCED_FEATURES.md) for details
|
||
|
||
### Explore Documentation
|
||
|
||
- [WEB_INTERFACE_GUIDE.md](WEB_INTERFACE_GUIDE.md) - Complete web interface guide
|
||
- [WIFI_NETWORK_SETUP.md](WIFI_NETWORK_SETUP.md) - WiFi configuration details
|
||
- [PLUGIN_STORE_GUIDE.md](PLUGIN_STORE_GUIDE.md) - Installing and managing plugins
|
||
- [TROUBLESHOOTING.md](TROUBLESHOOTING.md) - Solving common issues
|
||
- [ADVANCED_FEATURES.md](ADVANCED_FEATURES.md) - Advanced functionality
|
||
|
||
### Join the Community
|
||
|
||
- Report issues on GitHub
|
||
- Share your custom plugins
|
||
- Help others in discussions
|
||
- Contribute improvements
|
||
|
||
---
|
||
|
||
## Quick Reference
|
||
|
||
### Service Commands
|
||
|
||
```bash
|
||
# Check status
|
||
sudo systemctl status ledmatrix
|
||
sudo systemctl status ledmatrix-web
|
||
|
||
# Restart services
|
||
sudo systemctl restart ledmatrix
|
||
sudo systemctl restart ledmatrix-web
|
||
|
||
# View logs
|
||
sudo journalctl -u ledmatrix -f
|
||
sudo journalctl -u ledmatrix-web -f
|
||
```
|
||
|
||
### File Locations
|
||
|
||
```
|
||
/home/ledpi/LEDMatrix/
|
||
├── config/
|
||
│ ├── config.json # Main configuration
|
||
│ ├── config_secrets.json # API keys and secrets
|
||
│ └── wifi_config.json # WiFi settings
|
||
├── plugin-repos/ # Installed plugins (default location)
|
||
└── web_interface/ # Web interface files
|
||
```
|
||
|
||
> Cached data does not live in the project directory — the cache manager
|
||
> uses the first writable location among `/var/cache/ledmatrix`,
|
||
> `~/.ledmatrix_cache`, `/opt/ledmatrix/cache`, and
|
||
> `$TMPDIR/ledmatrix_cache`.
|
||
>
|
||
> The plugin install location is configurable via
|
||
> `plugin_system.plugins_directory` in `config.json`. The default is
|
||
> `plugin-repos/`. Plugin discovery (`PluginManager.discover_plugins()`)
|
||
> only scans the configured directory — it does not fall back to
|
||
> `plugins/`. However, the Plugin Store install/update path and the
|
||
> web UI's schema loader do also probe `plugins/` so the dev symlinks
|
||
> created by `scripts/dev/dev_plugin_setup.sh` keep working.
|
||
|
||
### Web Interface
|
||
|
||
```
|
||
Main Interface: http://your-pi-ip:5000
|
||
|
||
System tabs:
|
||
- Overview System stats, live preview, quick actions
|
||
- General Timezone, location, plugin-system settings
|
||
- WiFi Network selection and AP-mode setup
|
||
- Schedule Power and dim schedules
|
||
- Display Matrix hardware configuration
|
||
- Rotation Rotation order (drag-and-drop) and screen durations
|
||
- Config Editor Raw config.json editor
|
||
- Backup & Restore Config backup and restore
|
||
- Fonts Upload and manage fonts
|
||
- Logs Real-time log viewing
|
||
- Cache Cached data inspection and cleanup
|
||
- Operation History Recent service operations
|
||
- Tools System diagnostics, updates, dependencies, maintenance
|
||
|
||
Plugin tabs (second row):
|
||
- Plugin Manager Browse the Plugin Store, install/enable plugins
|
||
- <plugin-id> One tab per installed plugin for its config
|
||
```
|
||
|
||
### WiFi Access Point
|
||
|
||
```
|
||
Network Name: LEDMatrix-Setup
|
||
Password: (none - open network)
|
||
URL when connected: http://192.168.4.1:5000
|
||
```
|
||
|
||
---
|
||
|
||
## Congratulations!
|
||
|
||
Your LEDMatrix display is now set up and running. Explore the web interface, try different plugins, and customize it to your liking.
|
||
|
||
**Need Help?**
|
||
- Check [TROUBLESHOOTING.md](TROUBLESHOOTING.md)
|
||
- Review detailed guides for specific features
|
||
- Report issues on GitHub
|
||
- Ask questions in community discussions
|
||
|
||
Enjoy your LED matrix display!
|