
Monolith
MidwestMotorBoy/Battery-Bank
Monolith: an ultralight IP67 power bank for backpacking. 4S BAK 65E 21700 (91 Wh, under the 100 Wh airline limit), two bidirectional 100 W USB-C PD ports, Bluetooth LE (TI CC2340) with an iPhone app.

A BLE soil moisture + temperature sensor for houseplants: a custom fork-shaped PCB (CC2340R5MODA + resistive probe, CR2032 coin cell) plus an Android app that logs and charts the history.
Soil sensor is an open-source printed circuit board by Guarecuco, from the Guarecuco/soil-sensor repository on GitHub. It is a 2-layer board of 24.4 × 112.5 mm with 24 parts on 24 nets, routed with 100 tracks and 91 vias.
It is built around the CC2340R5MODAN0MHAR, BSS84 and MMBT3904. Its parts include 8 capacitors, 5 resistors, 2 transistors, 1 IC and 1 connector. It belongs with the sensors and measurement boards of this library.
A BLE soil moisture + temperature sensor for houseplants: a custom fork-shaped PCB (CC2340R5MODA + resistive probe, CR2032 coin cell) plus an Android app that logs and charts the history.
soil-sensor/
├── firmware/ TI SimpleLink BLE5-Stack firmware (FreeRTOS, ticlang)
├── android/ Kotlin/Compose companion app
├── hardware/ KiCad project + JLCPCB fabrication/assembly output
└── docs/ screenshots, BLE protocol reference

Fork-shaped PCB (top / bottom). Render by KiCad.
The board samples its resistive fork probe every 10 minutes and keeps a rolling 7-day buffer. The Android app connects, pulls only the samples it hasn't seen yet, and keeps its own unbounded local history.
The app can also push a signed firmware image to the sensor over BLE (on-chip OAD via MCUboot).
KiCad project + JLCPCB fabrication/assembly output
in hardware/.
SDK basic_ble example, stripped to a peripheral-only role plus on-chip OAD:
app/app_soil_sensor.c - the glue: a 10-min Clock takes a sample
(soil + battery), stores it, notifies subscribers, and reports its own
version over Device Information at bootapp/soil_sensor.c - GPIO-gated ADC for the fork probe + die temperatureapp/soil_history.c - RAM ring buffer (1008 samples ≈ 7 days) with a
never-reset sequence number per sample so a client can resume a syncapp/battery_gauge.c - VDDS battery estimate via the internal Battery
Channel ADCapp/Profiles/* - GATT services: custom soil sensor, Battery (0x180F +
a custom mV characteristic), on-chip OAD glueRequires the SimpleLink Lowpower F3 SDK, SysConfig, and the ticlang compiler.
The makefile pulls SYSCONFIG_TOOL and TICLANG_ARMCOMPILER from the
SDK's imports.mak ($SDK/imports.mak), which ships with placeholder
/home/username/... paths. Edit those two ?= lines once to point at
your real installs, e.g.:
SYSCONFIG_TOOL ?= /home/you/ti/ccs2100/ccs/utils/sysconfig_1.28.0/sysconfig_cli.sh
TICLANG_ARMCOMPILER ?= /home/you/ti/ccs2100/ccs/tools/compiler/ti-cgt-armllvm_5.1.1.LTSThen just:
cd firmware/freertos/ticlang
gmakeOutputs:
soil_sensor.hex / soil_sensor.out - full-flash image for a debugger.soil_sensor_ota.bin - the OAD image. Version is
MAJOR.MINOR.<git commit count> (e.g. 1.0.6), stamped by
tools/oad_version.sh. Build from a repo checkout; a CCS build copies
the sources out of git and the commit count falls back to 1.0.0.soil_sensor_v1.bin / _v2.bin - SDK fixed 1.0.0 / 2.0.0 placeholders,
handy for OAD upgrade testing.OAD updates a running device; the first flash needs three images at fixed addresses. Flash all three with UniFlash:
| Image | Where from | Address |
|---|---|---|
mcuboot_onchip_LP_EM_CC2340R53_nortos_ticlang.hex | $SDK/examples/rtos/LP_EM_CC2340R53/ble/prebuilt_hexfiles/ (prebuilt) | AUTO |
basic_persistent_LP_EM_CC2340R53_freertos_ticlang.bin | $SDK/examples/rtos/LP_EM_CC2340R53/ble/basic_persistent/ (build it) | 0x6000 |
soil_sensor_ota.bin | this repo, built above | 0x34000 |
Use the prebuilt MCUboot hex. A self-built one defaults to a generic flash map that never boots the app slot.
Tap the update icon next to "Disconnect" in the app, pick
soil_sensor_ota.bin, and confirm the version/size shown.
SOIL_SAMPLE_PERIOD_MS in app/app_soil_sensor.c
(currently 10 minutes).Location: android/. Kotlin + Jetpack Compose, Material 3 (dynamic color),
Room, no third-party BLE or charting libraries.
cd android
./gradlew assembleDebug
adb install -r app/build/outputs/apk/debug/app-debug.apkRequires local.properties pointing at an Android SDK (sdk.dir=...).
It is not checked in, so create your own. minSdk 31 (Android 12),
targetSdk/compileSdk 37.
Services, characteristics, and record layout: docs/PROTOCOL.md.
| Qty | Value | Footprint | References |
|---|---|---|---|
| 4 | 100nF | Capacitor_SMD:C_0603_1608Metric | C2, C3, C4, C5 |
| 3 | Fiducial | Fiducial:Fiducial_1mm_Mask2mm | FID1, FID2, FID3 |
| 3 | MountingHole | MountingHole:ToolingHole_1.152mm | H1, H2, H3 |
| 2 | 100k | Resistor_SMD:R_0603_1608Metric | R1, R4 |
| 1 | 0 | Resistor_SMD:R_0402_1005Metric | R5 |
| 1 | 100 | Resistor_SMD:R_0603_1608Metric | R2 |
| 1 | 10k | Resistor_SMD:R_0603_1608Metric | R3 |
| 1 | 10uF | Capacitor_SMD:C_0805_2012Metric | C1 |
| 1 | 15pF | Capacitor_SMD:C_0402_1005Metric | C6 |
| 1 | 1pF | Capacitor_SMD:C_0402_1005Metric | C7 |
| 1 | BSS84 | Package_TO_SOT_SMD:SOT-23 | Q2 |
| 1 | CC2340R5MODAN0MHAR | CC2340R5MODA:MHA0024A-MFG | U1 |
| 1 | CR2032 3V | Battery:BatteryHolder_Keystone_3034_1x20mm | BT1 |
| 1 | Conn_02x05_Counter_Clockwise | Connector:Tag-Connect_TC2050-IDC-NL_2x05_P1.27mm_Vertical | J1 |
| 1 | DNM | Capacitor_SMD:C_0402_1005Metric | C8 |
| 1 | MMBT3904 | Package_TO_SOT_SMD:SOT-23 | Q1 |
It measures 24.4 × 112.5 mm and has 2 copper layers, 1.6 mm thick.
24 parts, built around the CC2340R5MODAN0MHAR, BSS84 and MMBT3904. 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 Guarecuco/soil-sensor repository on GitHub, at the commit this page was made from: the board is hardware/soil_sensor.kicad_pcb and its schematic hardware/soil_sensor.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Its repository states no licence, so its author keeps all rights: ask Guarecuco before reusing the design.

MidwestMotorBoy/Battery-Bank
Monolith: an ultralight IP67 power bank for backpacking. 4S BAK 65E 21700 (91 Wh, under the 100 Wh airline limit), two bidirectional 100 W USB-C PD ports, Bluetooth LE (TI CC2340) with an iPhone app.


scattym/kicad-duct-turbo-fan-controller
Fan controller projects for the duct turbo, terrabloom and ac infinity fans

Evc-r/Balancing-Cube-STM32
STM32F411CEU6 and ICM-20948 v2 self-balancing cube firmware port and integration plan.



nakul-biovaco/Embedsys-embedded-educational-board
Industrial-grade ESP32-WROOM-32E educational development board (4-layer ENIG PCB, BQ24075 power-path, dual regulators, ST7789 IPS display & SHT40 sensor). 0 DRC certified.

TenOfNine/SmartKroneSplitFlap
This repository contains the software and architecture for old Krone SplitFlap Displays. It works by using an ESP32 as a Master and then daisychains all modules using a daughter board for each element.