1- # Open Motorcycle Intercom (OMI)
1+ # OpenHelmet
2+
3+ <p align =" center " >
4+ <b>Open Source Mesh and Bluetooth Motorcycle Intercom</b>
5+ </p >
26
37OMI is an ** open‑source, motorcycle intercom system**
48designed to outperform current proprietary solutions
59in ** latency, scalability, transparency, and hackability** .
610
7- [ TOC]
8-
911## Key goals
1012- Open protocol and open firmware
1113- Real‑time full‑duplex voice
@@ -24,8 +26,9 @@ Interoperability is achieved **only through standard Bluetooth audio profiles**.
2426### Prerequisites
2527
2628- [ ESP-IDF v5.5+] ( https://docs.espressif.com/projects/esp-idf/en/v5.5/esp32s3/get-started/ )
27- - ESP32-S3-DevKitC-1-N8R8 (must have PSRAM)
28- - USB-C cable
29+ - [ KiCad] ( https://www.kicad.org/ )
30+ - ESP32-S3-DevKitC-1-N8R8
31+ - x4 USB-C cables
2932- [ Audio Hardware Wiring Guide] ( docs/wiring.md )
3033
3134### Build
@@ -35,15 +38,14 @@ Interoperability is achieved **only through standard Bluetooth audio profiles**.
3538source ~ /esp/esp-idf/export.sh
3639
3740# Build firmware
38- cd omi
3941idf.py build
4042```
4143
4244### Flash
4345
4446``` bash
4547# Find your serial port
46- ls /dev/ttyACM* /dev/ttyUSB* 2> /dev/null
48+ ls /dev/ttyACM* /dev/ttyUSB*
4749
4850# Flash firmware (replace PORT with your device)
4951idf.py -p /dev/ttyACM0 flash
@@ -81,10 +83,8 @@ I (xxx) audio: Audio task heartbeat: loops=0, encoded=0, decoded=0
8183
8284| Issue | Solution |
8385| -------| ----------|
84- | Permission denied on serial port | ` sudo usermod -a -G dialout $USER ` then log out/in |
8586| Device not found | Use a data cable (not charge-only), try different USB port |
8687| Garbage characters in monitor | Wrong baud rate, use 115200 |
87- | PSRAM not detected | Ensure you have the N8R8 variant board |
8888
8989---
9090
@@ -93,53 +93,43 @@ I (xxx) audio: Audio task heartbeat: loops=0, encoded=0, decoded=0
9393- Cardo/Sena mesh protocols are proprietary and closed
9494- True mesh interoperability with them is impossible today
9595- Voice communication requires ** deterministic latency** , not best‑effort networking
96- - 2.4 GHz spectrum is congested; protocol efficiency matters more than raw bandwidth
9796
98- As a result, OMI is designed around ** custom real‑time audio transport** ,
99- not existing consumer mesh standards.
97+ As a result, OpenHelmet is designed around ** custom real‑time audio transport** .
10098
10199---
102100
103- ## High‑ Level Architecture
101+ ## High Level Architecture and Roadmap
104102
105103### Phase 1 (Single‑MCU)
106- - ** ESP32‑S3**
107- - TDMA mesh protocol over ESP-NOW (2.4 GHz)
108- - Opus low‑bitrate voice
109- - Bluetooth Classic gateway
110-
111- ### Phase 2 (Dual‑MCU, Production‑Grade)
112- - ** Nordic nRF54** : ESB radio with custom PHY control
113- - ** ESP32‑S3** : Bluetooth Classic + audio mixing
114- - UART/SPI audio & control bridge between MCUs
115-
116- Phase 1 uses ESP-NOW as the transport layer for rapid prototyping.
117- "Custom mesh" refers to the TDMA scheduling and routing protocol built on top.
118- True low-level PHY control comes with nRF54's Enhanced ShockBurst in Phase 2.
119-
120- ---
104+ - [x] ** ESP32‑S3**
105+ - [x] TDMA mesh protocol over [ ESP-NOW] ( https://www.espressif.com/en/solutions/low-power-solutions/esp-now ) (2.4 GHz)
106+ - [x] Opus low‑bitrate voice
107+ - [x] Analog microphone via headphone jack
108+ - [x] Speaker output via headphone jack
109+ - [x] VOX for voice activation
121110
122- ## Audio Codec Choice: Opus (Low Bitrate)
111+ > Phase 1 uses ESP-NOW as the transport layer for rapid prototyping.
112+ > The firmware will always remain compatible with ESP-NOW when the nRF52 from Phase 2 is not found at startup.
123113
124- ### Why Opus
125- Opus is mandatory for this project.
126- No alternative matches its efficiency for real‑time voice.
114+ ### Phase 2 (Dual‑MCU, Production‑Grade)
115+ - [x] ** Nordic nRF52** : [ ESB] ( https://docs.nordicsemi.com/bundle/ncs-latest/page/nrf/protocols/esb/index.html ) radio with custom PHY control
116+ - [x] SPI audio & control bridge between MCUs
117+ - [x] Noise supression, echo cancellation
127118
128- | Codec | Typical Bitrate | Quality | Packet Loss Resilience |
129- | ------| ---------------| ---------| ------------------------|
130- | CVSD | ~ 64 kbps | Poor | Very poor |
131- | SBC | 48–64 kbps | Fair | Poor |
132- | ** Opus** | ** 8–16 kbps** | ** Good** | ** Excellent** |
119+ > The firmware will always remain compatible with ESP-NOW when the nRF52 from Phase 2 is not found at startup.
120+ > ESP-NOW is not interoperable with nRF52' ESB.
133121
134- ### Target Configuration
135- - Mode: VoIP
136- - Sample rate: 16 kHz
137- - Channels: Mono
138- - Bitrate: 8–16 kbps
139- - Frame size: 20 ms
140- - FEC: Enabled
122+ ### Phase 3 (Triple-MCU, Consumer-Ready)
123+ - [ ] ** FSC-BT1026D** (Qualcom QCC3034) BT5.1 audio SoC
124+ - [ ] Phone interop via HFP profile
125+ - [ ] Audio mixing for legacy intercom bridging
141126
142- This balances clarity, wind tolerance, latency, and bandwidth.
127+ ### Phase 4 (Custom PCB)
128+ - [ ] Custom PCB design with integrated audio codec and power management
129+ - [ ] Battery power with charging circuit
130+ - [ ] Enclosure design
131+ - [ ] Open‑source manufacturing files
132+ - [ ] Testing on real motorcycle rides
143133
144134---
145135
@@ -186,249 +176,3 @@ Used for:
186176- Joining/leaving the group
187177- Topology updates
188178- Slot renegotiation
189-
190- ---
191-
192- ## 7. Nordic ESB (Enhanced ShockBurst)
193-
194- ### What It Is
195- Nordic ESB is a ** lightweight proprietary 2.4 GHz packet radio protocol**
196- with minimal overhead and very low latency.
197-
198- ### Why It Matters
199- - Sub‑millisecond packet latency
200- - Small stack footprint
201- - Predictable timing
202- - Excellent power efficiency
203-
204- ### Tradeoffs
205- - Nordic‑only
206- - Requires implementing:
207- - Addressing
208- - Routing
209- - Security
210-
211- For OMI, these are acceptable and desirable tradeoffs.
212-
213- ---
214-
215- ## Hardware Choices Explained
216-
217- ### ESP32‑S3 (Phase 1 Backbone)
218-
219- ** Why it is used initially:**
220- - Bluetooth Classic (HFP/A2DP) support
221- - Sufficient DSP for Opus
222- - Large community and low cost
223- - Easy prototyping
224-
225- ** Limitations:**
226- - Higher power consumption
227- - Bluetooth stack complexity
228- - Less deterministic radio control
229-
230- ** Typical Power Use:**
231- - Bluetooth audio active: ~ 60–90 mA
232- - Average system: ~ 120–150 mW
233-
234- ** Battery Life Estimate:**
235- - 1000 mAh @ 3.7 V ≈ 3.7 Wh
236- - ~ 24 hours mixed use achievable
237-
238- ---
239-
240- ### Nordic nRF52 (Reference / Legacy)
241-
242- - Excellent low‑power radio
243- - Mature SDK
244- - Limited RAM for Opus + mesh
245- - Bluetooth Classic mostly unavailable
246-
247- Good for experimentation, not ideal for full system.
248-
249- ---
250-
251- ### Nordic nRF54 (Target Mesh MCU)
252-
253- ** Why nRF54:**
254- - Much more RAM and CPU
255- - Designed for real‑time wireless
256- - Extremely low power consumption
257- - Ideal for ESB‑based mesh
258-
259- ** Why not yet:**
260- - New platform
261- - Higher cost
262- - Smaller ecosystem (for now)
263-
264- ---
265-
266- ## Dual‑MCU Architecture (Final Target)
267-
268- ### Responsibilities Split
269-
270- ** nRF54**
271- - ESB mesh
272- - TDMA scheduling
273- - Routing
274- - Ultra‑low power operation
275-
276- ** ESP32‑S3**
277- - Bluetooth Classic interop
278- - Audio mixing
279- - User interface
280-
281- This keeps Bluetooth complexity isolated and preserves battery life.
282-
283- ---
284-
285- ## Interoperability Strategy
286-
287- OMI ** does not join proprietary meshes** .
288-
289- Instead:
290- - Acts as Bluetooth headset or phone
291- - Uses HFP profile
292- - Bridges one legacy intercom into the open mesh
293-
294- This is the only realistic interoperability model.
295-
296- ---
297-
298- ## Power & Battery Targets
299-
300- ### Design Targets
301- - Active riding: 8–16 hours
302- - Standby: multiple days
303-
304- ### Battery
305- - Li‑Po 1000–1500 mAh
306- - USB‑C charging
307-
308- ### Average Power Budget
309- - Target: <150 mW
310- - Mesh duty cycling
311- - VOX‑based audio gating
312-
313- ---
314-
315- ## Scalability Model
316-
317- - 2–4 riders: full mesh
318- - 5–8 riders: TDMA with relays
319- - 8–10 riders: diminishing returns
320-
321- Linear motorcycle formations are explicitly exploited.
322-
323- ---
324-
325- ## Hardware BOM (Development)
326-
327- ### Recommended Dev Board
328-
329- ** ESP32-S3-DevKitC-1-N8R8**
330-
331- | Spec | Value |
332- | ------| -------|
333- | MCU | ESP32-S3 (dual-core Xtensa LX7 @ 240 MHz) |
334- | Flash | 8 MB |
335- | PSRAM | 8 MB (required for Opus + mesh buffers) |
336- | Bluetooth | Classic + BLE 5.0 |
337- | WiFi | 802.11 b/g/n (ESP-NOW capable) |
338-
339- ** Important:** Get the N8R8 variant (with PSRAM). Boards without PSRAM will not have enough RAM.
340-
341- ### Audio Components (Phase 1)
342-
343- | Component | Part Number | Purpose | Qty |
344- | -----------| -------------| ---------| -----|
345- | I2S Microphone | INMP441 | Audio capture | 1 |
346- | I2S Amplifier | MAX98357A | Speaker output | 1 |
347- | Speaker | 4 ohm / 3W | Audio playback | 1 |
348-
349- ### Minimum Development Kit
350-
351- | Item | Est. Cost |
352- | ------| -----------|
353- | ESP32-S3-DevKitC-1-N8R8 | $12 |
354- | INMP441 breakout | $4 |
355- | MAX98357A breakout | $4 |
356- | Small speaker | $2 |
357- | Breadboard + jumpers | $5 |
358- | ** Total** | ** ~ $27** |
359-
360- ### Multi-Node Testing (Phase 2+)
361-
362- For mesh development, obtain ** 2–3 identical setups** .
363-
364- ### Boards to Avoid
365-
366- | Board | Reason |
367- | -------| --------|
368- | ESP32-S3 without PSRAM | Insufficient RAM |
369- | ESP32 (original) | Less RAM, no native USB debug |
370- | ESP32-C3 | Single core, no Bluetooth Classic |
371- | ESP32-S2 | No Bluetooth |
372-
373- ### Future Hardware (Phase 4+)
374-
375- | Component | Purpose |
376- | -----------| ---------|
377- | nRF54 DK | ESB mesh radio MCU |
378- | Custom PCB | Production prototype |
379- | Li-Po 1000–1500 mAh | Battery |
380- | TP4056 or BQ24072 | USB-C charging IC |
381-
382- ---
383-
384- ## Project Roadmap
385-
386- ### Phase 0 – Research & Validation
387- - Opus benchmarks on ESP32‑S3
388- - Latency measurements
389- - Power profiling
390-
391- ### Phase 1 – MVP (Single MCU)
392- - ESP32‑S3 firmware
393- - Opus voice
394- - Simple TDMA mesh
395- - Push‑to‑talk
396-
397- ### Phase 2 – Mesh Hardening
398- - Dynamic slot allocation
399- - Packet loss recovery
400- - Group management
401-
402- ### Phase 3 – Bluetooth Gateway
403- - HFP implementation
404- - Audio mixing
405- - Legacy intercom bridge
406-
407- ### Phase 4 – Dual‑MCU Prototype
408- - nRF54 mesh firmware
409- - ESP32 bridge firmware
410- - SPI/UART protocol
411-
412- ### Phase 5 – Hardware Refinement
413- - Custom PCB
414- - Power optimization
415- - RF tuning
416-
417- ---
418-
419- ## Guiding Principles
420-
421- - Determinism over throughput
422- - Simplicity over standards
423- - Open over proprietary
424- - Physics always wins
425-
426- ---
427-
428- ## Status
429-
430- This README defines the ** technical north star** of the project.
431- Implementation details will evolve,
432- but the architectural decisions documented here
433- are intentional and grounded in real‑world constraints.
434-
0 commit comments