Hardware Configuration Quickstart Guide
This guide will help you quickly configure GPIO, OLED, VFD, and LED hardware components through the EAS Station™ web interface. No command-line access required!
Overview
All hardware configuration can be done through the web interface at:
Settings → Hardware Settings (/admin/hardware)
Hardware settings are stored in the database — environment variables / .env keys are not read for GPIO, OLED, VFD, or LED configuration. After making changes, use the Restart Now button that appears to apply your changes instantly.
Upgrading from an older version? Hardware configuration moved from
.envenvironment variables to database-backed settings managed in the web UI. Legacy.envvalues are imported once during migration and ignored afterwards.
GPIO Configuration (Relay/Transmitter Control)
Enable GPIO
- Navigate to Settings → Hardware Settings (
/admin/hardware) - Open the GPIO tab
- Set Enable GPIO Control to
true - Configure your GPIO pins:
- Primary GPIO Pin:
17(BCM pin for main transmitter) - Additional GPIO Pins: Leave empty unless you have multiple relays
- Primary GPIO Pin:
- Click Save Changes
- Click Restart Now when prompted
GPIO Pin Reference
BCM Pin Numbering (Not Physical Pin Numbers):
- Pin 17 (BCM) = Physical Pin 11 (default for transmitter)
- Pin 27 (BCM) = Physical Pin 13 (backup transmitter)
- Pin 22 (BCM) = Physical Pin 15 (relay control)
Example Configuration for Multiple Pins:
27:Backup_TX:true,22:Warning_Light:true,23:Relay_1:false
Format: PIN:NAME:ACTIVE_HIGH (comma-separated)
Verify GPIO is Working
- Go to Tools → GPIO Control (if available)
- Test individual pins
- Check Logs → Hardware Service for initialization messages
OLED Display Configuration
Enable OLED (Argon Industria SSD1306)
- Navigate to Settings → Hardware Settings (
/admin/hardware) - Open the OLED Display tab
- Set Enable OLED Module to
true - Configure settings:
- I2C Bus:
1(for Raspberry Pi 3/4/5) - I2C Address:
0x3C(default for SSD1306) - Auto-Start Screen Rotation:
true
- I2C Bus:
- Click Save Changes
- Click Restart Now when prompted
OLED Configuration Options
- Width/Height: Usually 128x64 for SSD1306
- Rotation: 0, 90, 180, or 270 degrees (match physical orientation)
- Invert Colours: Dark text on light background
- Contrast: 0-255 (128 is default)
Verify OLED is Working
- Check physical display - should show status screens
- Check Logs → Hardware Service for:
- "✅ OLED display initialized"
- "✅ Screen manager started"
VFD Display Configuration
Option 1: Direct Serial Connection
- Navigate to Settings → Hardware Settings (
/admin/hardware) - Open the VFD Display tab
- Set Connection to:
/dev/ttyUSB0(or your serial port) - Set Baud Rate to:
38400(check your VFD model) - Click Save Changes
- Click Restart Now
Option 2: Network Connection (Waveshare Adapter)
Prerequisites:
- Waveshare RS232/485 WiFi adapter configured
- Adapter has static IP (e.g., 192.168.8.122)
- TCP Server mode on port 10001
Configuration:
- Navigate to Settings → Hardware Settings (
/admin/hardware) - Open the VFD Display tab
- Set Connection to:
socket://192.168.8.122:10001 - Set Baud Rate to:
38400 - Click Save Changes
- Click Restart Now
See Waveshare Setup Guide for detailed adapter configuration.
Verify VFD is Working
- Check physical display - should show text/graphics
- Check Logs → Hardware Service for:
- "Connected to Noritake VFD on socket://..." (network)
- "Connected to Noritake VFD on /dev/ttyUSB0..." (serial)
LED Sign Configuration
Enable LED Sign (BetaBrite/Alpha)
- Navigate to Settings → Hardware Settings (
/admin/hardware) - Open the LED Sign tab
- Configure connection:
- LED Sign IP Address:
192.168.1.100(your sign's IP) - LED Sign Port:
10001 - Default LED Text:
PUTNAM COUNTY,EMERGENCY MGMT,NO ALERTS,SYSTEM READY
- LED Sign IP Address:
- Click Save Changes
- Click Restart Now
LED Sign Options
- Serial Mode: RS232 or RS485
- Lines: Comma-separated text for each line
- Colors: AMBER, RED, GREEN (depends on sign model)
Zigbee Coordinator Configuration
Enable Zigbee (Argon Industria V5 or USB Dongle)
Argon Industria V5 (Raspberry Pi 5 only)
Before configuring in EAS Station™, make sure the module is detected at the OS level:
- Add to
/boot/firmware/config.txtunder[all]:dtoverlay=dwc2,dr_mode=host usb_max_current_enable=1 - Install the Argon utilities and reboot:
curl https://download.argon40.com/argon1v5.sh | bash sudo systemctl enable --now argononed.service sudo reboot - Verify the device appears:
ls /dev/ttyUSB*(should show/dev/ttyUSB0)
See Argon40 Zigbee Setup Guide for complete OS setup steps.
Configure in EAS Station™
- Navigate to Admin → Hardware Settings → Zigbee tab
- Check Enable Zigbee Coordinator
- Set Port to:
/dev/ttyUSB0— Argon Industria V5, SONOFF dongle, most USB coordinators/dev/ttyACM0— ConBee II and some other USB coordinators/dev/ttyAMA0— GPIO-connected coordinators (rare)
- Set Baud Rate to
115200(correct for CC2652P-based coordinators) - Leave Channel at
15(avoids 2.4 GHz Wi-Fi interference) - Leave PAN ID at
0x1A62(or pick any unique hex value) - Click Save Changes
- Click Restart Now when prompted
Verify Zigbee is Working
- Check Logs → Hardware Service for:
✅ Zigbee coordinator configured on /dev/ttyUSB0 (channel 15, PAN ID 0x1A62)
- Visit Admin → Zigbee to see coordinator status and paired devices
Troubleshoot Zigbee
| Symptom | Fix |
|---|---|
/dev/ttyUSB0 missing |
Add dtoverlay=dwc2,dr_mode=host to config.txt under [all] and reboot |
| "port_open_failed" | Add eas-station user to dialout group: sudo usermod -aG dialout eas-station |
| "Zigbee disabled" | Enable in Admin → Hardware Settings → Zigbee tab |
| Wrong port | Check ls /dev/ttyUSB* /dev/ttyACM* to find the actual device |
Service Restart Options
When you save changes, you'll see a Restart Now button. This restarts only the hardware service.
Restart Specific Services
Use the browser console or API:
// Restart hardware service only
fetch('/api/environment/restart-services', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ service: 'hardware' })
}).then(r => r.json()).then(console.log);
// Restart all services
fetch('/api/environment/restart-services', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ service: 'all' })
}).then(r => r.json()).then(console.log);
Available Service Options
all- Restart entire EAS Station™ stackhardware- GPIO, OLED, VFD, LED onlyweb- Web interface onlypoller- Alert polling servicesdr- SDR radio serviceaudio- Audio monitoring service
Troubleshooting
GPIO Not Working
Symptom: No GPIO control, pins not responding
Solutions:
- ✅ Check Enable GPIO Control is set to
true - ✅ Verify pin numbers (BCM not physical!)
- ✅ Check Logs → Hardware Service for errors
- ✅ Ensure user has GPIO permissions (usually automatic)
- ✅ Restart hardware service
Check Logs:
- "GPIO controller disabled (GPIO_ENABLED=false)" → Enable in settings
- "No GPIO pins configured" → Add EAS_GPIO_PIN
- "Failed to add GPIO pin X" → Check pin number/permissions
OLED Not Working
Symptom: Blank OLED display, no initialization
Solutions:
- ✅ Check Enable OLED Module is set to
true - ✅ Verify I2C is enabled on Raspberry Pi
- ✅ Check I2C address with
i2cdetect -y 1 - ✅ Verify physical connections (SDA, SCL, VCC, GND)
- ✅ Check Auto-Start Screen Rotation is
true
Check Logs:
- "OLED hardware not available" → Check I2C connection
- "OLED display disabled or unavailable" → Enable in settings
- I2C errors → Check wiring and I2C configuration
VFD Shows Garbage
Symptom: Random characters, corrupted display
Solutions:
- ✅ Check baud rate matches VFD (usually 38400)
- ✅ Verify serial wiring (TX ↔ RX crossed)
- ✅ Test with direct serial first, then network
- ✅ For network: verify Waveshare adapter settings
LED Sign Not Responding
Symptom: LED sign blank or not updating
Solutions:
- ✅ Verify IP address is correct
- ✅ Test connection:
ping 192.168.1.100 - ✅ Check port number (usually 10001)
- ✅ Verify sign is in network mode (not serial)
Restart Button Not Appearing
Symptom: Save works but no restart button
Solutions:
- ✅ Refresh the page
- ✅ Check browser console for JavaScript errors
- ✅ Ensure you have system.configure permission
- ✅ Use manual restart from CLI if needed (temporary)
Hardware Compatibility
Tested Hardware
| Component | Model | Status |
|---|---|---|
| GPIO | Raspberry Pi 3/4/5 GPIO | ✅ Supported |
| OLED | Argon Industria SSD1306 | ✅ Supported |
| VFD | Noritake GU140x32F-7000B | ✅ Supported |
| LED | BetaBrite Protocol | ✅ Supported |
| Network Serial | Waveshare RS232/485 WiFi | ✅ Supported |
| Zigbee | Argon Industria V5 (CC2652P) | ✅ Supported |
| Zigbee | SONOFF Zigbee 3.0 USB Dongle Plus | ✅ Supported |
| Zigbee | SMLIGHT SLZB-06 | ✅ Supported |
Requirements
- Raspberry Pi 3, 4, or 5 (for GPIO/I2C)
- Python 3.11+ with required packages
- I2C enabled for OLED (raspi-config → Interface Options → I2C)
- Network access for network-based devices
Quick Reference
Default Settings
All values below are managed in Settings → Hardware Settings and stored in the hardware_settings database table:
| Setting | Default |
|---|---|
| GPIO enabled | false |
| Primary GPIO pin | 17 (BCM) |
| OLED enabled | false |
| OLED I2C bus / address | 1 / 0x3C |
| Screen auto-start | true |
| VFD port (serial) | /dev/ttyUSB0 |
| VFD port (network) | socket://192.168.8.122:10001 |
| VFD baud rate | 38400 |
| LED sign IP / port | 192.168.1.100 / 10001 |
Common I2C Addresses
0x3C- SSD1306 OLED (most common)0x3D- SSD1306 OLED (alternate)0x27- PCF8574 I2C backpack0x20-0x27- Various I2C devices
Check with: i2cdetect -y 1
Next Steps
After hardware is configured:
- Configure Screens: Logs & Monitoring → Screen Management
- Test GPIO: Tools → GPIO Control
- Set Up Alerts: Configure → Alert Sources
- Monitor Status: Dashboard → System Health
Related Documentation
- Argon40 Zigbee Setup Guide
- Waveshare WiFi Adapter Setup
- GPIO Pin Reference
- Environment Variables Reference — canonical list with descriptions
- GPIO Guide — pinout, wiring, and relay behaviour
- Hardware Setup Helper — boot-time hardware probe
Need Help?
- Check Logs → Hardware Service for diagnostic messages
- GitHub Discussions: https://github.com/KR8MER/eas-station/discussions
- Report Issues: https://github.com/KR8MER/eas-station/issues
This document is served from docs/guides/HARDWARE_QUICKSTART.md in the EAS Station™ installation.