← Wewe

Build a hardware Monitor

The Monitor side of Wewe doesn't have to be a spare phone. It's also an ESPHome component — flash a cheap ESP32 board with a microphone and it pairs with the app exactly the same way a phone Monitor does.

What you need

No display, no buttons beyond what you wire up yourself, no case design decisions made for you. This is the bare component — see firmware/core2-spike in the repo for a worked example that adds a screen and touch controls on an M5Stack Core2, if you want something more finished.

Set it up

  1. Create a secrets file alongside your config (secrets.yaml) with your WiFi credentials:
    wifi_ssid: "your-network"
    wifi_password: "your-password"
  2. Write the config. This is the smallest thing that produces a working Monitor — a bare board, no screen, pairing via the devkit's onboard BOOT button:
    esphome:
      name: my-monitor
    
    esp32:
      board: esp32dev
      framework:
        type: esp-idf
    
    external_components:
      - source:
          type: git
          url: https://github.com/grantstephens/wewe
          path: firmware/wewe_monitor
    
    wewe_monitor:
      id: monitor
      signal_url: "wss://wewe-api.hub13.xyz"
      clk_pin: GPIO32
      din_pin: GPIO33
    
    binary_sensor:
      - platform: gpio
        name: "Pair button"
        pin:
          number: GPIO0
          mode:
            input: true
            pullup: true
          inverted: true
        on_press:
          - lambda: id(monitor).on_pair_tapped();
    
    wifi:
      ssid: !secret wifi_ssid
      password: !secret wifi_password
    
    network:
      enable_ipv6: true
    
    logger:

    clk_pin/din_pin are whichever two GPIOs your mic breakout is wired to — swap them for your actual wiring. signal_url can stay pointed at the default relay above, or your own self-hosted one (see the app's privacy policy for why that's an option at all).

  3. Flash it, connected over USB:
    esphome run my-monitor.yaml
    Pick the serial port when prompted. The device reboots onto WiFi once it's done.
  4. Pair it with the app. Press and hold the board's BOOT button — that arms a six-digit pairing code, the same way the Monitor screen in the app shows one. Since this board has no display, read the code from the ESPHome logs instead (esphome logs my-monitor.yaml — look for a line like Invite code: 482917). Enter that code in the app's "Add Monitor" flow, same as pairing two phones.

Config reference

KeyRequiredDefault
signal_urlyes—
clk_pinyes—
din_pinyes—
max_listenersno3
ice_serversnoGoogle's public STUN pair

Full details, including why those two FreeRTOS task-stack sizes in the component aren't arbitrary, are in the component's own README.

Once it's paired

From here it behaves exactly like a phone Monitor: a local noise gate only sends audio when it actually hears something, the Parent app alerts on a detected cry, and push-to-talk works the same way. Nothing about pairing, alerting, or the signaling relay cares which kind of Monitor it's talking to.