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 → Environment Variables
After making changes, use the Restart Now button that appears to apply your changes instantly.
GPIO Configuration (Relay/Transmitter Control)
Enable GPIO
- Navigate to Settings → Environment Variables
- Scroll to GPIO Control section
- 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 → Environment Variables
- Scroll to OLED Display section
- 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 → Environment Variables
- Scroll to VFD Display section
- 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 → Environment Variables
- Scroll to VFD Display section
- 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 → Environment Variables
- Scroll to LED Display section
- 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
# GPIO
GPIO_ENABLED=false
EAS_GPIO_PIN=17
# OLED
OLED_ENABLED=false
OLED_I2C_BUS=1
OLED_I2C_ADDRESS=0x3C
SCREENS_AUTO_START=true
# VFD (Serial)
VFD_PORT=/dev/ttyUSB0
VFD_BAUDRATE=38400
# VFD (Network)
VFD_PORT=socket://192.168.8.122:10001
VFD_BAUDRATE=38400
# LED
LED_SIGN_IP=192.168.1.100
LED_SIGN_PORT=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
- Hardware Service Logs
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.