HARDWARE QUICK REFERENCE
| MODEL | CPU | RAM | USB | NETWORK | GPIO | BEST FOR |
|---|---|---|---|---|---|---|
| Pi Zero 2 W | RP3A0 1GHz quad | 512MB | 1× micro USB OTG | WiFi · BT | 40-pin | Headless tools, BadUSB implants, portable |
| Pi 4 B | BCM2711 1.8GHz quad | 1-8GB | 2× USB 3, 2× USB 2 | Gigabit · WiFi · BT | 40-pin | Full server, desktop replacement, MeshChat |
| Pi 5 | BCM2712 2.4GHz quad | 4-8GB | 2× USB 3, 2× USB 2 | Gigabit · WiFi · BT | 40-pin | High-perf workloads, Gaussian splatting prep |
| Pi 400 | BCM2711 1.8GHz | 4GB | 3× USB 3, 1× USB 2 | Gigabit · WiFi · BT | 40-pin (rear) | All-in-one keyboard desktop |
| Pi CM4 | BCM2711 | 1-8GB | via carrier board | Optional | 40-pin + extra | Embedded NAS/router builds |
HYLAS DEPLOYMENTS
MESHCHAT HYLAS
Flask + Socket.IO Meshtastic chat · Pi 4 or Pi Zero 2 W
PI 4
PI ZERO 2W
# Install dependencies
pip install flask flask-socketio \
meshtastic pyserial
# Run server
python meshchat.py
# Access: http://pi-ip:5000
# As systemd service:
sudo nano /etc/systemd/system/meshchat.service
The standalone HTML version runs fully client-side. No Pi needed for the UI — only for serial LoRa comms.
WARDRIVING NODE HYLAS
Passive 802.11 beacon capture · Pi Zero 2 W + GPS
PI ZERO 2W
# TP-Link TL-WN722N in monitor mode
sudo ip link set wlan1 down
sudo iw wlan1 set monitor none
sudo ip link set wlan1 up
# Run capture
python wardriving.py \
--interface wlan1 \
--gps /dev/ttyUSB0
# Export for hashcat
python wardriving.py --export hashcat
Use wlan0 for management / SSH, wlan1 (TL-WN722N) for capture. Never put both on monitor mode simultaneously.
HYLAS VIEWER HYLAS
Flask + pywebview knowledge base · Pi 4
PI 4
# Install
pip install flask pywebview
# Run with display
python hylasviewer.py
# Headless HTTP mode (no pywebview)
python hylasviewer.py --web-only
# Access: http://pi-ip:5500
Full-text search, PDF.js viewer, collapsible sidebar. Run headless with --web-only to serve from Pi to other devices on the network.
AETHER FLOW HYLAS
WiFi packet visualisation on AMOLED · ESP32-S3 companion
PI ZERO 2W
# Pi provides WiFi capture feed to ESP32
# ESP32 renders animated particle display
# Enable monitor mode on Pi
sudo iw wlan1 set monitor control
# Stream to ESP32 serial
python aether_feed.py --port /dev/ttyUSB0
SYSTEM SERVICES
SYSTEMD SERVICE TEMPLATE
# /etc/systemd/system/myapp.service
[Unit]
Description=My Hylas App
After=network.target
[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/myapp
ExecStart=/usr/bin/python3 app.py
Restart=on-failure
RestartSec=5
Environment=PYTHONUNBUFFERED=1
[Install]
WantedBy=multi-user.target
# Enable and start
sudo systemctl daemon-reload
sudo systemctl enable myapp
sudo systemctl start myapp
sudo systemctl status myapp
journalctl -u myapp -f # live logs
COMMON SERVICE COMMANDS
| COMMAND | ACTION |
|---|---|
| status myapp | Check if running + last log lines |
| start myapp | Start the service |
| stop myapp | Stop the service |
| restart myapp | Restart |
| enable myapp | Start on boot |
| disable myapp | Don't start on boot |
| daemon-reload | Reload after editing .service files |
LOG COMMANDS
# Follow live logs for a service
journalctl -u myapp -f
# Last 100 lines
journalctl -u myapp -n 100
# Since boot
journalctl -u myapp -b
NETWORKING TOOLS
MONITOR MODE SETUP
TP-Link TL-WN722N (Atheros AR9271) on Pi
# Check interface name
ip link show
# Kill interfering processes
sudo airmon-ng check kill
# Manual monitor mode
sudo ip link set wlan1 down
sudo iw dev wlan1 set type monitor
sudo ip link set wlan1 up
# Verify
iw dev wlan1 info
# Channel hop (optional)
sudo iw dev wlan1 set channel 6
NETWORK SCAN
# Find devices on subnet
nmap -sn 192.168.1.0/24
# ARP scan (faster)
arp-scan --localnet
sudo arp-scan -l
# Port scan target
nmap -sV -p 1-1000 192.168.1.x
# OS detection
sudo nmap -O 192.168.1.x
# Check current routes
ip route show
ip addr show
WIFI TOOLS
# Scan available networks
nmcli device wifi list
# or
sudo iwlist wlan0 scan | grep ESSID
# Connect to network
nmcli device wifi connect "SSID" \
password "password"
# Show connected network
nmcli connection show --active
iwconfig wlan0
# Signal strength
watch -n 1 iwconfig wlan0
HOSTAPD — PI AS ACCESS POINT
# Install
sudo apt install hostapd dnsmasq
# /etc/hostapd/hostapd.conf
interface=wlan0
ssid=HylasAP
wpa_passphrase=changeme
wpa=2
wpa_key_mgmt=WPA-PSK
hw_mode=g
channel=6
# Enable and start
sudo systemctl unmask hostapd
sudo systemctl enable hostapd
sudo systemctl start hostapd
Useful for creating isolated capture/test networks. Pair with dnsmasq for DHCP. On Pi Zero 2 W only one wlan interface available — use USB dongle for AP + internet.
GPIO QUICK REFERENCE
GPIOZERO (Python — recommended)
# pip install gpiozero
from gpiozero import LED, Button, PWMOutputDevice
from signal import pause
led = LED(17)
led.on()
led.blink(on_time=0.5, off_time=0.5)
btn = Button(4)
btn.when_pressed = led.on
btn.when_released = led.off
pwm = PWMOutputDevice(18)
pwm.value = 0.5 # 50% duty cycle
pause() # keep script running
RPIGPIO (low-level)
# import RPi.GPIO as GPIO
import RPi.GPIO as GPIO
import time
GPIO.setmode(GPIO.BCM)
GPIO.setup(17, GPIO.OUT)
GPIO.setup(4, GPIO.IN,
pull_up_down=GPIO.PUD_UP)
GPIO.output(17, GPIO.HIGH)
time.sleep(1)
GPIO.output(17, GPIO.LOW)
# Always cleanup
GPIO.cleanup()
PIGPIO (precise timing / remote)
# sudo systemctl start pigpiod
import pigpio
pi = pigpio.pi()
pi.set_mode(17, pigpio.OUTPUT)
pi.write(17, 1)
pi.set_servo_pulsewidth(18, 1500) # servo
CAMERA / USB
PICAMERA2 (Pi Camera Module)
# Enable camera in raspi-config first
from picamera2 import Picamera2
cam = Picamera2()
cam.start()
cam.capture_file("image.jpg")
cam.stop()
# CLI still capture
rpicam-still -o image.jpg
# CLI video
rpicam-vid -t 10000 -o video.h264
USB DEVICE MANAGEMENT
# List USB devices
lsusb
dmesg | tail -20
# Find USB serial port
ls /dev/ttyUSB* /dev/ttyACM*
udevadm info /dev/ttyUSB0
# Persistent device name by serial
# /etc/udev/rules.d/99-usb.rules
SUBSYSTEM=="tty", \
ATTRS{idVendor}=="0403", \
ATTRS{idProduct}=="6001", \
SYMLINK+="gps"
SYSTEM MAINTENANCE
UPDATES
sudo apt update && sudo apt upgrade -y
sudo apt autoremove
sudo apt autoclean
# Full dist-upgrade (careful)
sudo apt full-upgrade
# Firmware update
sudo rpi-update # bleeding edge — use with care
DISK & MEMORY
# Disk usage
df -h
du -sh /home/pi/*
# Memory usage
free -h
vmstat -s
# Running processes
top
htop # install: sudo apt install htop
# Temperature
vcgencmd measure_temp
cat /sys/class/thermal/thermal_zone0/temp
RASPI-CONFIG QUICK TASKS
| TASK | PATH |
|---|---|
| Change password | System Options > Password |
| Change hostname | System Options > Hostname |
| Expand filesystem | Advanced > Expand Filesystem |
| Enable I2C | Interface Options > I2C |
| Enable SPI | Interface Options > SPI |
| Enable serial | Interface Options > Serial Port |
| GPU memory | Performance > GPU Memory (64 headless) |
sudo raspi-config
PYTHON ENVIRONMENT MANAGEMENT
VENV (recommended)
# Create venv for each project
python3 -m venv ~/venvs/myapp
source ~/venvs/myapp/bin/activate
pip install flask requests
# Deactivate
deactivate
# In systemd service
ExecStart=/home/pi/venvs/myapp/bin/python app.py
SYSTEM-WIDE (--break-system-packages)
# Pi OS Bookworm requires this flag
# for pip outside venv
pip install flask --break-system-packages
# Or use pipx for CLI tools
sudo apt install pipx
pipx install yt-dlp
pipx install httpie
Bookworm enforces PEP 668 — pip install without venv fails unless you pass --break-system-packages. Use venvs to avoid this.