Skip to content
Projects

soyboitech/beacons has 31 GitHub stars and 0 forks. GitHot measured 0 stars in 24 hours. Last checked 2026-11-09 06:34 UTC. Last push 2026-11-05.

How these counts are measured

counter surveillance firmware for esp32 boards, plus native ios and android apps. passively detects nearby alpr cameras, drones, body cams, smart glasses and bluetooth trackers.

Measured star growth

in 24h
0
in 7 days
Update delayed
in 15 days
Update delayed
in 1 month
Update delayed

Net star changes over overlapping periods, not daily totals. Missing measurements are left blank. Stars measure attention, not software quality.

README.md

Original

beacons: they're watching. watch back.

beacons

beacons picks up the Wi-Fi and Bluetooth broadcasts of supported surveillance devices, such as license-plate readers, body cams, and drones, and shows them in the iPhone and Android apps. Mesh-Detect can also send them out as Meshtastic alerts. it runs on the beacon, our pocket-sized dual-radio detector, on Colonel Panic's OUI-Spy and Mesh-Detect boards, and on DIY ESP32-C5 boards.

detection is passive: shipping firmware never probes, jams, spoofs, controls, or interferes with nearby devices. the board talks to your phone over bonded, encrypted Bluetooth, and Mesh-Detect also sends alerts through its wired Meshtastic node.

getting started

the apps are free, but live detection needs a compatible board. without one, you can still use sample data and your saved Log.

  • buy a beacon on Tindie or Etsy: the slim model (Tindie, Etsy) or the battery model (Tindie, Etsy). soyboi.tech has current pricing and availability.
  • try the app without hardware: install it for iPhone or Android and tap See How It Works for a tour with made-up detections.
  • connect a board: turn it on, tap Scan for Beacons, pick your board, and approve the pairing request. the app takes you through setup and permissions. do the first pairing somewhere you trust. to add another phone later, or to pair again after a phone forgets the board, turn the board off and on and pair within two minutes; see the pairing guide.
  • flash your own OUI-Spy, Mesh-Detect, or ESP32-C5 board with the DIY flasher or from the command line.
  • get help from the getting-started guide, the app guide, or the FAQ, or open an issue.

supported hardware

every board runs the same detector engine and the same per-category settings. they differ in radio coverage and in where alerts go.

hardware radios alerts
the beacon (slim model: rev-A; battery model: rev-B) nRF52840 dedicated to Bluetooth scanning; ESP32-S3 for Wi-Fi and the app link phone app, onboard buzzer, optional encrypted offline log
OUI-Spy Seeed XIAO ESP32-S3, one radio shared between Wi-Fi and Bluetooth phone app, onboard buzzer, optional encrypted offline log
Mesh-Detect the same XIAO build, plus a wired Heltec V3 running Meshtastic phone app and mesh alerts (your phone's location only on a private channel, while connected), and an optional encrypted offline log
ESP32-C5 (DIY) Seeed XIAO ESP32-C5, or Espressif's ESP32-C5-DevKitC-1 with 8 MB flash (N8R4 or N8R8; community-tested on an N8R8); one radio shared between Bluetooth and 2.4 and 5 GHz Wi-Fi phone app, a passive piezo if you wire one (D2 on the XIAO, GPIO23 on the DevKitC-1, each to GND), optional encrypted offline log; updates are USB reflashes from the DIY flasher

the beacon is about the size of an AirPods case and runs on USB-C power; the battery model charges through the same port. retail units come pre-flashed. pair one with the app to choose detector categories, alerts, and optional location or offline logging. firmware updates come through the app, and USB recovery is specific to each board revision (see production beacon).

for Mesh-Detect, mesh setup covers the Heltec wiring and the public or private channel options.

what it detects

category radio default notes
Flock cameras (license-plate readers) Bluetooth + Wi-Fi on a camera's own Flock- network name, the FS Ext Battery name, or a name with Flock's manufacturer ID is strong evidence; other names and vendor-prefix matches need confirming
Flock Raven audio sensors Bluetooth on matches Raven-specific services seen in field captures
Remote ID drones Bluetooth + Wi-Fi on broadcasts can include the aircraft's position; a separate, opt-in vendor match flags drones without Remote ID, but a hit may be a controller or other vendor gear
body cams (Axon and Utility BodyWorn) Bluetooth + Wi-Fi on Axon's device tag is the strongest match; the Motorola vendor match (Motorola Solutions and WatchGuard Video blocks) is broad, weak, and a separate opt-in
item trackers Bluetooth off Find My, Find Hub, Tile, and SmartTag; Find My and Find Hub tags only count once separated from their owner; no buzzer alerts on the board
smart or recording glasses Bluetooth on every bare company ID reports as a weak match: the Luxottica, Snap and Vuzix IDs until a worn unit is captured, the Meta IDs because they also appear on other Meta hardware
network cameras Wi-Fi off a vendor match may be a camera, recorder, hub, or accessory

the signature reference lists every supported manufacturer, the evidence behind each match, how confidence is set, and the matches we rejected. there are also Axon notes and glasses research. Remote ID decoding uses OpenDroneID.

diagnostic builds also log capture candidates for research. these are not production detections and never reach the phone apps.

limits

confidence

a decoded Remote ID payload or a device-specific signature is strong evidence. a match on a vendor's radio-address prefix (OUI) is weaker: it identifies the registered vendor, not the exact product. prefixes from chip suppliers that would flag unrelated consumer gear are excluded, with one exception: four Liteon Wi-Fi prefixes seen at Flock Falcon sites still match probe requests, so a laptop can trigger them.

tap a detection to see how it was matched, its confidence, and the evidence. confidence describes how specific the evidence is. it is not signal strength, and it is not the probability that a camera is there. treat weak matches as leads to check.

what it can hear

the beacon, OUI-Spy, and Mesh-Detect listen on 2.4 GHz only. the ESP32-C5 builds also visit nine 5 GHz channels, which costs 2.4 GHz about 30% of its listening time (the app has a switch for it). no board can see equipment that never makes a supported broadcast, such as wired-only or purely optical gear. Wi-Fi is scanned one channel at a time, so short transmissions can be missed, and Wi-Fi eco mode adds more gaps. OUI-Spy, Mesh-Detect, and the ESP32-C5 builds split one radio's time between Wi-Fi and Bluetooth; the beacon's dedicated Bluetooth scanner runs the whole time during normal scanning.

an empty screen means nothing supported was recognized while the board was listening. it does not mean you are unwatched. radio coverage has the channel schedule, duty cycles, and Wi-Fi eco tradeoffs.

privacy

there are no accounts, analytics, or third-party trackers, and nothing is uploaded automatically. detections stay on your board and phone unless you export or contribute them yourself. Mesh-Detect is the exception: it sends detections out as mesh alerts, and the default build posts them on the public channel that anyone on the mesh can read. your phone's location is attached only on a private channel, while the app is connected; the public build never sends it. the apps do go online to load map tiles, firmware files, and the optional mapped-camera dataset, but those requests never include your detections.

if you allow location access, the phone geotags sightings and sends its position to the board over the encrypted link. offline records can keep that location. exports can include both where you were and the positions drones broadcast, so check an export before you share it.

two things these protections do not cover:

  • the board can be tracked. it advertises a fixed factory Bluetooth address, because iPhones could not connect to a rotating one in testing.
  • offline encryption does not protect a seized board from forensic access. while buffering is on, the key is stored on the board.

read the privacy policy and the Bluetooth privacy details before you rely on any of this.

the phone apps

both apps have the same four tabs:

  • Status: a radar of devices heard in the last 45 seconds, with a count for each category.
  • Map: located sightings from the last 45 seconds, the last 15 minutes, or all history, plus a separate layer of community-mapped cameras.
  • Log: saved detections, filtered as active, new, or all, with search, filters, signal history, matching evidence, and CSV or GPX export. it works while disconnected.
  • Beacon: the board's detectors, alerts, radios, offline buffering, firmware updates, and connection status, plus this phone's notifications, Live Mode, and display settings.

most pins show where your phone heard a signal, not where the device is. Remote ID drones are the exception, since they can broadcast their own position. the community camera layer is reference data, so a missing pin does not mean there is no camera.

you can Watch or mute individual devices, turn on phone notifications per category (they all start off), and check counts at a glance with Live Mode or home-screen widgets. permanent mutes sync to the board. timed and place mutes only apply on the phone, so the board can still sound for that device. both apps support screen readers, larger text, and higher contrast, and are English-only for now.

platform requires install build from source
iPhone iOS 18 or newer App Store iOS README
Android Android 8 or newer Google Play Android README

the app guide covers pairing, permissions, sample data, alerts and mutes, tracker evidence, Live Mode, widgets, and accessibility.

flashing

production beacon

normal updates come through the app. USB recovery depends on the board revision:

never flash one revision's image onto the other, or a DIY image onto a production beacon. the wrong image can leave the board needing USB recovery.

DIY OUI-Spy, Mesh-Detect, and ESP32-C5

  1. connect the XIAO ESP32-S3, or the ESP32-C5 board, to your computer with a USB-C cable that carries data, not a charge-only cable.
  2. open the DIY flasher in Chrome or Edge and pick the firmware for your board.
  3. select the board when prompted and wait for flashing to finish.

the flasher uses Web Serial, so it needs a desktop browser; Safari and Firefox do not support it. the web flasher docs cover self-hosting and rebuilding the images.

the ESP32-C5 images are USB-only: the apps do not offer them over-the-air updates, so update by flashing again from the same page. the ESP32-C5-DevKitC-1 image was built for issue #2, where a community member confirmed it flashes and scans; we do not have that board ourselves, so report problems in a new issue.

flashing from the command line

for firmware development, use PlatformIO:

cd firmware
pio run -e oui-spy -t upload
# or, for Mesh-Detect:
pio run -e mesh-detect -t upload

pio device monitor -b 115200

platformio.ini defines the shipping, capture, and bench environments. capture builds log nearby identifiers and raw payloads, so keep those logs private and reflash shipping firmware when you are done. odid-sim is a Remote ID simulator for bench use only.

beacon-c5 (Seeed XIAO ESP32-C5) and beacon-c5-devkitc (Espressif ESP32-C5-DevKitC-1, the 8 MB N8R4 or N8R8 kits; the 4 MB kits cannot hold the partition table) are the ESP32-C5 builds: a single radio shared between Bluetooth and 2.4 and 5 GHz Wi-Fi (see radio coverage). their images are on the DIY flasher but not in the app's firmware manifest, so updates are USB reflashes. on the DevKitC-1 either USB-C port flashes, and serial output is on the port marked UART. their platform deletes the framework versions the other builds need from the PlatformIO core folder it runs in, so a plain pio run skips them. build them in their own core folder, from firmware/: PLATFORMIO_CORE_DIR=~/.platformio-c5 pio run -e beacon-c5 -t upload (or -e beacon-c5-devkitc).

developer documentation

location contents
firmware/ shared detector engine, board entry points, tests, and release tools
ios/ and android/ native apps and system widgets
web/ the DIY browser flasher and its release manifests
docs/ app guide, radio coverage, signature evidence, protocol, mesh setup, and map performance checks

good places to start:

the companion nRF firmware and the beacon's hardware design files are not in this repository.

project status

the source tree is at 2.2.3 for the ESP32 firmware and both apps. published releases can trail the source, so check the app's firmware update screen and the store listings for what is actually available.

the detector, mesh path, apps, and update flows have all been tested on real hardware. field testing continues, especially for the capture candidates. the OTA protocol documents the update order.

2.0.7 was a one-time transition release that rotated the OTA signing key. from 2.0.8 on, the source tree signs with the production key only. a board that installed 2.0.7 needs nothing more. a board still on 2.0.6 or older only trusts the retiring key, so it cannot verify any update published since 2.0.8. the 2.0.7 transition image is no longer served over the air, so an in-app update fails on such a board at the signature check: update it once over USB from its board's flasher. the key-rotation guide has the details, and the steps for a future rotation.

license

the project's own application and ESP32 firmware code (the ESP32-S3 and ESP32-C5 builds) in this repository is licensed under Apache-2.0. bundled third-party components keep their own licenses; see CREDITS.md and their license files. keep the applicable LICENSE, NOTICE, and third-party notices with any distribution.

the companion nRF firmware, hardware design, PCB layout, enclosure, manufacturing files, product name, and trademarks are not covered by that license unless explicitly stated otherwise.

credits

  • the Colonel Panic OUI-Spy ecosystem, for compatible hardware and earlier work
  • OpenDroneID, for Remote ID decoding
  • DeFlock and the independent researchers cited in the signature reference

beacons is an independent project and is not affiliated with, endorsed by, or sponsored by Colonel Panic. "OUI-Spy" and "Mesh-Detect" are Colonel Panic's product names, used here only to identify compatible hardware.

Explore related projects