# Blue Heron: Bluetooth Low Energy (BLE) for Elixir & Nerves with Connor Rigby Page: https://stenobird.com/podcast/elixir-wizards/blue-heron-bluetooth-low-energy-ble-for-elixir-nerves-with-connor-rigby Text version: https://stenobird.com/podcast/elixir-wizards/blue-heron-bluetooth-low-energy-ble-for-elixir-nerves-with-connor-rigby.md Podcast: [Elixir Wizards](https://stenobird.com/podcast/elixir-wizards) Published: 2025-06-05T10:30:00+00:00 Episode link: https://smartlogic.fireside.fm/s14-e02-blue-heron-bluetooth-elixir-nerves Audio file: https://aphid.fireside.fm/d/1437767933/03a50f66-dc5e-4da4-ab6e-31895b6d4c9e/aa979def-5968-427f-aca6-b048de31ddf3.mp3 Processing state: processed JSON: https://stenobird.com/v1/public/podcasts/elixir-wizards/episodes/blue-heron-bluetooth-low-energy-ble-for-elixir-nerves-with-connor-rigby Duration seconds: 2776 ## Resource Connor Rigby joins the Elixir Wizards to talk about Blue Heron BLE (Bluetooth Low Energy) support for Elixir apps. Blue Heron implements the BLE specs in pure Elixir, leveraging binary pattern matching and concurrent message processing to handle Bluetooth protocols. Unlike most solutions that require C ports or NIFs, Blue Heron runs entirely in user space, so it works seamlessly in both Nerves-based embedded projects and (eventually) desktop Elixir applications. We discuss how Nerves development differs from building Phoenix apps. Connor shares challenges he's experienced with hardware compatibility, where some chips only partially implement the spec, and he discusses the surprisingly deep (but sometimes incomplete) world of BLE device profiles. His tip for anyone entering the BLE space: read the official spec instead of trusting secondhand blog posts. Tools like Nerves LiveBook give you hands-on examples, so you can get a BLE prototype running on a Raspberry Pi and your phone in no time. Key topics discussed in this episode: Blue Heron origins and “bird” naming convention BLE vs. Bluetooth Classic: core differences Pure Elixir implementation—no C dependencies Binary pattern matching for packet parsing Hardware transport options: UART, SPI, USB, SDIO GenServer patterns in Nerves vs. Phoenix Linux requirement and power-consumption trade-offs GATT (Generic Attribute Table) implementation patterns SQLite integration for Nerves apps Hardware chip quirks and spec compliance Manufacturer-specific commands and workarounds BLE device profiles and spec gaps Security Management Profile (SMP) for encryption Device connection and pairing workflows Web vs. embedded development differences Where to get started: hardware recommendations and docs Links mentioned: https://github.com/Co… ## Actions - request_transcript: `POST https://stenobird.com/v1/public/podcasts/elixir-wizards/episodes/blue-heron-bluetooth-low-energy-ble-for-elixir-nerves-with-connor-rigby/transcription-requests` — Idempotently request low-priority transcript generation for this episode. - read_markdown: `GET https://stenobird.com/podcast/elixir-wizards/blue-heron-bluetooth-low-energy-ble-for-elixir-nerves-with-connor-rigby.md` — Read the agent-friendly Markdown representation of this episode resource. A page view does not enqueue transcription. Agents should invoke `request_transcript` explicitly when they need this episode processed. ## Transcript Full transcripts are not published on public pages unless there is a clear rights basis.