A simple and elegant web interface to display scrolling messages on MAX7219 LED matrix displays using Raspberry Pi
DotNote turns your Raspberry Pi and LED matrix into a customizable message display. Perfect for door signs, notifications, reminders, and creative projects. Control it from any device on your network through a simple web interface or API.
- Demo
- Features
- Requirements
- Wiring
- Installation
- Configuration
- API Usage
- Running as a Service
- Usage Ideas
- Troubleshooting
- Project Structure
- Project Links
- Contributing
- License
- Acknowledgments
- GitHub Repository: https://github.com/SebasPinto/DotNote-py
- 3D Printable Case (MakerWorld): https://makerworld.com/en/models/1947147-dotnote-led-matrix-case
- 3D Printable Case (Printables): https://www.printables.com/model/1466398-dotnote-led-matrix-case
- Complete Build Guide (Instructables): https://www.instructables.com/DIY-LED-Matrix-Message-Display-With-Raspberry-Pi/
- ๐ Web-Based Control - Update messages from any browser on your network
- ๐ฑ Simple API - RESTful endpoint for easy integration
- ๐ Audio Feedback - Optional buzzer notification when messages update
- ๐ Message Logging - Automatic logging with timestamps and sender IPs
- โ๏ธ Fully Configurable - Easy-to-customize parameters at the top of the code
- ๐ Smooth Scrolling - Adjustable scroll speed for optimal readability
- ๐ Lightweight - Runs efficiently on Raspberry Pi Zero 2W and above
- Raspberry Pi (Zero 2W, 3, 4, or 5)
- MAX7219 LED Matrix Display (4x 8x8 modules = 32x8 display)
- Buzzer (optional, any GPIO-compatible buzzer)
- Jumper wires
- MicroSD card with Raspberry Pi OS
- Power supply
- Raspberry Pi OS (tested on latest version)
- Python 3.12 (also works with 3.7+)
- SPI enabled on Raspberry Pi
| MAX7219 Pin | Raspberry Pi Pin | GPIO/Function | Physical Pin |
|---|---|---|---|
| VCC | 5V Power | 5V | Pin 2 or 4 |
| GND | Ground | GND | Pin 6 |
| DIN | MOSI | GPIO 10 | Pin 19 |
| CS | CE0 | GPIO 8 | Pin 24 |
| CLK | SCLK | GPIO 11 | Pin 23 |
| Buzzer Pin | Raspberry Pi Pin | GPIO | Physical Pin |
|---|---|---|---|
| Positive | GPIO 23 | GPIO 23 | Pin 16 |
| Negative | Ground | GND | Pin 14 |
Note: The buzzer GPIO pin can be changed in the configuration section of
dotnote.py
sudo raspi-configNavigate to: Interface Options โ SPI โ Enable
Reboot your Raspberry Pi:
sudo rebootsudo apt-get update
sudo apt-get install -y python3-pip python3-dev git# Clone the repository
git clone https://github.com/yourusername/dotnote.git
cd dotnote
# Install Python dependencies
pip3 install -r requirements.txtpython3 dotnote.pyThe server will start on port 5000. Access it from any device on your network:
http://[raspberry-pi-ip]:5000
To find your Raspberry Pi's IP address:
hostname -IAll configuration options are at the top of dotnote.py. Edit these parameters to customize DotNote:
# LED Matrix Configuration
CASCADED_DEVICES = 4 # Number of 8x8 matrices (4 = 32x8 display)
BLOCK_ORIENTATION = -90 # Rotation: -90, 0, 90, 180
ROTATE = 0 # Display rotation: 0, 1, 2, 3
BRIGHTNESS = 5 # Brightness: 0-15
# Display Behavior
SCROLL_SPEED = 0.05 # Seconds between scroll steps (lower = faster)
DEFAULT_MESSAGE = "Welcome to DotNote! "
MESSAGE_SPACING = " " # Spacing between message loops
# Buzzer Configuration
BUZZER_ENABLED = True # Enable/disable buzzer
BUZZER_PIN = 23 # GPIO pin for buzzer
BEEP_DURATION = 0.2 # Beep length in seconds
BEEP_COUNT = 2 # Number of beeps per update
# Server Configuration
SERVER_HOST = '0.0.0.0' # Listen on all interfaces
SERVER_PORT = 5000 # Web server port
# Logging Configuration
LOG_FILE = "messages.log" # Log file location
LOG_ENABLED = True # Enable/disable loggingcurl "http://raspberry-pi-ip:5000/update?message=Hello%20World"Response:
{
"message": "Message updated"
}Error Response:
{
"error": "No valid message provided"
}import requests
response = requests.get('http://192.168.1.100:5000/update',
params={'message': 'Hello from Python!'})
print(response.json())To make DotNote start automatically on boot, create a systemd service:
sudo nano /etc/systemd/system/dotnote.serviceAdd the following content (adjust paths as needed):
[Unit]
Description=DotNote LED Matrix Display
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/dotnote
ExecStart=/usr/bin/python3 /home/pi/dotnote/dotnote.py
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.targetEnable and start the service:
sudo systemctl daemon-reload
sudo systemctl enable dotnote.service
sudo systemctl start dotnote.serviceCheck service status:
sudo systemctl status dotnote.service- ๐ Office Door Signs - "In a Meeting", "Available", "Do Not Disturb"
- โ Coffee Shop Menus - Daily specials and announcements
- ๐ Smart Home - Display sensor data, weather, or notifications
- ๐ Event Spaces - Welcome messages and event information
- ๐ ๏ธ Workshop Status - Equipment availability, safety reminders
- ๐ Retail - Promotional messages and customer information
- ๐ฎ Gaming Rooms - Scores, status updates, and notifications
- ๐ถ Kids' Rooms - Fun messages, reminders, and countdowns
If you see SPI-related errors:
sudo raspi-config
# Navigate to: Interface Options โ SPI โ Enable
sudo reboot- Check all wiring connections
- Verify SPI is enabled:
lsmod | grep spi - Test SPI devices:
ls /dev/spi*(should show/dev/spidev0.0) - Try adjusting
BLOCK_ORIENTATIONandROTATEparameters
Adjust these parameters in dotnote.py:
BLOCK_ORIENTATION: Try -90, 0, 90, or 180ROTATE: Try values 0, 1, 2, or 3
- Ensure Pi and your device are on the same network
- Check if service is running:
sudo systemctl status dotnote - Verify firewall settings allow port 5000
- Try accessing via IP instead of hostname
- Check buzzer wiring (positive to GPIO 23, negative to GND)
- Verify
BUZZER_ENABLED = Truein configuration - Test with a different GPIO pin by changing
BUZZER_PIN
dotnote/
โโโ dotnote.py # Main application
โโโ requirements.txt # Python dependencies
โโโ templates/
โ โโโ index.html # Web interface
โโโ messages.log # Message log (generated)
- GitHub Repository: https://github.com/SebasPinto/DotNote-py
- 3D Printable Case (MakerWorld): https://makerworld.com/en/models/1947147-dotnote-led-matrix-case
- 3D Printable Case (Printables): https://www.printables.com/model/1466398-dotnote-led-matrix-case
- Complete Build Guide (Instructables): https://www.instructables.com/DIY-LED-Matrix-Message-Display-With-Raspberry-Pi/
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License.
- Built with luma.led_matrix library
- Flask web framework
- Raspberry Pi community
Made with โค๏ธ for makers and tinkerers
If you found this project useful, please give it a โญ on GitHub!

