# LEDMatrix A modular LED matrix display system for sports information using Raspberry Pi and RGB LED matrices. ## Hardware Requirements - Raspberry Pi 4 or older - Adafruit RGB Matrix Bonnet/HAT - 2x LED Matrix panels (64x32) - DC Power Supply for Adafruit RGB HAT ## Installation 1. Clone this repository: ```bash git clone https://github.com/ChuckBuilds/LEDMatrix.git cd LEDMatrix ``` 2. Install dependencies: ```bash pip3 install --break-system-packages -r requirements.txt ``` --break-system-packages allows us to install without a virtual environment ## Configuration 1. Copy the example configuration: ```bash cp config/config.example.json config/config.json ``` 2. Edit `config/config.json` with your preferences ### YouTube Display Configuration The YouTube display module shows channel statistics for a specified YouTube channel. To configure it: 1. In `config/config.json`, add the following section: ```json { "youtube": { "enabled": true, "update_interval": 300 // Update interval in seconds (default: 300) } } ``` 2. In `config/config_secrets.json`, add your YouTube API credentials: ```json { "youtube": { "api_key": "YOUR_YOUTUBE_API_KEY", "channel_id": "YOUR_CHANNEL_ID" } } ``` To get these credentials: 1. Go to the [Google Cloud Console](https://console.cloud.google.com/) 2. Create a new project or select an existing one 3. Enable the YouTube Data API v3 4. Create credentials (API key) 5. For the channel ID, you can find it in your YouTube channel URL or use the YouTube Data API to look it up ### Calendar Display Configuration The calendar display module shows upcoming events from your Google Calendar. To configure it: 1. In `config/config.json`, add the following section: ```json { "calendar": { "enabled": true, "update_interval": 300, // Update interval in seconds (default: 300) "max_events": 3, // Maximum number of events to display "calendars": ["primary"] // List of calendar IDs to display } } ``` 2. Set up Google Calendar API access: 1. Go to the [Google Cloud Console](https://console.cloud.google.com/) 2. Create a new project or select an existing one 3. Enable the Google Calendar API 4. Create OAuth 2.0 credentials: - Application type: Desktop app - Download the credentials file as `credentials.json` 5. Place the `credentials.json` file in your project root directory 3. On first run, the application will: - Open a browser window for Google authentication - Request calendar read-only access - Save the authentication token as `token.pickle` The calendar display will show: - Event date and time - Event title (wrapped to fit the display) - Up to 3 upcoming events (configurable) ## API Keys For sensitive settings like API keys: 1. Copy the template: `cp config/config_secrets.template.json config/config_secrets.json` 2. Edit `config/config_secrets.json` with your API keys via `sudo nano config/config_secrets.json` 3. Ctrl + X to exit, Y to overwrite, Enter to save ## Important: Sound Module Configuration 1. Remove unnecessary services that might interfere with the LED matrix: ```bash sudo apt-get remove bluez bluez-firmware pi-bluetooth triggerhappy pigpio ``` 2. Blacklist the sound module: ```bash cat < # Example for user 'ledpi': # sudo usermod -a -G gpio ledpi ``` **Important:** You must **reboot** the Raspberry Pi after adding the user to the group for the change to take effect. You also need to disable hardware pulsing in the code (see `src/display_manager.py`, set `options.disable_hardware_pulsing = True`). This may result in a flickerying display If configured correctly, you can then run: ```bash python3 display_controller.py ``` ## Running the Display From the project root directory: ```bash sudo python3 display_controller.py ``` The display will alternate between showing: - Current time - Weather information (requires API key configuration) ## Development The project structure is organized as follows: ``` LEDMatrix/ ├── config/ # Configuration files │ ├── config.json # Main configuration │ └── config_secrets.json # API keys and sensitive data ├── src/ # Source code │ ├── config_manager.py # Configuration loading │ ├── display_manager.py # LED matrix display handling │ ├── clock.py # Clock display module │ ├── weather_manager.py # Weather display module │ ├── stock_manager.py # Stock ticker display module │ └── stock_news_manager.py # Stock news display module └── display_controller.py # Main application controller ``` ## Project Structure - `src/` - `display_controller.py` - Main application controller - `config_manager.py` - Configuration management - `display_manager.py` - LED matrix display handling - `clock.py` - Clock display module - `weather_manager.py` - Weather display module - `stock_manager.py` - Stock ticker display module - `stock_news_manager.py` - Stock news display module - `config/` - `config.json` - Configuration settings - `config_secrets.json` - Private settings (not in git) ## Fonts You can add any font to the assets/fonts/ folder but they need to be .ttf and updated in display_manager.py ## Systemd Service Installation The LEDMatrix can be installed as a systemd service to run automatically at boot and be managed easily. The service runs as root to ensure proper hardware timing access for the LED matrix. ### Installing the Service 1. Make the install script executable: ```bash chmod +x install_service.sh ``` 2. Run the install script with sudo: ```bash sudo ./install_service.sh ``` The script will: - Detect your user account and home directory - Install the service file with the correct paths - Enable the service to start on boot - Start the service immediately ### Managing the Service The following commands are available to manage the service: ```bash # Stop the display sudo systemctl stop ledmatrix.service # Start the display sudo systemctl start ledmatrix.service # Check service status sudo systemctl status ledmatrix.service # View logs journalctl -u ledmatrix.service # Disable autostart sudo systemctl disable ledmatrix.service # Enable autostart sudo systemctl enable ledmatrix.service ``` ### Convenience Scripts Two convenience scripts are provided for easy service management: - `start_display.sh` - Starts the LED matrix display service - `stop_display.sh` - Stops the LED matrix display service Make them executable with: ```bash chmod +x start_display.sh stop_display.sh ``` Then use them to control the service: ```bash sudo ./start_display.sh sudo ./stop_display.sh ```