Ten dashboards you can build on ESP32 / ESP8266 — greenhouse, energy monitor, gas alarm, weather station, solar and more. Filter by category, open a live demo, grab the source, or read the widget reference.
GPS Tracker
DIY
Live map, speed and satellites on your own web dashboard — a home geofence with alarm, day-by-day track logs and one-tap GPX export. NEO-6M on ESP32 or ESP8266, no cloud, OTA updates.
3hTime
$9Cost
1Sensors
13Widgets
Live map + trailGeofence circleSpeed gaugeSatellites / HDOPAltitude chartDistance to homeGPX / CSV exportVibration alarmOTA update
Wiring 5 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP8266 / ESP32 |
| NEO-6M | TX | D5 / GPIO16 |
| NEO-6M | RX | D6 / GPIO17 |
| NEO-6M | VCC | 3V3 |
| NEO-6M | GND | GND |
| Vibration motor | IN | D1 / GPIO25 |
Smart Greenhouse
Agriculture
Climate, soil moisture and light on one screen — fan, pump and grow-lamp control with a target setpoint.
2hTime
$18Cost
3Sensors
9Widgets
Air temp gaugeHumidity gaugeTrend chartSoil moistureLight (lux)Fan / Pump / LampTarget setpoint
View sketch
dash.gauge("Air temp", &airT, 0, 50, "C");
dash.gauge("Humidity", &airH, 0, 100, "%");
dash.stat ("Light", &lux, "lux");
dash.toggle("Fan", &fan);
dash.toggle("Pump", &pump);
Wiring 11 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| BME280 | SDA | GPIO21 |
| BME280 | SCL | GPIO22 |
| BME280 | VCC | 3V3 |
| BME280 | GND | GND |
| Capacitive soil | AOUT | GPIO34 |
| Capacitive soil | VCC | 3V3 |
| Capacitive soil | GND | GND |
| BH1750 (lux) | SDA | GPIO21 |
| BH1750 (lux) | SCL | GPIO22 |
| Pump relay | IN | GPIO26 |
| Fan relay | IN | GPIO27 |
Mobile Robot
Robotics
Drive it from the browser: live GPS map trail, a 3D IMU heading cube, an animated robot face and on-screen buttons.
4hTime
$35Cost
3Sensors
6Widgets
Speed gaugeGPS map + trailIMU heading cubeRobot faceDrive buttonsBattery %
View sketch
dash.gauge("Speed", &kmh, 0, 30, "km/h");
dash.map ("Position", &lat, &lon);
dash.cube("Heading", &pitch, &roll, &yaw);
dash.face("Mood", &mood);
dash.button("Forward", "GO", []{ drive(1); });
Energy Monitor
Energy
Mains voltage, current and power live, with a load chart, daily kWh, a cost estimate and a main-relay switch.
2hTime
$15Cost
1Sensors
8Widgets
Power gaugeVoltage gaugeCurrent gaugeLoad chartToday kWhCost estimateMains relay
View sketch
dash.gauge("Power", &watts, 0, 3000, "W");
dash.gauge("Voltage", &volts, 180, 260, "V");
dash.chart("Load", &watts, "W");
dash.stat ("Today", &kwh, "kWh");
dash.toggle("Mains", &mains);
Wiring 6 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| PZEM-004T | TX | GPIO16 |
| PZEM-004T | RX | GPIO17 |
| PZEM-004T | 5V | 5V |
| PZEM-004T | GND | GND |
| CT clamp | around live wire | into PZEM |
| Main relay | IN | GPIO26 |
Gas Safety
Industrial
A smoke / LPG and CO alarm: gauge + trend per gas with latching LED alerts — the sensor preset wires it in one line.
1hTime
$8Cost
2Sensors
4Widgets
Smoke gauge + chartCO gauge + chartSmoke alarm LEDCO alarm LED
View sketch
dash.sensor("mq2", &smoke).chart();
dash.led ("Smoke alarm", &smokeAlarm);
dash.sensor("mq7", &co).chart();
dash.led ("CO alarm", &coAlarm);
Wiring 9 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| MQ-2 (smoke/LPG) | AOUT | GPIO34 |
| MQ-2 (smoke/LPG) | VCC | 5V |
| MQ-2 (smoke/LPG) | GND | GND |
| MQ-7 (CO) | AOUT | GPIO35 |
| MQ-7 (CO) | VCC | 5V |
| MQ-7 (CO) | GND | GND |
| Buzzer | + | GPIO25 |
| Fan relay | IN | GPIO26 |
| Valve relay | IN | GPIO27 |
Weather Station
Education
Wind, gust, direction and rain total plus a UV index and BME280 temp / humidity / pressure with trend charts.
3hTime
$25Cost
4Sensors
7Widgets
Wind gaugeGust + directionRain totalUV index gaugeTemp / humidity / pressureTrend charts
View sketch
dash.sensor("weather", &wind, &gust, &dir, &rain);
dash.gauge ("UV index", &uv, 0, 12);
dash.sensor("bme280", &temp, &hum, &pres).chart();
Wiring 8 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| Anemometer | pulse (interrupt) | GPIO27 |
| Anemometer | GND | GND |
| Wind vane | AOUT | GPIO35 |
| Rain bucket | pulse (interrupt) | GPIO14 |
| LTR390 (UV) | SDA | GPIO21 |
| LTR390 (UV) | SCL | GPIO22 |
| BME280 | SDA | GPIO21 |
| BME280 | SCL | GPIO22 |
Solar Power Monitor
Energy
Battery SoC, pack voltage and charge current from the BMS preset, alongside PV voltage and load power — built from BatteryBMS + PowerMeter.
3hTime
$28Cost
3Sensors
7Widgets
Battery SoC gaugePack voltageCharge current chartPV voltageLoad powerCharging LED
View sketch
dash.sensor("bms", &soc, &packV, &s, &temp).chart();
dash.gauge("PV voltage", &pv, 0, 60, "V");
dash.chart("Charge", &charge, "W");
dash.led ("Charging", &charging);
Wiring 6 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| INA226 (solar) | SDA | GPIO21 |
| INA226 (solar) | SCL | GPIO22 |
| INA226 (solar) | VCC | 3V3 |
| BMS UART | TX | GPIO16 |
| BMS UART | RX | GPIO17 |
| Load relay | IN | GPIO26 |
Aquarium Controller
Laboratory
Planned: water temperature, pH and TDS/EC with heater, pump and a light schedule.
4hTime
$30Cost
4Sensors
8Widgets
Water temp (DS18B20)pH gaugeTDS / ECWater levelHeater togglePump toggleLight schedule
View sketch
dash.gauge("Water temp", &t, 0, 40, "C");
dash.gauge("pH", &ph, 0, 14);
dash.metric("TDS", &tds, "ppm");
dash.toggle("Heater", &heater);
dash.toggle("Pump", &pump);
Wiring 11 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| DS18B20 | DATA (+4.7k pull-up to 3V3) | GPIO4 |
| DS18B20 | VCC | 3V3 |
| DS18B20 | GND | GND |
| pH board | Po | GPIO34 |
| TDS | AOUT | GPIO35 |
| Float switch | signal | GPIO14 |
| Pump relay | IN | GPIO25 |
| Filter relay | IN | GPIO26 |
| Heater relay | IN | GPIO32 |
| Light relay | IN | GPIO33 |
| Feeder servo | signal | GPIO13 |
Smart Home
Home
Planned: mmWave presence, room climate and per-room lighting with dimming and scenes.
6hTime
$60Cost
5Sensors
12Widgets
Presence (LD2410)Room temp / humidityLights per roomDimmer sliderClimateScenes
View sketch
dash.badge ("Presence", &occupied);
dash.gauge ("Room temp", &t, 0, 40, "C");
dash.toggle("Living light", &l1);
dash.slider("Dim", &dim, 0, 255);
Wiring 10 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| LD2410 (mmWave) | TX | GPIO16 |
| LD2410 (mmWave) | RX | GPIO17 |
| AHT20 | SDA | GPIO21 |
| AHT20 | SCL | GPIO22 |
| INA219 | SDA | GPIO21 |
| INA219 | SCL | GPIO22 |
| Living relay | IN | GPIO25 |
| Kitchen relay | IN | GPIO26 |
| Curtain motor driver | IN | GPIO27 |
| Door reed (INPUT_PULLUP) | signal | GPIO14 |
CNC Machine
Industrial
Planned: spindle RPM, feed rate and axis position with a load chart and an emergency-stop button.
8hTime
$90Cost
4Sensors
10Widgets
Spindle RPM gaugeFeed rateAxis position X/Y/ZLoad chartE-stop buttonTemp
View sketch
dash.gauge("Spindle", &rpm, 0, 24000, "RPM");
dash.metric("Feed", &feed, "mm/min");
dash.chart("Load", &load, "%");
dash.button("E-STOP", "STOP", []{ estop(); });
Wiring 6 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| Tacho (opto/hall) | OUT (interrupt) | GPIO27 |
| ACS712 | OUT | GPIO34 |
| MAX6675 thermocouple | SCK | GPIO18 |
| MAX6675 thermocouple | CS | GPIO5 |
| MAX6675 thermocouple | SO | GPIO19 |
| E-stop (INPUT_PULLUP) | signal | GPIO14 |
3D Printer
DIY
Planned: hotend and bed temperature, print progress, a fan slider and pause / resume controls.
6hTime
$70Cost
4Sensors
9Widgets
Hotend temp gaugeBed temp gaugePrint progressFan sliderPause / resumeJog controls
View sketch
dash.gauge("Hotend", &hotend, 0, 260, "C");
dash.gauge("Bed", &bed, 0, 120, "C");
dash.progress("Progress", &pct, "%");
dash.slider("Fan", &fan, 0, 255);
Wiring 5 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| Hotend thermistor (100k NTC divider) | signal | GPIO34 |
| Bed thermistor | signal | GPIO35 |
| Part-cooling fan (MOSFET gate) | gate | GPIO25 |
| E-stop (INPUT_PULLUP) | signal | GPIO14 |
| Printer serial (optional) | TX | GPIO16 |
Smart Thermostat
Home
A WiFi thermostat on your phone — live room temperature and humidity, a setpoint, and hysteresis that switches the heater relay. DS18B20 / DHT ready.
1hTime
$6Cost
1Sensors
6Widgets
Room temp gaugeHumidity gaugeTrend chartSetpointHeating LEDHold toggle
View sketch
dash.gauge("Room temp", &roomT, 0, 40, "C");
dash.number("Setpoint", &setpoint, 5, 35, 1);
dash.led ("Heating", &heating);
dash.toggle("Hold", &hold);
Wiring 7 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| DS18B20 | DATA | GPIO4 |
| DS18B20 | VCC | 3V3 |
| DS18B20 | GND | GND |
| 4.7k pull-up | DATA–VCC | — |
| Heater relay | IN | GPIO26 |
| Heater relay | VCC | 5V |
| Heater relay | GND | GND |
LED Strip Controller
Home
A WLED-style web controller for WS2812 / SK6812 strips — colour picker, brightness, effects, and a live current-draw gauge so you never overload the PSU.
1hTime
$5Cost
0Sensors
7Widgets
Power toggleColour pickerBrightness sliderEffect selectLED countCurrent-draw gauge
View sketch
dash.color ("Color", &color);
dash.slider("Brightness", &brightness, 0, 255);
dash.select("Effect", "Solid,Rainbow,Breathe,Chase", &effect);
Wiring 5 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| WS2812B | DIN | GPIO5 |
| 470Ω | inline DIN | — |
| WS2812B | 5V | 5V |
| WS2812B | GND | GND |
| 1000µF cap | 5V–GND | — |
Water Tank Monitor
Home
Ultrasonic water-tank level on the web — a percentage gauge, litres, a trend, and an auto-pump that refills below 25 %. HC-SR04 / JSN-SR04T ready.
1hTime
$7Cost
1Sensors
6Widgets
Level gaugeVolumeTrend chartAir-gap distanceLow-level LEDPump toggle
View sketch
dash.gauge ("Level", &levelPct, 0, 100, "%");
dash.stat ("Volume", &liters, "L");
dash.toggle("Pump", &pump);
Wiring 5 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| HC-SR04 | TRIG | GPIO5 |
| HC-SR04 | ECHO | GPIO18 |
| HC-SR04 | VCC | 5V |
| HC-SR04 | GND | GND |
| Pump relay | IN | GPIO26 |
Motion Security
Home
A PIR / mmWave alarm dashboard — a motion LED, a daily event count, an arm switch, siren state, and a rolling event log. HC-SR501 / LD2410 ready.
1hTime
$4Cost
1Sensors
6Widgets
Motion LEDEvents counterArmed toggleSiren LEDSince-last statEvent log
View sketch
dash.led ("Motion now", &motion);
dash.badge("Events today", &events);
dash.toggle("Armed", &armed);
Wiring 5 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| PIR HC-SR501 | OUT | GPIO14 |
| PIR HC-SR501 | VCC | 5V |
| PIR HC-SR501 | GND | GND |
| Buzzer | + | GPIO27 |
| Buzzer | – | GND |
Garage Door Opener
Home
Open your garage from the web — one relay-pulse button, a live door position, a reed-switch open/closed state, and an activity log. ESP8266 or ESP32.
45mTime
$5Cost
1Sensors
5Widgets
Open LEDPosition statMoving LEDToggle buttonActivity log
View sketch
dash.led ("Open", &open);
dash.button("Toggle door", "Open / Close", trigger);
dash.stat("Position", &position, "%");
Wiring 5 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| Relay | IN | GPIO26 |
| Relay | VCC | 5V |
| Relay | GND | GND |
| Reed switch | A | GPIO14 |
| Reed switch | B | GND |
GPS Tracker
Robotics
A live-map vehicle tracker — a moving marker plus speed and heading stats, driven by a NEO-6M feed (TinyGPS++). Uses the built-in map widget.
1.5hTime
$9Cost
1Sensors
5Widgets
Live mapSpeed statHeading statLatitudeSpeed trend
View sketch
dash.map ("Location", &lat, &lon);
dash.stat("Speed", &speed, "km/h");
dash.stat("Heading", &heading, "deg");
Wiring 4 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| NEO-6M | TX | GPIO16 |
| NEO-6M | RX | GPIO17 |
| NEO-6M | VCC | 3V3 |
| NEO-6M | GND | GND |
RFID Access Control
Home
An RFID smart-lock dashboard — whitelist scans with grant/deny counters, the last card, an auto-relock, and an access log. MFRC522 / PN532 ready.
1.5hTime
$8Cost
1Sensors
6Widgets
Locked LEDGrants counterDenied counterLast cardUnlock buttonAccess log
View sketch
dash.led ("Locked", &locked);
dash.badge("Grants today", &grants);
dash.button("Unlock", "Momentary unlock", unlock);
Wiring 7 wires
Reference wiring — typical connections, verify against your exact board / module before powering on. Not a tested build.
| Part | Its pin | ESP32 |
| MFRC522 | SDA | GPIO5 |
| MFRC522 | SCK | GPIO18 |
| MFRC522 | MOSI | GPIO23 |
| MFRC522 | MISO | GPIO19 |
| MFRC522 | RST | GPIO22 |
| MFRC522 | 3V3 | 3V3 |
| Lock relay | IN | GPIO26 |