LD-PAY-001  ·  v2.4.6  ·  published  ·  2026-03-30  ·  CC BY-SA 4.0
docs  /  payloads  /  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

  1. Flash MicroPython firmware to ESP32-S3 (latest stable from micropython.org).
  2. Install Thonny IDE on laptop. Connect ESP32-S3 via USB.
  3. Upload SEN66 I2C library (available from Sensirion GitHub).
  4. Upload logger script (see Section [4]).
  5. Copy boot.py and main.py to ESP32-S3 root.
  6. 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

  1. Camera housing must not contact GPS antenna or bracket PCB
  2. Minimum 15mm clearance between GO 3S metal body and GPS patch antenna
  3. Bracket must be removable without tools — clip or single thumb screw maximum
  4. No wires to route — GO 3S is fully self-contained
  5. CG shift forward acceptable — 35g at nose adds ~5mm CG shift forward, within tuning adjustment range (minor P-term reduction may be needed)
  6. Vibration isolation: 2mm foam pad between PETG cradle and GO 3S body — protects footage quality, protects camera from crash shock
  7. 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

  1. Measure exact GO 3S dimensions in hand (54.6 × 23.6 × 20.7mm nominal)
  2. Measure exact clearance between GPS patch antenna top face and top of existing front bracket — determines minimum cradle height
  3. 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.