Raspberry Pi is the primary development platform for EdgeFlow. Our lightweight Go-based architecture delivers exceptional performance on resource-constrained devices, from Pi Zero to Pi 5.
Supported Models
EdgeFlow supports all Raspberry Pi models with varying capabilities based on hardware specifications.
| Model | CPU | RAM | Build Profile | Capabilities |
|---|---|---|---|---|
| Pi 5 | 4× Cortex-A76 @ 2.4GHz | 2-8 GB | full | AI/ML, local LLMs, high-frequency GPIO, NVMe storage |
| Pi 4 | 4× Cortex-A72 @ 1.5GHz | 2-8 GB | standard | Full feature set, database-heavy workloads |
| Pi 3 B+ | 4× Cortex-A53 @ 1.4GHz | 1 GB | standard | Standard flows, basic sensor monitoring |
| Pi Zero 2 W | 4× Cortex-A53 @ 1GHz | 512 MB | minimal | Basic flows, remote sensors, compact deployment |
| Pi Zero W | 1× ARM11 @ 1GHz | 512 MB | minimal | Very basic flows only, limited node count |
📊 Build Profiles
EdgeFlow offers three build profiles optimized for different hardware:
- minimal — 10MB binary, ~50MB RAM — Pi Zero, BeagleBone
- standard — 20MB binary, ~200MB RAM — Pi 3/4, Orange Pi (default)
- full — 35MB binary, ~400MB RAM — Pi 4/5, Jetson Nano
Quick Installation
The fastest way to get EdgeFlow running on your Raspberry Pi:
curl -fsSL https://edgx.cloud/install.sh | bash The install script automatically:
- Detects your Pi model and architecture (arm64/armv7)
- Downloads the appropriate binary from GitHub releases
- Creates a dedicated
edgeflowsystem user - Sets up directory structure (
/opt/edgeflow/data,/opt/edgeflow/logs) - Installs and enables the systemd service
- Configures security hardening (read-only filesystem, temp protection)
Manual Installation
For more control over the installation process, follow these steps:
Step 1: Enable Hardware Interfaces
Run the Raspberry Pi configuration tool to enable required interfaces:
sudo raspi-config Navigate to Interface Options and enable:
I2C
Required for I2C sensors: BME280, BH1750, AHT20, SHT3x, ADS1015, LCD displays, RTC modules
SPI
Required for SPI devices: MCP3008 ADC, RC522 RFID, NRF24L01, LoRa modules, MCP2515 CAN
1-Wire
Required for DS18B20 temperature sensors (uses GPIO4 by default)
Serial Port
Required for UART communication: GPS modules (NEO-M8N), serial sensors, Modbus RTU
Step 2: Download EdgeFlow
Download the latest release for your architecture:
curl -fsSL https://edgx.cloud/install.sh | bash Step 3: Create System Service
Install EdgeFlow as a systemd service for automatic startup:
# Install the service
sudo edgeflow service install
# Enable auto-start on boot
sudo systemctl enable edgeflow
# Start the service
sudo systemctl start edgeflow
# Check status
sudo systemctl status edgeflow Step 4: Configure Permissions
Add your user to the required groups for hardware access:
# Add user to hardware groups
sudo usermod -a -G gpio,i2c,spi,dialout $USER
# Apply changes (logout/login or run)
newgrp gpio Step 5: Verify Installation
Access the EdgeFlow web interface:
# EdgeFlow runs on port 8080 by default
# Open in browser: http://<your-pi-ip>:8080
# Find your Pi's IP address
hostname -I Docker Installation
Run EdgeFlow in a Docker container for isolated deployments:
docker run -d \
--name edgeflow \
-p 8080:8080 \
-v edgeflow_data:/opt/edgeflow/data \
--device /dev/gpiomem \
--device /dev/i2c-1 \
edgeflow/edgeflow:latest version: '3.8'
services:
edgeflow:
image: edgeflow/edgeflow:latest
container_name: edgeflow
restart: unless-stopped
ports:
- "8080:8080"
volumes:
- edgeflow_data:/opt/edgeflow/data
- edgeflow_logs:/opt/edgeflow/logs
devices:
- /dev/gpiomem:/dev/gpiomem
- /dev/i2c-1:/dev/i2c-1
# Uncomment for full hardware access
# privileged: true
volumes:
edgeflow_data:
edgeflow_logs: Hardware Support
EdgeFlow provides native support for 52+ hardware nodes across multiple categories:
Supported Sensors
| Category | Protocol | Supported Devices |
|---|---|---|
| Temperature | 1-Wire, I2C | DS18B20, DHT22, BME280, MAX31865 (PT100/PT1000) |
| Humidity | GPIO, I2C | DHT22, DHT11, BME280, AHT20, SHT3x, HDC1080 |
| Pressure | I2C | BME280, BMP280, BMP180, MS5611 |
| Light | I2C | BH1750, TSL2561, VEML7700, MAX44009 |
| Motion | GPIO | PIR (HC-SR501), RCWL0516 (microwave) |
| Distance | GPIO | HC-SR04, JSN-SR04T (waterproof), VL53L0X (laser) |
| Air Quality | I2C | CCS811 (eCO2/TVOC), SGP30, BME680 |
| ADC/DAC | I2C, SPI | ADS1015, ADS1115, MCP3008, MCP3208, PCF8591 |
Supported Actuators & Modules
| Category | Protocol | Supported Devices |
|---|---|---|
| Motor Control | GPIO/PWM | L298N, L293D, TB6612, Servo motors, Stepper (A4988) |
| Relay Control | GPIO | 1/2/4/8-channel relay modules, solid-state relays |
| Displays | I2C | LCD 16x2/20x4 (PCF8574), OLED SSD1306, SH1106 |
| RTC | I2C | DS1307, DS3231, PCF8523 |
| RFID | SPI | RC522 (MIFARE) |
| Wireless | SPI/GPIO | NRF24L01, LoRa SX1276/SX1278, RF433 transmitter/receiver |
| GPS | UART | NEO-M8N, NEO-6M, BN-880 |
| CAN Bus | SPI | MCP2515 |
GPIO Pin Reference
EdgeFlow uses BCM (Broadcom) pin numbering. Here's a quick reference for common connections:
Power Pins
- 3.3V — Pins 1, 17
- 5V — Pins 2, 4
- GND — Pins 6, 9, 14, 20, 25, 30, 34, 39
I2C Bus
- SDA — GPIO2 (Pin 3)
- SCL — GPIO3 (Pin 5)
SPI Bus
- MOSI — GPIO10 (Pin 19)
- MISO — GPIO9 (Pin 21)
- SCLK — GPIO11 (Pin 23)
- CE0 — GPIO8 (Pin 24)
- CE1 — GPIO7 (Pin 26)
UART
- TXD — GPIO14 (Pin 8)
- RXD — GPIO15 (Pin 10)
1-Wire (Default)
- DATA — GPIO4 (Pin 7)
PWM Hardware
- PWM0 — GPIO12, GPIO18
- PWM1 — GPIO13, GPIO19
Configuration
EdgeFlow configuration is stored in /opt/edgeflow/config.yaml:
server:
host: "0.0.0.0"
port: 8080
database:
driver: sqlite
path: "./data/edgeflow.db"
hardware:
gpio_enabled: true # Enable GPIO access
i2c_enabled: true # Enable I2C bus
spi_enabled: false # Enable SPI bus
i2c_bus: 1 # Default I2C bus (1 for Pi 2+)
engine:
max_concurrent_executions: 100
execution_timeout: 5m
retry_attempts: 3
scheduler:
timezone: "UTC" # Your timezone
logging:
level: "info" # debug, info, warn, error
format: "json"
metrics:
enabled: false
prometheus_port: 9090 Performance Optimization
Optimize your Raspberry Pi for better EdgeFlow performance:
Reduce GPU Memory
For headless setups, minimize GPU memory allocation:
# Reduce GPU memory to minimum (16MB for Pi 4/5, 64MB for Pi Zero)
gpu_mem=16
# For Pi 5 with 8GB RAM running AI workloads
gpu_mem=128 Disable Unused Services
Free up resources by disabling services you don't need:
# Disable Bluetooth (if not using BLE nodes)
sudo systemctl disable bluetooth
sudo systemctl disable hciuart
# Disable Avahi/mDNS (if not using .local discovery)
sudo systemctl disable avahi-daemon
# Disable triggerhappy (keyboard shortcuts daemon)
sudo systemctl disable triggerhappy
# Disable ModemManager (if not using cellular modems)
sudo systemctl disable ModemManager Overclock Pi 5 (Optional)
For maximum performance on Pi 5 with adequate cooling:
# Overclock CPU to 3GHz (requires active cooling)
arm_freq=3000
# Overclock GPU
gpu_freq=1000
# Note: Monitor temperature with: vcgencmd measure_temp Use SSD/NVMe Storage (Pi 5)
For database-heavy workloads, use NVMe storage:
# Install NVMe SSD via PCIe HAT
# Update config to use NVMe for data directory
database:
driver: sqlite
path: "/mnt/nvme/edgeflow/edgeflow.db" Raspberry Pi 5 Specifics
Pi 5 offers significant performance improvements and new capabilities:
| Feature | Pi 4 | Pi 5 | Improvement |
|---|---|---|---|
| CPU Performance | 1.5GHz Cortex-A72 | 2.4GHz Cortex-A76 | 2-3× faster |
| GPIO Speed | Standard | Direct chip interface | ~10× faster |
| I2C Speed | 400 kHz | 1 MHz | 2.5× faster |
| Memory Bandwidth | ~4 GB/s | ~5.6 GB/s | 40% faster |
| Storage | SD/USB only | NVMe via PCIe | 10× faster I/O |
| Local AI/LLM | Limited | 7B models (8GB) | ✅ New capability |
🔧 Pi 5 GPIO Note
Raspberry Pi 5 uses a different GPIO chip (gpiochip4) compared to Pi 4 (gpiochip0). EdgeFlow automatically detects your Pi model and configures the correct GPIO interface. If you experience GPIO issues on Pi 5, ensure you're running the latest EdgeFlow version.
Optimal Pi 5 Use Cases
- Local AI/LLM — Run 7B parameter models with Ollama on 8GB variant
- High-Frequency Sensor Polling — GPIO speeds support >1kHz sampling
- Time-Series Databases — InfluxDB with NVMe storage
- Multi-Protocol Hubs — MQTT broker + WebSocket dashboard + database
- Computer Vision — Object detection at edge with USB accelerators
Troubleshooting
❌ Permission denied on GPIO
Cause: User not in gpio group
sudo usermod -a -G gpio $USER
# Logout and login again ❌ I2C device not found
Cause: I2C not enabled or wrong address
# Enable I2C
sudo raspi-config
# Interface Options → I2C → Enable
# Scan for devices
sudo i2cdetect -y 1 ❌ SPI device not working
Cause: SPI not enabled or kernel module not loaded
# Enable SPI
sudo raspi-config
# Interface Options → SPI → Enable
# Verify module loaded
lsmod | grep spi ❌ High CPU usage
Cause: Polling frequency too high
# Reduce sensor polling intervals
# In your flow, change inject node interval
# from 100ms to 1000ms or higher ❌ DS18B20 not detected
Cause: 1-Wire not enabled or wrong pin
# Enable 1-Wire
sudo raspi-config
# Interface Options → 1-Wire → Enable
# Check for sensors
ls /sys/bus/w1/devices/ ❌ Service won't start
Cause: Configuration error or port in use
# Check service logs
sudo journalctl -u edgeflow -f
# Check if port is in use
sudo lsof -i :8080 Common I2C Addresses
Reference table for common I2C device addresses:
| Address | Device | Description |
|---|---|---|
0x20-0x27 | PCF8574 | I/O Expander, LCD backpack |
0x23 | BH1750 | Light sensor |
0x38 | AHT20 | Temperature/Humidity |
0x3C-0x3D | SSD1306 | OLED Display |
0x40 | HDC1080 | Temperature/Humidity |
0x44 | SHT3x | Temperature/Humidity |
0x48-0x4B | ADS1015/1115 | ADC |
0x50-0x57 | AT24Cxx | EEPROM |
0x5A | CCS811 | Air Quality (eCO2/TVOC) |
0x58 | SGP30 | Air Quality |
0x68 | DS1307/DS3231 | RTC |
0x76-0x77 | BME280/BMP280 | Temp/Humidity/Pressure |
Service Management
Common commands for managing the EdgeFlow service:
# Start EdgeFlow
sudo systemctl start edgeflow
# Stop EdgeFlow
sudo systemctl stop edgeflow
# Restart EdgeFlow
sudo systemctl restart edgeflow
# View status
sudo systemctl status edgeflow
# View logs (live)
sudo journalctl -u edgeflow -f
# View last 100 log lines
sudo journalctl -u edgeflow -n 100
# Disable auto-start
sudo systemctl disable edgeflow
# Enable auto-start
sudo systemctl enable edgeflow