Skip to content

Commit b22089a

Browse files
committed
docs: Update information
1 parent 7897ce7 commit b22089a

1 file changed

Lines changed: 35 additions & 291 deletions

File tree

README.md

Lines changed: 35 additions & 291 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
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

37
OMI is an **open‑source, motorcycle intercom system**
48
designed to outperform current proprietary solutions
59
in **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**.
3538
source ~/esp/esp-idf/export.sh
3639

3740
# Build firmware
38-
cd omi
3941
idf.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)
4951
idf.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-
## HighLevel 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

Comments
 (0)