End-to-end LoRa system: bare-metal STM32 firmware, Go backend, TypeScript dashboard, Android range-test app, and a custom PCB.
This is probably my most ambitious investigation — a full end-to-end LoRa communication system spanning five different technology stacks. It started when I got hold of a pair of DX-LR30 boards (STM32F103 + SX1262 LoRa transceiver + USB serial) and wanted to see what I could build with them.
The firmware layer is bare-metal C99 on the STM32F103, turning the boards into transparent UART-to-LoRa serial bridges. No RTOS, no HAL bloat — just register-level access to the SX1262.
The Go backend (1.24) acts as the hub: it reads from the USB serial port, stores everything in SQLite, exposes a GraphQL API, and pushes real-time updates over WebSocket. The TypeScript frontend (Vite) renders a hardware info dashboard showing signal strength, packet stats, and device status.
Then there's the Android range-test app written in Java. You connect a LoRa board to your phone via USB OTG, walk around, and it maps signal strength against GPS coordinates. The results feed back to the Go server for visualization.
The cherry on top is a custom PCB designed in KiCad — a dog tracker combining an ESP32, SX1262 LoRa module, and GPS receiver. It's the logical next step: take everything I learned and put it on a purpose-built board.