libdrone — Payload SDK
About¶
Complete technical specification for building payloads on the libdrone open drone platform. Written for a builder who has never read the libdrone drone documentation. Covers the dual GX12-7 A/B electrical interface, pinout, mechanical mast standard, payload power architecture, sensor payload reference design (SEN66 air quality), and field procedures. You only need access to a libdrone — not to build one.
About¶
The complete technical specification for building payloads on the libdrone open drone platform. This document is written for a builder who has never read the libdrone drone documentation. You do not need to build a libdrone to use this SDK — you only need access to one.
If you have a sensor, a camera, or an idea — this document tells you everything you need to attach it, command it from the radio transmitter, see its data in the goggles, and land with GPS-tagged data on your laptop.
Repository: [TBD — add when published]
[1] PLATFORM OVERVIEW¶
libdrone is an open-source 6-inch FPV drone designed from the ground up as a modular payload platform. The key insight: the drone is sealed infrastructure. Payloads clip on top. The drone does not need to know what payload it carries.
Key properties for payload designers:
Flat body architecture — top surface is payload real estate, not structure Sealed top layer — permanent. Never opens for routine operations. Battery side-slides out — battery swaps without removing your payload Dual GX12-7 connectors (A+B) — two plugs = full drone API (power, GPS, comms, radio) 2x M3 boss pads — mechanical interface, 60-second payload swap GPS always present — free georeferencing for every data point Betaflight blackbox — flight data always logged, alignable with payload data MSP OSD — your payload data can appear in pilot's goggles ELRS radio — pilot can command your payload mid-flight
[2] THE PAYLOAD STANDARD — OVERVIEW¶
Every libdrone payload has three required elements:
MECHANICAL 2x M3 x 8mm screws into rear boss pads (20mm spacing) Mast base STL provided — print in PETG, 2 hours
ELECTRICAL 2x GX12-7 female connectors on payload cable (Connector A + Connector B) Plug A into drone left (signal/power), B into drone right (data/aux) Two motions, everything connected. Screw rings finger-tight.
MASTER ENABLE Physical latching switch on mast body (pre-flight logging) + Radio AUX channel (in-flight control) OR logic: either source enables payload Default: OFF. Zero draw when inactive.
That is the complete mechanical and electrical interface. Nothing else touches the drone.
[3] THE DUAL GX12-7 ELECTRICAL INTERFACE¶
The GX12-7 is a 7-pin waterproof aviation connector. IP65. Screw-lock.
500 mating cycles. EUR 2 per pair. Drone-side is male (panel mount, pins face upward, dust cap when unused). Payload-side is female (cable mount).
The two connectors are at X = −25mm (A, left) and X = +25mm (B, right), both at Y = −66mm in the electronics zone. 50mm centre-to-centre. Battery exits RIGHT — neither connector obstructs battery removal.
3.1 Connector A Pinout (LEFT, X = −25mm — signal + power)¶
| PIN | NAME | DIRECTION | SPEC | NOTES |
|---|---|---|---|---|
| 1 | 5V | Drone to Payload | FC BEC. 2A continuous. | Powers ESP32, cameras, compute boards. |
| 2 | GND | — | Primary ground | Star topology from ESC. |
| 3 | UART4.TX | FC to Payload | 3.3V UART. 115200 baud default. | Commands from FC to payload. |
| 4 | UART4.RX | Payload to FC | 3.3V UART. MSP protocol. | Payload MSP telemetry → FC → OSD → goggles. |
| 5 | I2C.SCL | Shared | 400kHz Fast Mode. | Any I2C sensor works immediately. |
| 6 | I2C.SDA | Shared | 400kHz Fast Mode. | Keep cable <300mm for 400kHz. |
| 7 | SPARE | — | Reserved for future use. | Do not connect. |
3.2 Connector B Pinout (RIGHT, X = +25mm — data + aux)¶
| PIN | NAME | DIRECTION | SPEC | NOTES |
|---|---|---|---|---|
| 1 | GND | — | Shield / secondary ground | Use for sensitive sensor ground return. |
| 2 | GPS.TX | Drone to Payload | NMEA/UBX. 57600 baud. | 1MΩ series resistor on drone side. Read-only tap. |
| 3 | UART5.TX | FC to Payload | 3.3V UART. Secondary channel. | Camera UART, actuator commands. |
| 4 | UART5.RX | Payload to FC | 3.3V UART. Secondary channel. | Second independent data path. |
| 5 | AUX.GPIO.1 | FC to Payload | 3.3V GPIO. Radio switch 1. | Master enable / primary payload switch. |
| 6 | AUX.GPIO.2 | FC to Payload | 3.3V GPIO. Radio switch 2. | Camera control / secondary switch. |
| 7 | SPARE | — | Reserved for future use. | Do not connect. |
3.3 What this gives you¶
Two connectors provide:
POWER run your payload from the drone battery (up to 2A) — Conn A PIN 1 COORDINATES every data point georeferenced, free, NMEA or UBX — Conn B PIN 2 REALTIME OUT send readings to pilot goggles via MSP OSD — Conn A PIN 4 REALTIME IN receive commands from FC (triggered by radio switch) — Conn A PIN 3 SENSOR BUS any I2C device works out of the box — Conn A PIN 5/6 TWO UART CHANNELS sensor + camera simultaneously, no congestion RADIO CONTROL two independent AUX switches from transmitter — Conn B PIN 5/6
3.4 Master enable¶
Your payload board must implement the master enable specification:
Physical switch latching SPDT on mast body allows payload to log before drone is powered (bench + field)
Radio GPIO Conn B PIN 5 (AUX.GPIO.1) driven by FC from TX16S aux switch allows pilot to enable/disable payload in flight
Logic OR: either source alone enables payload both off = payload off (zero draw from drone battery)
Default state both OFF. Payload never active without deliberate action.
Implementation: N-channel MOSFET (IRLML6344) between Conn A PIN 1 (5V) and your payload 5V rail. Gate driven by either switch via diode OR. Two components.
[4] THREE BUSES — EVERY PAYLOAD¶
Every payload implements all three buses. Not optionally — all three. A sensor that only logs to SD is useless if you need to know NOW that you are over a hotspot. A camera that only streams but does not record is useless for analysis afterward.
STORAGE BUS What happened REALTIME BUS What is happening now CONTROL BUS What to do next
4.1 Storage Bus¶
Full-resolution data, GPS-tagged, timestamped, written to SD card.
hardware ESP32-S3 dev board storage MicroSD card via SPI data format CSV (readable by everything) or JSON gps source Conn B PIN 2 (GPS.TX) to ESP32 UART RX wifi sync ESP32 connects to NAS on landing — automatic
example log row: 2026-03-08T14:23:11Z, 50.123456, 14.456789, 312.4m, PM2.5=34.2, CO2=412, TEMP=18.4, RH=67.1
The ESP32-S3 MicroPython template handles all of this. Adapt the sensor reading function for your hardware — everything else is already written.
4.2 Realtime Bus¶
Live readings in pilot's goggles via MSP OSD overlay on main FPV feed.
hardware ESP32-S3 (same compute board as storage) protocol MSP (MultiWii Serial Protocol) path ESP32 to Conn A PIN 4 to FC to HDZero VTX to goggles bandwidth text and numbers only — not images latency <100ms
example OSD fields: "PM2.5: 34 ug/m3" "CO2: 412 ppm" "CAM: REC 00:04:32" "RAD: 0.3 uSv/h"
The pilot sees your data without landing. They navigate toward or away from a reading, make decisions, request more data — all in flight.
4.3 Control Bus¶
Commands from the radio transmitter to your payload in flight.
path TX16S switch to ELRS to FC to UART to Conn A PIN 3 to ESP32 baud 115200 (default) protocol simple serial command strings (define your own)
example commands "CAM_ON" ESP32 enables MOSFET, Caddx Peanut powers up "CAM_OFF" ESP32 cuts MOSFET, camera powers down "LOG_FAST" increase sensor sample rate "DEPLOY" actuate servo or relay
confirmation ESP32 sends MSP status back via Conn A PIN 4 to OSD pilot sees "CAM ON / REC" in goggles
The control bus makes your payload interactive. You define the command set.
[5] PAYLOAD DECISION TREE¶
Use this to choose the right approach for your payload.
What does your payload output?
SENSOR DATA (numbers, readings, measurements) Standard build. OSD overlay via MSP. ESP32-S3 compute. Works on any libdrone without modification. Examples: air quality, radiation, CO2, methane, temperature, UV, acoustic, RF spectrum
IR / THERMAL DATA (temperature map, not visible light) Standard build. ESP32-S3 reads IR sensor via SPI. Processed data (hotspot alerts, temperature overlay) via MSP to OSD. Full thermal frames GPS-tagged to SD card. No MIPI. No Camera Switcher. No drone modification. IR camera is a SENSOR payload — not a camera payload. Examples: FLIR Lepton 3.5 (SPI), InfiRay sensor modules
VIDEO / IMAGE DATA — SD card recording only Standard build + GX12 video payload. Caddx Peanut via UART5 + AUX GPIO 2 + MOSFET. Radio-triggered. OSD confirmation. Internal battery.
VIDEO / IMAGE DATA — need to SEE it in goggles in flight DEDICATED BUILD ONLY. Requires Camera Switcher 2, fixed MIPI cable, HDZero-compatible camera permanently installed. This is a separate aircraft — not a payload variant. The MIPI cable is fragile; it is never swapped.
The standard build handles everything except full video FPV.
[6] REFERENCE PAYLOADS¶
6.1 Air Quality Module (built, flying)¶
sensor Sensirion SEN66 PM1 / PM2.5 / PM4 / PM10, temperature, humidity, VOC, NOx, CO2 I2C interface, 400kHz compute ESP32-S3 mini dev board storage MicroSD card via SPI power Conn A PIN 1 (5V) via master MOSFET to 3.3V LDO gps Conn B PIN 2 tap to UART RX realtime MSP OSD: PM2.5, CO2, temperature live in goggles wifi Synology NAS sync on landing mass ~59g total payload
see payloads/LD_-_Payload_SDK_v246.md (Appendix A) for full build guide
6.2 Video Module (designed)¶
camera Caddx Peanut 4K — 27g, internal battery (30min) power Conn A PIN 1 (5V) to MOSFET (IRLML6344) to Peanut MOSFET gate: Conn B PIN 6 (AUX.GPIO.2) Default: off. Pilot switches on via TX16S AUX switch. control Conn B PIN 3 (UART5.TX) to Peanut UART Peanut configured to auto-start recording on power-on realtime OSD: "CAM REC 00:04:32" during recording mass ~35g estimated
WARNING: Peanut overheats recording stationary without airflow. Prop wash during flight provides sufficient cooling. Do not bench-test recording for extended periods. PRE-FLIGHT: Charge Peanut internal battery alongside main LiPo.
6.3 Dual Payload Proof of Concept¶
Both payloads simultaneously. One mast. Two connectors.
Conn A PIN 3/4 (UART4) Air quality MSP telemetry to pilot goggles Conn B PIN 3/4 (UART5) Camera UART control to Caddx Peanut Power budget ~850mA combined — within 2A BEC headroom
OSD simultaneously shows: PM2.5: 34 ug/m3 CO2: 412 ppm CAM: REC 00:04:32
TX16S switches: AUX3 to air quality logging on/off AUX4 to camera power + record on/off
[7] PAYLOAD BOARD DESIGN GUIDE¶
7.1 Required components¶
MOSFET (master enable + optional camera switch) IRLML6344 — SOT-23, logic-level, 0.5 Ohm Rds(on) Gate: diode-OR from physical switch and Conn B PIN 5 (AUX.GPIO.1) Drain: Conn A PIN 1 (5V) to your 5V rail
GX12-7 female connectors (×2 — Connector A and Connector B) Solder wires directly to connector pins Heat-shrink each pin individually Strain relief at cable exit on both connectors Route Conn A cable to LEFT side of mast (signal zone) Route Conn B cable to RIGHT side of mast (power zone)
3.3V LDO regulator MCP1700-3302E — 250mV dropout, clean output Input: MOSFET-switched 5V rail Output: ESP32-S3, sensors, SD module
Physical master switch Latching SPDT miniature switch on mast body One throw to MOSFET gate (via 10kOhm series resistor)
GX12 female connector Solder wires directly to connector pins Heat-shrink each pin individually Strain relief at cable exit
7.2 Wire gauge¶
Conn A PIN 1 (5V) 24 AWG minimum — 2A capacity Conn A PIN 2 / Conn B PIN 1 (GND) 24 AWG minimum All signal pins 28 AWG
7.3 EMC rules¶
Twisted pairs: I2C SCL/SDA twisted. UART TX/RX twisted. Star ground: all GND return to one point on payload board. Power/signal separation: route 5V away from I2C and UART. Ferrite bead on 5V input: optional, recommended for sensitive sensors.
[8] MAST MECHANICAL GUIDE¶
8.1 Base footprint¶
m3_insert_spacing 20.0 mm (centre to centre, longitudinal) m3_insert_od 4.6 mm (brass heat-set) boss_dia 9.0 mm boss_height 7.0 mm fastener M3 x 8mm stainless button head mast_base_material PETG mandatory
Print: 4 perimeters, 40% gyroid infill.
8.2 Standard mast heights¶
40mm cameras, compact sensors, minimal CG impact 80mm sensors needing airflow separation 120mm maximum sensor/prop wash separation
8.3 Cable routing¶
Route Connector A cable on LEFT side of mast body (signal zone, toward X = −20mm). Route Connector B cable on RIGHT side of mast body (power zone, toward X = +20mm). Secure each cable with clips at mast midpoint and base.
8.4 Physical switch position¶
Mount at mast base — accessible without tools from drone side. Reachable with drone sitting on bench, nothing removed.
[9] WEIGHT BUDGET¶
Total payload budget <150g maximum / <80g target Mast + base ~15-25g Payload board + wiring ~5-10g GX12-7 cables (×2) ~8g (two female connectors + pigtails) Budget for sensor/cam ~30-40g (target) / ~100g (max)
Reference complete payloads: Air quality module ~59g (within target) Video module ~35g estimated (within target) Both simultaneously ~94g (within target — verify CG)
CG note: mast sits behind CG. All payload mass shifts CG rearward. Measure actual CG after fitting any new payload. Adjust Betaflight trim.
[10] PRE-FLIGHT CHECKLIST (PAYLOAD)¶
[ ] Connector A (LEFT) seated and lock ring tight [ ] Connector B (RIGHT) seated and lock ring tight [ ] Physical master switch ON before connecting drone battery [ ] OSD confirms payload active after drone power-on [ ] SD card present and logging confirmed [ ] GPS fix confirmed (>=8 sats) [ ] Caddx Peanut (if fitted): internal battery charged [ ] TX16S aux channels tested on bench [ ] WiFi sync target reachable
After flight: [ ] WiFi sync complete before powering down ESP32 [ ] Caddx Peanut: flip AUX switch OFF before battery removal [ ] Download and review SD card data [ ] Fit GX12-7 dust caps on BOTH drone connectors immediately after payload removal
[11] PAYLOAD IDEAS¶
| Category | Payload | Interface | Notes |
|---|---|---|---|
| Scientific | Radiation mapping | UART/GPIO | Geiger-Mueller + ESP32 |
| Scientific | Methane detection | I2C/ADC | MQ-4 or MiCS sensor |
| Scientific | CO2 vertical profiling | I2C | SCD40 |
| Scientific | UV index mapping | I2C | VEML6075 |
| Scientific | Bat acoustics | I2S | Ultrasonic mic array |
| Scientific | Electric field sensing | SPI | EFM sensor |
| Scientific | Microplastic sampling | Physical | Air filter + gravimetric |
| RF / Signals | Spectrum analysis | USB/SPI | RTL-SDR + RPi Zero |
| RF / Signals | WiFi wardroving | WiFi | ESP32 scan mode |
| RF / Signals | LoRa coverage mapping | SPI | LoRa module |
| Thermal | IR hotspot detection | SPI | FLIR Lepton 3.5 via ESP32 to OSD |
| Agricultural | NDVI crop health | Camera | Modified camera |
| Agricultural | Frost detection | I2C/IR | IR thermometer array |
| Agricultural | Seed dispersal | GPIO/PWM | Servo-actuated hopper |
| Infrastructure | Thermal facade survey | SPI | FLIR Lepton to SD card |
| Civil Resilience | Supply drop — water/meds/comms | GPIO/PWM | Servo-actuated release, 80–150g, radio-triggered via AUX — see LD-COM-001 UC-11/12/13 |
| Civil Resilience | Thermal perimeter sweep | SPI | FLIR Lepton 3.5 — body heat detection at 30–100m, night watch — see LD-COM-001 UC-10 |
| Civil Resilience | Chemical plume assessment | I2C | SEN66 — PM2.5/VOC/NOx live OSD, shelter-vs-evacuate decision — see LD-COM-001 UC-05 |
| Creative | Light painting | GPIO | LED array |
| Creative | Acoustic mapping | I2S | MEMS mic array |
[12] CONTRIBUTING¶
Build a payload. Document it. Submit to the community library on GitHub.
Requirements for inclusion: Conforms to dual GX12-7 A/B pinout standard (v2.4.6) Mechanical interface matches Section [2] Documented weight and CG impact EMC considerations noted for your sensor type
[13] QUICK REFERENCE¶
MECHANICAL INTERFACE
2x M3 x 8mm, 20mm spacing, rear boss pads, PETG mast
ELECTRICAL INTERFACE — CONNECTOR A (LEFT, X=−25mm): PIN 1 5V (2A) PIN 4 UART4 RX (MSP→OSD) PIN 2 GND primary PIN 5 I2C SCL PIN 3 UART4 TX (cmd) PIN 6 I2C SDA PIN 7 SPARE
ELECTRICAL INTERFACE — CONNECTOR B (RIGHT, X=+25mm): PIN 1 GND shield PIN 4 UART5 RX PIN 2 GPS TX (1MΩ tap) PIN 5 AUX GPIO 1 (master enable) PIN 3 UART5 TX PIN 6 AUX GPIO 2 (camera ctrl) PIN 7 SPARE
THREE BUSES (all mandatory): Storage ESP32 to SD card to WiFi sync to NAS Realtime ESP32 to MSP to FC to HDZero VTX to goggles Control TX16S to ELRS to FC to UART4 to ESP32
WEIGHT BUDGET
Target <80g / Maximum <150g
MASTER ENABLE
Physical switch on mast (pre-flight)
Radio AUX GPIO Conn B PIN 5 (in-flight)
OR logic — default OFF
REFERENCE IMPLEMENTATION
payloads/LD_-_Payload_SDK_v246.md (Appendix A)
"The drone flies. The payload thinks. The data lands."
libdrone Payload SDK v2.4.6 — open standard, open source. Repository: [TBD]
Appendix A — Payload 1 Reference Design: Air Quality (SEN66)¶
Merged from payloads/LD_-_Payload_SDK_v246.md. This is the complete build and operation guide for the first libdrone reference payload — the SEN66 atmospheric sensor mast. It demonstrates the GX12-7 interface standard in practice.
Sensirion SEN66 + ESP32-S3 logger on removable mast. Purpose: georeferenced air quality mapping over Telč and surroundings. Design principle: fully self-contained, independent of flight systems, removable in 60 seconds, identical fit on both frames.
See also: * reference/LD_-Master_Specification_v246.md §2.3 — top plate boss geometry * build/LD-PRUSA_v246.md §Platform — heat-set insert installation * build/LD-_WBS_v246.md §6.19 and §8.11
[1] WHY THE SEN66 AND WHY THIS MOUNTING APPROACH¶
Sensor selection¶
The Sensirion SEN66 measures nine parameters in one module: PM1, PM2.5, PM4, PM10, temperature, relative humidity, VOC index, NOx index, and CO2. All from a single I2C device. The internal fan actively draws air through the sensor body — critical for consistent readings during flight rather than relying on unpredictable ram air pressure.
| Parameter | Range | Notes |
|---|---|---|
| PM1 | 0–1000 µg/m³ | Fine particulate |
| PM2.5 | 0–1000 µg/m³ | WHO standard monitoring threshold |
| PM4 | 0–1000 µg/m³ | Coarse fine particulate |
| PM10 | 0–1000 µg/m³ | Inhalable particles |
| Temperature | -10 to 60°C | Compensated for self-heating |
| Humidity | 0–100% RH | |
| VOC Index | 1–500 | Sensirion scale: 100 = clean air |
| NOx Index | 1–500 | Same scale |
| CO2 | 400–32768 ppm | NDIR measurement |
Dimensions: 55.5 × 25.6 × 21.5 mm. Weight: ~20g. Interface: I2C (addr 0x6B). Power: 3.3–5.5V, ~200mA peak (fan on startup).
Mounting position: above rotor disk¶
A multirotor in hover creates a toroidal vortex — air drawn down through props, recirculating back up around the outside. Any sensor mounted below the drone samples recirculated prop wash, not ambient air.
The sensor mast raises the SEN66 above the rotor disk plane, into undisturbed atmosphere the props have not yet touched. The sensor intake faces upward. This is the correct mounting geometry for research-grade air quality measurement from a multirotor platform.
Independent power¶
The ESP32-S3 logger and SEN66 are powered by a dedicated 1S 500mAh LiPo on the mast — not from the main 6S flight pack. Reasons: 1. Motor noise on the 6S bus would corrupt sensitive sensor readings. 2. The sensor payload can be powered, logging, and syncing data while the main pack is removed for charging. 3. Payload weight and power budget is completely decoupled from flight time.
[2] HARDWARE¶
| Item | Spec | Cost (est) |
|---|---|---|
| Sensirion SEN66 | PM+T/RH+VOC/NOx/CO2, I2C, ~20g | 1,800 CZK |
| ESP32-S3 mini dev board | MicroPython, WiFi, I2C, 3.3V | 250 CZK |
| MicroSD card module | SPI, 3.3V compatible | 100 CZK |
| MicroSD card 16–32 GB | Class 10 | incl. above |
| 3.3V LDO / DC-DC converter | <300 mV dropout; NOT AMS1117 | 30 CZK |
| I2C cable 100 mm | 4-wire, JST-SH or DuPont | 50 CZK |
| JST connectors, hookup wire | 22–26 AWG, short runs | 70 CZK |
| GX12-7 female connector ×2 | Cable-mount, mates with drone-side male | 200 CZK |
| Printed mast (PETG Natural) | see PRUSA doc Section [2E] | filament |
| M3 × 8mm screws ×2 | Stainless, for mast to inserts | incl. hardware kit |
Note on power: The sensor payload is powered from the drone's 5V BEC rail via Connector A PIN 1. No separate 1S LiPo required on the mast. The payload is active only when the drone main battery is connected. If off-drone logging is required in future, a 1S LiPo can be added back — the LDO and wiring architecture supports it.
Wiring diagram¶
See config.py for pin assignments. Logical connections:
Via GX12 Connector A (left, X=−25mm): * PIN 1 (5V) → 3.3V LDO input → ESP32-S3 3V3 + SEN66 VDD + SD VCC * PIN 2 (GND primary) → power ground * PIN 5 (I2C SCL) → SEN66 SCL + ESP32-S3 SCL (400 kHz Fast Mode) * PIN 6 (I2C SDA) → SEN66 SDA + ESP32-S3 SDA
Via GX12 Connector B (right, X=+25mm): * PIN 1 (GND shield) → signal ground reference * PIN 2 (GPS TX tap) → ESP32-S3 UART RX via 1 MΩ series resistor (georeferencing)
On-mast only: * ESP32-S3 SPI (MOSI/MISO/SCK/CS) → MicroSD module
Pins free after sensor payload connection: * Connector A: UART4 TX/RX (pins 3/4), spare (pin 7) * Connector B: UART5 TX/RX (pins 3/4), AUX GPIO 1/2 (pins 5/6), spare (pin 7)
[3] SOFTWARE — ESP32-S3 MICROPYTHON LOGGER¶
Setup¶
- Flash MicroPython firmware to ESP32-S3 (latest stable from micropython.org).
- Install Thonny IDE on laptop. Connect ESP32-S3 via USB.
- Upload SEN66 I2C library (available from Sensirion GitHub).
- Upload logger script (see Section [4]).
- Copy
boot.pyandmain.pyto ESP32-S3 root. - Configure WiFi SSID and password in
config.py.
Libraries required¶
### Install via mpremote or Thonny package manager:
### - sensirion-shdlc-driver (or direct I2C implementation)
### - sdcard (MicroPython built-in)
### - ujson (MicroPython built-in)
Logger script¶
See libdrone_-_Firmware/libdrone_-_Sensor_Logger/ for all source files.
main.py is the entry point; config.py is the only file you edit.
Full deployment instructions in libdrone_-_Firmware/README_DEPLOYMENT.md.
Note: The SEN66 CRC bytes in the data frame need verification against the actual datasheet during first bench test. The parser above is a starting point — validate each field against known values.
[4] DATA FORMAT¶
Each line in the log file is a JSON object:
{"ts":"2026-03-15T10:23:45Z","lat":49.1827,"lon":15.9007,
"pm1_0":3.2,"pm2_5":5.1,"pm4_0":6.8,"pm10":8.3,
"rh":62.4,"temp_c":8.1,"voc":105.0,"nox":10.0,"co2":418}
Files are named aq_<unix_timestamp>.jsonl — one file per power cycle.
Format: newline-delimited JSON (JSONL) — directly importable to Python pandas,
QGIS, InfluxDB, or Grafana.
[5] WIFI SYNC ON LANDING¶
When the ESP32-S3 boots (or resumes after flight), if SYNC_ON_BOOT = True
it attempts WiFi connection and syncs new log files to the Synology.
Sync code lives in sync_client.py. On the Synology side: a simple Python HTTP server in a Docker container
receives the PUT requests and writes files to /volume1/libdrone/sensor-logs/.
[6] DATA ANALYSIS — QUICK START¶
Analysis scripts live in libdrone_-_Firmware/libdrone_-_Sensor_Logger/.
Load any aq_*.jsonl file into Python pandas with pd.read_json(f, lines=True).
Export to CSV and open in QGIS; symbolise by PM2.5 value on OpenStreetMap base.
For map visualisation: import CSV to QGIS with lat/lon columns. Symbolise by PM2.5 value. Overlay on OpenStreetMap base. Result: georeferenced air quality map of Telč at drone altitude.
[7] FIELD PROTOCOL — AIR QUALITY MISSIONS¶
Before flight: * Charge 1S sensor battery (not the main 6S pack). * Power on sensor logger BEFORE takeoff — allow 60 seconds for SEN66 fan and measurement stabilisation. * Verify SD card logging active (LED blink or serial monitor if bench setup). * Check SEN66 intake: clear of debris.
Flight planning for air quality: * Fly systematic transects at consistent altitude (e.g. 30m AGL). * Slow flight speed — 4–8 m/s for better spatial resolution. * Avoid hovering directly over pollution sources during sampling transects. * Consider wind direction: fly upwind to downwind for gradient mapping. * Telč specific: interesting transects include old town centre, industrial zone (if any), pond shoreline (humidity gradient), field boundaries.
After flight: * Land. Do not immediately power off sensor — allow 30 seconds for final readings. * Check 1S battery voltage: if below 3.5V, recharge before next mission. * If WiFi available: sync will begin automatically on next boot. * If not: logs stay on SD card until next WiFi opportunity.
Data quality notes: * SEN66 temperature reading is affected by self-heating — not suitable for accurate absolute temperature measurement in flight. RH similarly affected. * PM readings at altitude may differ significantly from ground level — document flight altitude in mission notes. * First 30 seconds after power-on: SEN66 fan warmup — discard these readings or mark them in post-processing.
[8] MAST OPERATION — FITTING AND REMOVING¶
To fit mast (60 seconds): 1. Ensure drone is powered off and main battery removed. 2. Align mast base footprint over insert bosses on Backplane/top plate. 3. Insert 2 × M3 × 8mm screws. Finger-tight + 1/4 turn. Do not overtorque. 4. Connect GX12 Connector A male (left, signal side) — screw ring finger-tight. 5. Connect GX12 Connector B male (right, GPS/aux side) — screw ring finger-tight. 6. Connect main battery. Sensor logger powers on automatically. 7. Verify SD logging active before arming drone (LED blink or Betaflight OSD).
To remove mast: 1. Remove main battery — sensor logger powers off. 2. Disconnect GX12 Connector B (right), then Connector A (left). 3. Unscrew 2 × M3 screws. Lift mast clear. 4. Both dust caps on drone-side GX12 males — mandatory.
During brain module frame swap: Remove mast before swap (step 7.2 in WBS Phase 7). Refit after swap to whichever frame is flying. Both frames have identical insert positions — mast fits without adjustment.
[9] MAINTENANCE¶
| Interval | Action |
|---|---|
| Every mission | Inspect SEN66 air intake: clear of debris/dust |
| Every 5 missions | Clean SEN66 intake with dry compressed air if dusty |
| Every 10 missions | Check I2C cable connections — vibration can loosen |
| Monthly | Check 1S LiPo health: charge to storage (3.8V) if unused |
| Annually | SEN66 self-test via firmware command; SD card integrity |
| Replace SEN66 if | Fan noise changes, readings drift implausibly |
[10] WEIGHT SUMMARY¶
| Item | Weight |
|---|---|
| SEN66 sensor | ~20 g |
| ESP32-S3 mini + SD board | ~8 g |
| Printed mast + cradle | ~12 g |
| 3.3V LDO | ~1 g |
| Wiring & connectors | ~3 g |
| GX12-7 female ×2 | ~8 g |
| M3 screws ×2 | ~1 g |
| Total payload | ~53 g |
Powered via drone 5V BEC (GX12 Connector A PIN 1). No separate 1S LiPo on mast.
AUW with sensor payload (V2.4.6 corrected figures):
| Config | Drone AUW | + Payload | Total AUW | EASA |
|---|---|---|---|---|
| Bare drone | 807 g | — | 807 g | Open A1 ✓ |
| + Sensor payload | 807 g | 53 g | 860 g | Open A2 ✓ (40g headroom) |
40g headroom to the 900g A2 boundary. Comfortable — accounts for measurement variance, epoxy delta, and minor print-to-print variation.
Video payload (Insta360 GO 3S — design intent, not yet built): ~43g total (35g camera + 8g bracket). AUW ~850g — Open A2 ✓.
"MEASURE THE AIR. MAP THE CITY. DOCUMENT EVERYTHING."
[11] FUTURE PAYLOAD VARIANT — INSTA360 GO 3S VIDEO MODULE¶
Status: design intent only — not yet built. Document this before modelling begins so constraints and tradeoffs are captured.
Concept¶
A clip-on camera mount for the Insta360 GO 3S, attaching to the front of the drone and floating a few centimetres above the nose. Self-contained — the GO 3S has its own battery, own storage, and its own lens. No electrical integration with the drone required. Clip on in seconds, clip off in seconds.
Same design philosophy as the sensor mast: independent, removable, zero changes to the base drone.
Insta360 GO 3S key specs¶
video_payload_camera = Insta360 GO 3S
video_payload_weight = 35 g (camera only, no case)
video_payload_resolution = 2.7K / 4K (with Action Pod)
video_payload_battery = internal, ~150 min
video_payload_mount = magnetic + physical clip
video_payload_dimensions = 54.6 × 23.6 × 20.7 mm
Mounting architecture¶
Clip-on PETG bracket attaches to the front GPS/camera bracket — the same bracket that already carries GPS + HDZero camera. No new mounting points on the drone body required. The GO 3S sits above and forward of the existing bracket, floating ~30-40mm above the nose, slightly forward-angled downward for cinematic FOV.
Retention: physical clip + optional thin rubber band. The GO 3S magnetic mount is supplemented by a PETG cradle that captures the camera body — magnetic alone is not sufficient for crash loads.
GPS signal degradation — accepted tradeoff¶
The GO 3S metal housing will partially occlude the GPS antenna sky cone when mounted above the nose. This is a known and accepted tradeoff:
gps_degradation_acknowledged = true
expected_satellite_loss = 3-6 satellites (from ~22 to ~16-19)
position_accuracy_impact = minor — still well above 8-sat GPS Rescue minimum
mapping_accuracy_impact = acceptable for visual/cinematic use
research_mapping_use = remove video payload for precision air quality runs
Rule: never fly with video payload when GPS Rescue is the primary safety net in a challenging environment. For open field cinematic work — fine.
Design constraints for when modelling begins¶
- Camera housing must not contact GPS antenna or bracket PCB
- Minimum 15mm clearance between GO 3S metal body and GPS patch antenna
- Bracket must be removable without tools — clip or single thumb screw maximum
- No wires to route — GO 3S is fully self-contained
- CG shift forward acceptable — 35g at nose adds ~5mm CG shift forward, within tuning adjustment range (minor P-term reduction may be needed)
- Vibration isolation: 2mm foam pad between PETG cradle and GO 3S body — protects footage quality, protects camera from crash shock
- Print material: PETG Natural — same as GPS bracket for visual consistency
Weight budget impact¶
video_payload_camera_weight = 35 g
video_payload_bracket_weight = ~8 g (estimated PETG cradle)
video_payload_total = ~43 g
drone_with_video_payload = ~807 + 43 = ~850 g (Open A2 ✓, 50g headroom)
What needs to happen before modelling¶
- Measure exact GO 3S dimensions in hand (54.6 × 23.6 × 20.7mm nominal)
- Measure exact clearance between GPS patch antenna top face and top of existing front bracket — determines minimum cradle height
- Confirm GPS satellite count with a rough mock-up (cardboard + GO 3S held by hand) before committing geometry — verify degradation is acceptable
FreeCAD¶
New Part Studio: "Video Payload Bracket" — separate from GPS/camera bracket. The GPS/camera bracket is unmodified. Video bracket clips onto it as an add-on. Estimated modelling time: 45-60 minutes once physical measurements are taken.
END OF FILE
Revision History¶
| Version | Date | Author | Summary |
|---|---|---|---|
| 3.5.0 | 2026-04-01 | JS | Section [11] gains Civil Resilience category (supply drop, thermal perimeter, chemical plume). References LD-COM-001/002. Community/resilience tags added. |
| 3.4.3 | 2026-03-27 | JS | Payload-side connector gender corrected to female throughout. Stale sensor payload refs updated. |
| 3.4.0 | 2026-02 | JS | GX12-12 corrected to dual GX12-7 A/B. Full pinout documented. |
| 3.3.0 | 2025-12 | JS | Hot-swap backplane module architecture. GX12 interface introduced. |