MaBell Project Plan v1: On the Bench #
Plan: MaBell Bluetooth Gateway: Project Plan Β· Previous: v0: Foundation Β· Next: v2: A low-voltage phone
✓ 0 |
↻ 0 |
⏳ 24
(24 total)
Legend: β Complete | π In Progress | β³ Planned
The gateway works on the bench with stand-ins: a Bluetooth call runs end to end through a speaker and microphone, dialed with a bare rotary dial or DTMF from a phone app, and rung with an LED and an electronic ring. Status: current, the MVP.
Done when:
- Each functional section works on the bench with stand-ins: call tones, ringing, hook, rotary detection, DTMF detection, call audio and indicators.
- The firmware detects rotary pulses and DTMF digits, and dials the collected number over HFP.
- Dial tone and the call-progress tones are measured against the North American frequencies and cadences, and sound authentic by ear.
- A full call works: dial out (rotary and DTMF), ring in and answer, talk, hang up.
- The bench build is written up: a build guide in the gateway repository, and the tone results in the project’s design docs.
Not in v1: a real phone (v2), line voltage or a real bell (v3), the circuit board (v4).
Bench Setup β³ #
Sub-Assembly A from the prototyping build guide, with a speaker, microphone, LEDs, buttons and a bare rotary dial as stand-ins for the phone.
- β³ Order the parts: Sub-A, speaker amplifier and speaker, electret microphone, LEDs, buttons, a bare rotary dial
- β³ Build Sub-A (ESP32 + PCM5100 DAC + PCM1808 ADC on I2S) and pass its test points
- β³ Wire the speaker to the DAC and the microphone to the ADC
- β³ Resolve the GPIO 21 clash in the firmware’s pin map (I2C SDA and an AEC line)
Call Tones β³ #
- β³ Dial tone plays on the speaker when the hook stand-in goes off-hook
- β³ Each call-progress tone measured (frequencies, cadence) against the North American values
- β³ Each tone judged authentic by ear
Ringing β³ #
- β³ An incoming Bluetooth call flashes the ring LED and plays an electronic ring on the speaker, 2s on / 4s off
- β³ Going off-hook during ringing stops the ring and answers the call
Hook Detection β³ #
- β³ A toggle switch on GPIO 32 stands in for the hook switch, debounced in firmware
- β³ Hook state shows in the web interface and the event log
Rotary Dial Detection β³ #
- β³ Firmware pulse decoder: counts loop breaks, splits digits on the inter-digit gap, debounces
- β³ A bare rotary dial on GPIO 34 decodes every digit, 1 through 0
Touch-Tone (DTMF) Detection β³ #
- β³ Firmware Goertzel DTMF detector on the ADC audio
- β³ DTMF from a phone app into the microphone decodes 0β9, * and #
Dialing to a Call β³ #
- β³ End-of-dialing timeout, then the collected number is dialed over HFP
- β³ Ringback plays until the far end answers, then the call connects
- β³ Digits dialed during a call are passed to the cell phone (
esp_hf_client_send_dtmf)
Call Audio β³ #
- β³ Two-way Bluetooth call audio through the speaker and microphone
Indicators β³ #
- β³ Dial lamp LED (GPIO 27), status LED (GPIO 2), UI LED (GPIO 18)
- β³ User button (GPIO 4) triggers its action
Documentation & Release β³ #
- β³ Bench build guide in the gateway repository’s notebook (
notebook/build-guides/), drawing on Sub-A, the speaker-and-microphone option and the stand-in modules in the low-voltage guide - β³ Tone results in the project’s design docs
- β³ Firmware versioning set up, and the firmware tagged when v1 closes