Skip to main content

Raspberry Pi Setup

Complete setup guide for running EdgeFlow on Raspberry Pi.

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:

One-Line Install
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 edgeflow system 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:

raspi-config
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:

All Pi Models (arm64 / armv7 auto-detected)
curl -fsSL https://edgx.cloud/install.sh | bash

Step 3: Create System Service

Install EdgeFlow as a systemd service for automatic startup:

Service Installation
# 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:

User Groups
# 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:

Access EdgeFlow
# 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
docker run -d \
  --name edgeflow \
  -p 8080:8080 \
  -v edgeflow_data:/opt/edgeflow/data \
  --device /dev/gpiomem \
  --device /dev/i2c-1 \
  edgeflow/edgeflow:latest
Docker Compose
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:

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:

/boot/config.txt
# 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 Services
# 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:

/boot/config.txt (Pi 5 only)
# 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:

NVMe Setup
# 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-0x27PCF8574I/O Expander, LCD backpack
0x23BH1750Light sensor
0x38AHT20Temperature/Humidity
0x3C-0x3DSSD1306OLED Display
0x40HDC1080Temperature/Humidity
0x44SHT3xTemperature/Humidity
0x48-0x4BADS1015/1115ADC
0x50-0x57AT24CxxEEPROM
0x5ACCS811Air Quality (eCO2/TVOC)
0x58SGP30Air Quality
0x68DS1307/DS3231RTC
0x76-0x77BME280/BMP280Temp/Humidity/Pressure

Service Management

Common commands for managing the EdgeFlow service:

Service Commands
# 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

Next Steps