← Projects
raspberry-pi intermediate 10 hr ago ◯ 6 min read

Build a Raspberry Pi and ESP32 Shop Intercom and Paging System over PoE

Build time: 1-2 weekends for base station plus 2-3 hours per additional satellite station
Tools needed: Soldering iron, wire strippers, RJ45 crimping tool, drill for enclosure mounting and cable glands, computer for flashing ESP32 firmware and configuring Asterisk
Parts List
raspberry piesp32intercompagingpoeasterisksipshop automation

Shouting between a detached garage shop and the house, or between a CNC room and a finishing area two walls away, gets old fast, and a phone text ("come look at this") is slower than it should be for something as simple as "the print's done" or "I need a hand lifting this." This project builds a wired-reliability intercom and paging system using a Raspberry Pi as the base station and cheap ESP32-based satellite speaker/microphone nodes, all running over Power over Ethernet so you're not hunting for wall outlets at every mounting location. It's SIP-based under the hood, meaning the Pi runs a small voice-over-IP server and the ESP32 nodes act as very simple SIP endpoints, which gets you two-way talk, one-touch paging to all stations at once, and the kind of reliability a WiFi-dependent consumer intercom usually can't match in a shop full of RF-noisy machinery.

Why Wired Audio Over Ethernet Instead of WiFi

A shop environment is rough on wireless audio: VFDs, stepper drivers, and router/laser power supplies all generate electrical noise that WiFi-based consumer intercoms handle poorly, usually as dropouts or garbled audio exactly when you're mid-sentence. PoE solves the "where's the nearest outlet" problem that keeps people from wiring stations where they'd actually be useful, and Ethernet's wired reliability means a paging announcement doesn't compete with your WiFi network's congestion or drop out when a machine kicks on nearby. If you've already run Ethernet to your shop for a NAS, cameras, or network infrastructure (several of this site's other Pi networking projects assume exactly that), this project reuses that same cabling rather than asking for new runs.

Architecture

The Raspberry Pi runs Asterisk, a full-featured open-source PBX, configured with a small number of SIP extensions — one per satellite station, plus an "all-page" extension that rings every station simultaneously for shop-wide announcements. Each satellite is an ESP32 with a small I2S speaker amplifier (MAX98357A) and an I2S microphone (INMP441), running firmware that registers to the Asterisk server as a basic SIP client and handles the RTP audio stream directly. A PoE splitter at each satellite location provides both power and network from a single Ethernet run, so each station needs exactly one cable pulled to it. Pressing a station's button either rings a specific other station (private point-to-point intercom call) or triggers the all-page extension, which auto-answers on every other satellite and opens its speaker — the way an overhead paging system works in a commercial building, scaled down to shop size.

Parts List

Setting Up the Base Station

Install Asterisk on Raspberry Pi OS Lite (a headless, minimal image is all this needs) via your package manager or by building from source if you want the latest release. Configure a SIP extension per satellite in pjsip.conf or sip.conf depending on your Asterisk version, each with a simple numeric extension and a shared secret for authentication — this is a trusted local network, so lengthy security hardening is less critical than it would be for an internet-facing PBX, but don't skip authentication entirely or leave default credentials in place. Build a dialplan in extensions.conf with a context that rings a single target extension for point-to-point calls and a second context that originates calls to every registered extension simultaneously for the all-page function, auto-answering on the far end using the SIP Alert-Info header or Asterisk's Set(__ANSWER_DELAY=0) approach so a page doesn't require the receiving station to physically pick up.

Building a Satellite Station

Wire the INMP441 and MAX98357A to the ESP32's I2S-capable pins, following this site's existing ESP32 I2S audio wiring guide for the pin assignments and power considerations. The firmware side is the real work: you need a lightweight SIP client stack running on the ESP32 that registers to the Asterisk server, accepts incoming calls (auto-answering for page events), and streams I2S microphone input out as RTP audio while playing incoming RTP audio out through the I2S amplifier. A minimal G.711 codec implementation is the most practical choice for this — the ESP32 has enough headroom to encode/decode G.711 in real time, and it avoids the complexity and licensing questions of better-but-heavier codecs. Wire the push button to a GPIO pin with a basic debounce routine, and map a short press to call the "everyone else" extension and a longer press (or a second button, if you want distinct private-call targets) to call a single other specific station directly.

Mounting and Weatherproofing

Any satellite mounted in a garage, detached shop, or near a dust-producing machine like a CNC router or sander should go in a sealed enclosure with the speaker and microphone behind a fine mesh or felt dust screen — exposed I2S breakout boards and bare speaker cones do not tolerate wood or MDF dust well over time, and a satellite that fails from dust ingress after six months defeats the whole point of building something more reliable than a consumer intercom. Route the Ethernet cable into the enclosure through a proper cable gland rather than a cut slot, and leave drip-loop slack in the cable run outside the box so condensation or incidental moisture on the cable doesn't track straight into the enclosure.

Testing and Expanding

Bring up one satellite first and confirm two-way audio with a SIP softphone app on your phone (registered as a temporary extra extension) before building out additional stations — debugging audio codec or I2S wiring issues is much faster with one known-working endpoint to compare against than with three simultaneously nonfunctional ones. Once the system is stable, extensions and additional satellites are cheap to add: each new station is just another ESP32, another PoE drop, and one more line in the Asterisk dialplan, so there's no reason to feel locked into whatever station count you start with.