
Lora node
Mehdi-Ldj/lora-ble-sensor-node
Off-grid LoRa/BLE sensor node — 868 MHz LoRa, 2.4 GHz BLE, solar/LiFePO4

High altitude balloon payload: a CC1200 sub-GHz telemetry downlink and an air quality sensor stack, hosted by a Seeed Wio-E5 module. Four-layer 50 x 30 mm board, routed.
Cc1200-balloon is an open-source printed circuit board by tmpk13, from the tmpk13/cc1200-balloon repository on GitHub, published under the MIT licence. It is a 4-layer board of 50 × 30 mm with 108 parts on 100 nets, routed with 649 tracks and 289 vias.
It is built around the AT6558R-5N32, CC1200RHB and WIO-E5, with the AS3935-BQFT, BME688 and SCD40-D-R2 among its other parts. Its parts include 55 capacitors, 13 resistors, 12 inductors, 7 ICs and 7 connectors.
High altitude balloon payload: a CC1200 sub-GHz telemetry downlink and an air
quality sensor stack, hosted by a Seeed Wio-E5 module. Four-layer 50 x 30 mm
board, routed. The last full review is in BOARD_REVIEW.md; read its verdict
table before ordering boards. Five items in it block fabrication.
The CC1200 radio and its 434 MHz matching network are carried over from the
v1 design (an import of the Altus Metrum TeleMini netlist). Everything else
is new: the Wio-E5 host, an AT6558R GNSS receiver with an on-board patch
antenna and LNA, a burn/cutdown channel, and the sensor set from
Forest-Balloon.csv.
classDiagram
direction LR
class WioE5["U201 Wio-E5"] {
STM32WLE5JC + SX126x
SPI1 PB3 PB4 PB5
I2C1 PB6 PB7
USART2 PA2 PA3
LPUART1 PC1
ADC_IN0 PB13
RFIO to J201 SMA
}
class Power["Power"] {
J101 battery pads 3.6 V max
Q101 reverse block
+BATT unregulated
R103 R104 sense divider
}
class Burn["Burn channel"] {
Q1 P-FET high side
gate on PA15
J1 two pin header
}
class Radio["U301 CC1200"] {| Sheet | Contents |
|---|---|
mcu.kicad_sch | battery pads, reverse-block P-FET, sense divider, Wio-E5 and decoupling, reset, SWD and console pads, status LED, I2C pull-ups, LoRa SMA, burn FET and header, two mounting holes |
radio.kicad_sch | CC1200, 40 MHz crystal, per-pin decoupling, loop filter, the v1 TX/RX matching network, SMA |
gnss.kicad_sch | AT6558R-5N32, 26 MHz TCXO, 32.768 kHz RTC crystal, internal DCDC/LDO passives, ALND-WB-0014 LNA, ceramic patch antenna |
sensors.kicad_sch | SCD40, AS3935 with its 500 kHz loop antenna, one BME688, BMV080 ZIF connector on I2C with address jumpers |
There is no regulator and no switch. The cell drives the whole board through one P-channel FET:
J101 -- VBATT_IN -- Q101 (reverse block) -- +BATT -- everythingQ101 blocks a reversed cell: its source is on the load side, so the body
diode conducts battery to load and the channel shorts it out. The rail is
the cell minus one Rds(on) and follows the cell from full charge to cutoff.
R103/R104 (100k/100k) put half of it on PB13 for the ADC.
| Rail | +BATT, unregulated, 3.6 V maximum |
| Bulk on the rail | 43.5 uF nominal as drawn, 4.7 uF at the MCU and the GNSS, 10 uF at each of the three big sensor loads, 1 uF at each IC |
| At the battery entry | nothing; nearest is C202 at 19 mm |
| Off-state drain | none possible: the board is live whenever the cell is connected |
Every supply window on this rail is tabulated in section 4 of the 2026-09-15 review; the BMV080 and the TCXO are the tight ones.
The receiver sees a passive 15 x 15 mm ceramic patch (J401, The Antenna
Company AC33154-1T) mounted on the back of the board, feeding an Abracon
ALND-WB-0014 LNA (U402, 16 dB, 0.85 dB noise figure) on the front.
ANT_BIAS powers the LNA, which puts the LNA's 5.3 mA above the chip's
2.5 mA antenna-detect threshold and switches it off with the receiver in
sleep. C402 100 pF blocks DC into RF_IN; L402 6.8 nH is the series
match at the chip.
L404 8.2 nH sits in series 0.87 mm from RFIN, which is the Abracon
reference topology. BOARD_REVIEW.md items 4, 8, 17, 21 and 24 still
concern this block.
Q1, a P-channel FET on PA15, switches +BATT into the two-pin header
J1 for a cutdown wire. R205 100 k holds the gate at the rail while the
MCU is in reset. Review items 15, 20, 22 and 23 still concern it.
| Pin | Net | Function |
|---|---|---|
| 8 PB3 | SPI_SCK | SPI1 clock to the CC1200 |
| 7 PB4 | SPI_MISO | SPI1 MISO |
| 11 PB5 | SPI_MOSI | SPI1 MOSI |
| 26 PB14 | RADIO_CS | CC1200 chip select |
| 5 PB15 | RADIO_RST | CC1200 reset |
| 20 PB10 | RADIO_IRQ | CC1200 GPIO2 |
| 6 PA15 | Net-(Q1-G) | burn FET gate |
| 25 PB9 | PM_IRQ | BMV080 interrupt, open drain active low |
| 10 PB6 | SCL | I2C1 clock |
| 9 PB7 | SDA | I2C1 data |
| 23 PA0 | LIGHTNING_IRQ | AS3935 interrupt (wake-capable) |
| 19 PA2 | GNSS_RX | USART2 TX to the receiver, through 22R |
| 18 PA3 | GNSS_TX | USART2 RX from the receiver, through 22R |
| 27 PA10 | GNSS_PPS | 1PPS |
| 13 PC0 | GNSS_ONOFF | receiver sleep control |
| 12 PC1 | DBG_TX | LPUART1 console out, on the debug pads |
| 24 PB13 | BATT_VSENSE | ADC_IN0, 1:2 divider off +BATT; also the module's boot pin |
| 21 PA9 | STATUS_LED | green LED through 1 k |
| 15 RFIO | LORA_RF | J201, the module's own sub-GHz radio |
CC1200 GPIO0 and GPIO3 go to test pads TP301/TP302. GNSS SWD is on
TP401/TP402.
| Ref | Part | Carries |
|---|---|---|
J101 | two 2 x 4 mm solder pads, 3 mm pitch, back side | battery leads |
J202 | six 1.27 mm solder pads, back side | +BATT GND SWDIO SWCLK NRST DBG_TX |
J1 | 2-pin 1.00 mm header, front side | burn wire, switched high side |
J201 J301 | Samtec SMA-J-P-H-ST-EM1 edge launch | LoRa and CC1200 antennas |
J401 | AC33154-1T patch, pin fed through the board | GNSS, back side |
J501 | Kyocera 6844 0.30 mm 13-way ZIF | BMV080 flex; the sensor lies along the bottom edge |
JP1 JP2 | 3-pad solder jumpers | BMV080 I2C address bits; open by default, which the sensor does not allow |
Most bought symbols carry Datasheet, MPN and Manufacturer fields,
mirrored onto the board's footprints. The sourcing table is
tools/parts.json.
python3 tools/set_part_fields.py --check # report what would change
python3 tools/set_part_fields.py # write fields into *.kicad_sch and the .kicad_pcb
python3 tools/gen_digikey_bom.py # digikey_bom.csv, BOM.md, bom.jsonThe BOM tools do not currently run. Six symbols (Q1, J1, X401,
U402, C416, J401) have no entry in tools/parts.json, so
digikey_bom.csv and BOM.md are stale: they still list three SMA jacks,
an off-board active antenna, the old TCXO and two BME688. Review item 19
lists the DigiKey numbers to add.
sheets/*.json, build.sh and the TypeScript tools describe the design as
it stood on 2026-09-06. The schematics were hand-edited after that and the
board was routed against them. Do not run build.sh: it would overwrite
all four sheets with the old design. The .kicad_sch files are the source
of truth.
| Check | Result on 2026-09-22 |
|---|---|
| full-hierarchy ERC | 0 errors, 3 warnings (Q1, JP1, JP2 differ from the library) |
| DRC, zones refilled, all track errors | 27 unique errors: 13 clearance, 7 starved thermal, 4 courtyard, 3 hole clearance |
| schematic parity | 0 unconnected items, 1 warning (Q1 footprint) |
| pinouts vs data sheets | Wio-E5, CC1200, AT6558R, AS3935, BME688, SCD40, BMV080, ALND-WB-0014, NSC5351B and now Q1: all match |
BATT_VSENSE makes the drift observable.VDD_IO and DX_IN are specified from 2.7 V;
the TCXO is rated to 3.3 V and is fed from a pin that can reach 3.6 V.
Budget the flight on that, not on the cell's cutoff.| Qty | Value | Footprint | References |
|---|---|---|---|
| 11 | 100n | Capacitor_SMD:C_0402_1005Metric | C107, C201, C204, C401, C403, C405, C412, C413, C501, C507, C508 |
| 11 | 47n | Capacitor_SMD:C_0402_1005Metric | C301, C302, C303, C304, C305, C306, C307, C308, C309, C315, C316 |
| 8 | 1u | Capacitor_SMD:C_0402_1005Metric | C312, C407, C408, C409, C410, C411, C504, C511 |
| 3 | 100k | Resistor_SMD:R_0402_1005Metric | R103, R104, R205 |
| 3 | 10k | Resistor_SMD:R_0402_1005Metric | R201, R401, R501 |
| 3 | 10u | Capacitor_SMD:C_0402_1005Metric | C512, C513, C515 |
| 3 | 5p1 | Capacitor_SMD:C_0402_1005Metric | C323, C325, C326 |
| 2 | 100p | Capacitor_SMD:C_0402_1005Metric | C310, C402 |
| 2 | 10n | Capacitor_SMD:C_0402_1005Metric | C311, C314 |
| 2 | 12p | Capacitor_SMD:C_0402_1005Metric | C318, C319 |
| 2 | 15n | Inductor_SMD:L_0402_1005Metric | L302, L305 |
| 2 | 22R | Resistor_SMD:R_0402_1005Metric | R402, R403 |
| 2 | 27n | Inductor_SMD:L_0402_1005Metric | L307, L308 |
| 2 | 4k7 | Resistor_SMD:R_0402_1005Metric | R203, R204 |
| 2 | 4u7 | Capacitor_SMD:C_0603_1608Metric | C404, C406 |
| 2 | 56n | Inductor_SMD:L_0402_1005Metric | L301, L306 |
| 2 | M2.5 | MountingHole:MountingHole_2mm | H101, H102 |
| 1 | 100u | cc1200_balloon:L_Axial_D2.8mm_L7.2mm_P10.16mm_Horizontal | L501 |
| 1 | 10u | Capacitor_SMD:C_0603_1608Metric | C503 |
| 1 | 18R | Resistor_SMD:R_0402_1005Metric | R302 |
| 1 | 1k | Resistor_SMD:R_0402_1005Metric | R202 |
| 1 | 1n0 | Capacitor_SMD:C_0402_1005Metric | C416 |
| 1 | 1n8 | Capacitor_SMD:C_0402_1005Metric | C317 |
| 1 | 220n | Capacitor_SMD:C_0402_1005Metric | C313 |
| 1 | 22n | Inductor_SMD:L_0402_1005Metric | L304 |
| 1 | 2p2 | Capacitor_SMD:C_0402_1005Metric | C322 |
| 1 | 32.768kHz | Crystal:Crystal_SMD_3215-2Pin_3.2x1.5mm | X402 |
| 1 | 39p | Capacitor_SMD:C_0402_1005Metric | C321 |
| 1 | 4.7u | Capacitor_SMD:C_0402_1005Metric | C202 |
| 1 | 40MHz | Crystal:Crystal_SMD_3225-4Pin_3.2x2.5mm | X301 |
| 1 | 434MHz ANT pads | Connector_Coaxial:SMA_Samtec_SMA-J-P-H-ST-EM1_EdgeMount | J301 |
| 1 | 43n | Inductor_SMD:L_0402_1005Metric | L303 |
| 1 | 47p | Capacitor_SMD:C_0402_1005Metric | C506 |
| 1 | 4u7 | Inductor_SMD:L_0603_1608Metric | L403 |
| 1 | 56k | Resistor_SMD:R_0402_1005Metric | R301 |
| 1 | 56p | Capacitor_SMD:C_0402_1005Metric | C320 |
| 1 | 6n8 | Inductor_SMD:L_0402_1005Metric | L402 |
| 1 | 6p2 | Capacitor_SMD:C_0402_1005Metric | C324 |
| 1 | 8n2 | Inductor_SMD:L_0402_1005Metric | L404 |
| 1 | 910p | Capacitor_SMD:C_0402_1005Metric | C505 |
| 1 | ALND-WB-0014 | cc1200_balloon:Abracon_DFN-6_1.1x0.7mm | U402 |
| 1 | AS3935-BQFT | Package_DFN_QFN:QFN-16-1EP_4x4mm_P0.65mm_EP2.7x2.7mm | U502 |
| 1 | AT6558R-5N32 | cc1200_balloon:AT6558R_QFN-40-1EP_5x5mm_P0.4mm_EP3.4x3.4mm | U401 |
| 1 | BATT pads | cc1200_balloon:SolderPad_Wire_1x02_P3.0mm | J101 |
| 1 | BME688 | Package_LGA:Bosch_LGA-8_3x3mm_P0.8mm_ClockwisePinNumbering | U503 |
| 1 | BMV080 | cc1200_balloon:Kyocera_046844713002846_FPC-13_P0.30mm | J501 |
| 1 | CC1200 | Package_DFN_QFN:Texas_RHB0032E_VQFN-32-1EP_5x5mm_P0.5mm_EP3.45x3.45mm | U301 |
| 1 | Conn_01x02 | Connector_PinHeader_1.00mm:PinHeader_1x02_P1.00mm_Vertical | J1 |
| 1 | DMG3401LSN-7 | Package_TO_SOT_SMD:SOT-23 | Q101 |
| 1 | GNSS TCK | TestPoint:TestPoint_Pad_1.0x1.0mm | TP401 |
| 1 | GNSS TMS | TestPoint:TestPoint_Pad_1.0x1.0mm | TP402 |
| 1 | GNSS patch 15x15mm | cc1200_balloon:Patch_AC33154-1T_15x15mm | J401 |
| 1 | GPIO0 | TestPoint:TestPoint_Pad_1.0x1.0mm | TP301 |
| 1 | GPIO3 | TestPoint:TestPoint_Pad_1.0x1.0mm | TP302 |
| 1 | IAB0 | cc1200_balloon:Jumper_3_0402 | JP1 |
| 1 | IAB1 | cc1200_balloon:Jumper_3_0402 | JP2 |
| 1 | LoRa ANT pads | Connector_Coaxial:SMA_Samtec_SMA-J-P-H-ST-EM1_EdgeMount | J201 |
| 1 | PMOS | Package_TO_SOT_SMD:SOT-523 | Q1 |
| 1 | SCD40-D-R2 | Sensor:Sensirion_SCD4x-1EP_10.1x10.1mm_P1.25mm_EP4.8x4.8mm | U501 |
| 1 | STATUS | LED_SMD:LED_0402_1005Metric | D201 |
| 1 | SWD+DBG pads | cc1200_balloon:SolderPad_1x06_P1.27mm | J202 |
| 1 | TCXO 26MHz | Oscillator:Oscillator_SMD_Kyocera_2520-6Pin_2.5x2.0mm | X401 |
| 1 | Wio-E5 | cc1200_balloon:WIO-E5 | U201 |
It measures 50 × 30 mm and has 4 copper layers, 1.6 mm thick.
108 parts, built around the AT6558R-5N32, CC1200RHB, WIO-E5 and AS3935-BQFT. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
From the tmpk13/cc1200-balloon repository on GitHub, at the commit this page was made from: the board is cc1200_balloon.kicad_pcb and its schematic cc1200_balloon.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository publishes it under the MIT licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).

Mehdi-Ldj/lora-ble-sensor-node
Off-grid LoRa/BLE sensor node — 868 MHz LoRa, 2.4 GHz BLE, solar/LiFePO4


Kilan777/HomeDeck
Jarvis HomeDeck: a Raspberry Pi CM4 carrier board and voice-assistant software for a 7-inch smart display (KiCad hardware, generated from Python, plus the Python/JS assistant)
solderable/storm-tracker-hardware
Open-source-ready Storm Tracker hardware design, documentation, BOM, and manufacturing package


filliformes/pandore
pandore is an open-source digital audio instrument protyping platform based on the LattePanda Mu.

ararobo/GN10RemoteEmergencyStop
PowerCutoffBoard and RemoteSwitchBoard created by Gento Aiba.

Hazel-H-Chen/PocketSens
Microcontroller based sensor suite for portable environmental measurements.