What can you connect to Firefly?
One of the best things about Firefly is that you don't need to write code to use a new sensor — just pick it from the New Panel dialog and the firmware handles the rest. Below is every driver that ships with critterOS today, grouped by what they do. Calibration, averaging and multi-value readings come free with every panel.
Temperature & humidity
| Driver | Interface | Values you get | Notes |
| DS18B20 | OneWire (single pin) | temperature | Waterproof probe, very popular for tanks and pipes. |
| DHT22 | Single GPIO | temperature, humidity | Accurate digital sensor, reads every 2 s. |
| DHT11 | Single GPIO | temperature, humidity | Budget version of the DHT22 — great for learning. |
| BMP180 | I2C (D1/D2) | pressure, temperature | Atmospheric pressure + temperature. |
| BME280 | I2C (D1/D2) | pressure, temperature, humidity | The go-to indoor environment sensor. |
| BME680 | I2C (D1/D2) | pressure, temperature, humidity, gas | BME280 plus gas resistance for air quality. |
| SHT31 | I2C (D1/D2) | temperature, humidity | High-accuracy, professional-grade. |
| MPU6050 | I2C (D1/D2) | x, y, z, temperature | Accelerometer with chip temperature. |
Distance & level
| Driver | Interface | Values you get | Notes |
| HC-SR04 (us_sensor) | Trig + Echo pins | distance | Ultrasonic, great for tanks and cisterns. Power from 5 V. |
| VL53L0x | I2C (D1/D2) | distance | Time-of-flight, mm precision, up to 2 m. |
Light & air quality
| Driver | Interface | Values you get | Notes |
| BH1750 | I2C (D1/D2) | lux | Ambient light sensor, auto-ranging. |
| BME680 | I2C (D1/D2) | gas (kΩ) | Gas resistance — a proxy for air quality / IAQ. |
Flow, weight & counting
| Driver | Interface | Values you get | Notes |
| Flow / RPM | Pulse pin (interrupt) | total, rate | Hall sensors, water flow meters, tachometers. |
| HX711 | DT + SCK | weight (raw counts) | Load cells for weighing and dosing. |
Inputs & communication
| Driver | Interface | Values you get | Notes |
| Analog input | A0 | raw ADC | Any 0–3.3 V sensor. |
| Digital input | Any GPIO | 0 / 1 | Buttons, switches, PIR, reed contacts. |
| IR remote | IR receiver pin | button, repeat | NEC protocol, auto-stales after 2 s of silence. |
| UDP remote | WiFi (no pins) | mirrors remote panel | Subscribe to a panel on another board. Supports sub-values: MAC/panel.value. |
Outputs
| Driver | Interface | What it does |
| Digital output | Any GPIO | Relays, LEDs, solenoids. Active-low aware. |
| Servo | PWM pin | 0–180° hobby servo (hardware PWM). |
| PWM | PWM pin | 0–100 % duty for pumps, valves, dimmers. |
| Stepper | Step + Dir | Stepper motor control. |
| WS2812 | Data pin | NeoPixel / addressable LED (RGB). |
Composite panels
| Panel type | What it does |
| Flow control | Flow meter + relay: fills to a limit, pauses, resets. Great for dispensing. |
| Dispenser | Links an input (weight/level) to a PWM output with gentle-fill ramp. |
| PID controller | Closed-loop control: reads an input, drives an output to a setpoint. |
| Timer | Scheduled on/off: clock mode (HH:MM) or repeating seconds (e.g. 5-10-5). |
| Telegram | Sends messages to a Telegram chat from rules or panel events. |
| Number (setpoint) | Editable setpoint value, usable in rules and PID. |
| Push button | Physical button with click / double-click / long-press slots. |
Multi-value panels
Many sensors publish more than one reading. Instead of creating a separate panel for each value, critterOS uses a values map with named keys:
"" (empty string) = the primary/default value
"temperature", "pressure", "humidity", "gas", "lux", etc. = named sub-values
For example, a BMP180 panel publishes {"": 1013.25, "pressure": 1013.25, "temperature": 19.5}. UDP remote panels can subscribe to a specific sub-value using MAC/panel.value notation (e.g. C8:C9:A3:64:80:C8/press.temperature).
Every input panel includes
- Calibration: offset/factor or two-point (Low/High) calibration
- Averaging: optional 16-sample moving average
- Logging: record values to a CSV file on the board
- Display: show on the OLED (per-panel toggle)
- MQTT: publish state to a broker or Home Assistant
- UDP: publish to other boards on the LAN
All of this runs on a $4 Wemos D1 Mini (ESP8266) or ESP32 board, with no server, no cloud and no subscription.