Difference between revisions of "PineVoice"

From PINE64
Jump to navigation Jump to search
(Update PineVoice documentation)
 
Line 1: Line 1:
[[File:PineVoice-2.jpg|thumb|right|The PineVoice]]
[[File:PineVoice-2.jpg|thumb|right|The PineVoice]]
The '''PineVoice''' is a compact RISC-V based smart speaker based on the Bouffalo Lab BL606P RISC-V SoC. It is designed as a local voice assistant satellite, with Wi-Fi, Bluetooth, a speaker, a dual microphone array, buttons, and a center ring LED.
The factory firmware is open-source and provides Wi-Fi provisioning over Improv, local wake word detection, and voice assistant connectivity through the Wyoming protocol, making PineVoice compatible with assistance platforms such as Home Assistant.
== Specifications ==
=== SoC and memory ===
[[File:RISC-V.png|thumb|right|Powered by RISC-V]]
[[File:RISC-V.png|thumb|right|Powered by RISC-V]]
[[File:BL606P_Block_Diagram.png|500px|thumb|right|BL606P block diagram]]
PineVoice is based on the [https://bouffalolab.com/product/?type=detail&id=16 Bouffalo Lab BL606P].
==== CPU architecture ====
T-Head C906 480 MHz 64-bit RISC-V CPU:
* Supports RISC-V RV64IMAFCV instruction architecture
* Five-stage single-issue sequentially executed pipeline
* Level-1 instruction and data cache of Harvard architecture, with a size of 32 KiB and a cache line of 64 bytes
* Sv39 memory management unit
* Supports AXI 4.0 128-bit master interface
* Supports core local interrupt (CLINT) and platform-level interrupt controller (PLIC)
* Compatible with RISC-V PMP
T-Head E907 320 MHz 32-bit RISC-V CPU:


The '''PineVoice''' is a RISC-V based smart speaker based on the Bouffalo Lab BL606P RISC-V SoC with C906 64-bit and E907 32-bit CPU cores supported by 16 MB of embedded PSRAM memory, and with built-in WiFi, Bluetooh and Zigbee radio interfaces.  
* Supports RISC-V RV32IMAFCP instruction set
* Supports RISC-V 32-bit and 16-bit mixed instruction set
* Supports RISC-V machine mode and user mode
* Integer and floating-point pipelines
* Supports AXI 4.0 main device interface and AHB 5.0 peripheral interface
* 32 KiB instruction cache
* 16 KiB data cache


== Software Releases ==
T-Head E902 150 MHz 32-bit RISC-V CPU.


=== Quick Links to the Source of OS Images Build ===
==== Memory and storage ====


There is a community effort to bring updated kernels, peripherals and buildroot - Lots of communication happening in the #ox64-nutcracker channel.
* 32 MiB pSRAM
* 788 KiB SRAM
* 16 MiB flash storage


* [https://github.com/openbouffalo/buildroot_bouffalo buildroot] bringing all the work below together with a bootable kernel and updated filesystem images for SD cards
=== Hardware features ===
* [https://github.com/openbouffalo/OBLFR OpenBouffalo Firmware] low_load drivers by Fishwaldo and others


==== Wireless ====


* Wi-Fi 802.11 b/g/n
* Bluetooth 5.2 Dual-mode (BT+BLE)


Toolchain:
==== Audio ====


* elf_newlib_toolchain/bin/riscv64-unknown-elf-gcc (Xuantie-900 elf newlib gcc Toolchain V2.2.5 B-20220323) 10.2.0
* Built-in speaker tuned for voice applications
* linux_toolchain/bin/riscv64-unknown-linux-gnu-gcc (Xuantie-900 linux-5.10.4 glibc gcc Toolchain V2.2.4 B-20211227) 10.2.0
* Dual microphone array
* cmake version 3.19.3


=== Software Development Kits ===
==== Controls and indicators ====
* [https://github.com/bouffalolab/bl_mcu_sdk BL808 MCU SDK]
* [https://dev.bouffalolab.com/download BLDevCube Flashing Tool for Windows, macOS and Ubuntu x64]
* [https://wiki.pine64.org/wiki/File:Ox64_BL808UART_connect.pdf Ox64 UART Flashing Guide], see the [https://gist.github.com/lupyuen/7a0c697b89abccda8e38b33dfe5ebaff notes]


[[File:Pinevoice-top-view-labels.png|600px|thumb|PineVoice buttons view]]


== SoC and Memory Specification ==
* Button controls
* Center LED ring and button
* Hardware mute button


[[File:Bouffalo_Lab_icon.png|right]]
==== Power and connectivity ====


Based on the [https://en.bouffalolab.com/product/ Bouffalo Lab BL606P]
* USB-C power input and data channel
* Debug UART exposed on unused USB-C pins


[[File:BL606P_Block_Diagram.png|500px]]
==== Package contents ====


=== CPU Architecture ===
* USB-A to USB-C power cable


[[File:T-Head.png|right|200px]]
== Software ==


T-Head C906 480 MHz 64-bit RISC-V CPU:
The factory PineVoice firmware turns PineVoice into a voice assistant satellite. Firmware uses Alibaba's AliOS, specifically the YoC/YoCop variation.
 
=== Supported features ===
 
The current factory firmware supports:
 
* Wi-Fi provisioning using the [https://www.improv-wifi.com/ Improv] protocol over Bluetooth Low Energy
* Wyoming satellite for compatible assistance applications
* Wyoming mDNS auto-discovery for compatible assistance applications
* Local wake word detection using [https://github.com/OHF-Voice/micro-wake-word MicroWakeWord]
 
=== Source code ===
 
The PineVoice SmartSpeaker SDK source code is available on [https://codeberg.org/pine64/pinevoice_smartspeaker_sdk Codeberg] and [https://github.com/pine64/pinevoice_smartspeaker_sdk GitHub].
 
== Wi-Fi setup ==
 
PineVoice implements the open-source [https://www.improv-wifi.com/ Improv] Wi-Fi provisioning protocol. Any application supporting this protocol can set up Wi-Fi on PineVoice.
 
=== Entering provisioning mode ===
 
On first boot, PineVoice automatically enters Wi-Fi provisioning mode. While in this mode, the ring LED blinks yellow.
 
If the ring LED is not blinking yellow, the speaker is not in provisioning mode. Hold the dot button for 15 seconds to reset Wi-Fi setup and return PineVoice to provisioning mode. After releasing the button, PineVoice should restart and launch provisioning mode.
 
=== Provisioning through the web ===
 
Web provisioning requires a browser with Web Bluetooth API support. See the [https://caniuse.com/web-bluetooth Web Bluetooth support table] for browser compatibility.
 
Open the PineVoice documentation website on a PC or phone with Bluetooth 4.0 Low Energy support and use the Improv provisioning button there. If that button does not work, try provisioning from the [https://www.improv-wifi.com/ Improv website].
 
=== Provisioning through Home Assistant ===
 
Home Assistant supports [https://www.home-assistant.io/integrations/improv_ble/ Improv via BLE]. This feature must be configured in Home Assistant and requires working Bluetooth support. See the [https://www.home-assistant.io/integrations/bluetooth Home Assistant Bluetooth documentation] for details.
 
[[File:Improv-card.png|400px|thumb|Improv card in Home Assistant]]
 
After successful Wi-Fi provisioning, continue with assistance setup.
 
== Assistance setup ==
 
PineVoice implements the open-source [https://github.com/OHF-Voice/wyoming Wyoming] protocol for voice assistants. Any assistance application supporting this protocol can communicate with PineVoice.
 
After PineVoice has joined the Wi-Fi network, the center ring LED should slowly breathe in a dim magenta color. This means PineVoice is connected to Wi-Fi and is waiting for an assistance application to connect through the Wyoming protocol.
 
=== Adding PineVoice to Home Assistant ===
 
Home Assistant supports Wyoming Protocol devices through the [https://www.home-assistant.io/integrations/wyoming/ Wyoming Protocol integration]. Home Assistant must also have a working Assist voice pipeline. Follow the [https://www.home-assistant.io/voice_control/ Home Assistant Assist documentation] if Assist has not been configured yet.
 
==== Automatic setup ====
 
PineVoice supports mDNS auto-discovery. If Home Assistant can see mDNS announcements on the same network, PineVoice should appear automatically as a discovered Wyoming Protocol device.
 
# Open Home Assistant.
# Go to '''Settings''' -> '''Devices & services'''.
# Look for a discovered '''Wyoming Protocol''' device.
# Select '''Configure'''.
# Follow the on-screen instructions to finish adding PineVoice.
 
After setup completes, PineVoice should be available as an Assist satellite in Home Assistant.
 
==== Manual setup ====
 
If PineVoice does not appear automatically, add it manually through the Wyoming Protocol integration.
 
# Find the IP address of PineVoice in the client list of your Wi-Fi router or access point.
# Open Home Assistant.
# Go to '''Settings''' -> '''Devices & services'''.
# Select '''Add integration'''.
# Search for and select '''Wyoming Protocol'''.
# Enter the PineVoice IP address as the host.
# Enter <code>10700</code> as the port.
# Follow the on-screen instructions to finish adding PineVoice.
 
==== Troubleshooting ====
 
Known issues currently being investigated:
 
* If PineVoice is stuck in the listening state or Home Assistant does not react when Assist starts, restart PineVoice.
* If adding the device fails, press Retry / Try Again, or try to add PineVoice again.
 
If Home Assistant cannot connect to PineVoice, check the following:
 
* PineVoice and Home Assistant are on the same network or VLAN.
* The center ring LED is breathing in dim magenta.
* The IP address entered in Home Assistant is the current IP address of PineVoice.
* TCP port <code>10700</code> is reachable from the Home Assistant system.
* mDNS is allowed on the network if using automatic discovery.
 
For more information, see the Home Assistant [https://www.home-assistant.io/integrations/wyoming/ Wyoming Protocol integration] documentation.


* Supports RISC-V RV64IMAFCV instruction architecture
=== Testing ===
* Five-stage single-issue sequentially executed pipeline
* Level-1 instruction and data cache of Harvard architecture, with a size of 32 KB and a cache line of 64B
* Sv39 memory management unit, realizing the conversion of virtual and real addresses and memory management
* jTLB that supports 128 entries
* Supports AXI 4.0 128-bit master interface
* Supports core local interrupt (CLINT) and platform-level interrupt controller (PLIC)
* With 80 external interrupt sources, 3 bits for configuring interrupt priority
* Supports BHT (8K) and BTB
* Compatible with RISC-V PMP, 8 configurable areas
* Supports hardware performance monitor (HPM) units
* See [https://www.t-head.cn/product/c906?lang=en here]


T-Head E907 320 MHz 32-bit RISC-V CPU:
After PineVoice is added to an assistance application, Assist can be triggered in the following ways:


* Supports RISC-V RV32IMAFCP instruction set
* Say the wake word: "Hey Jarvis"
* Supports RISC-V 32-bit/16-bit mixed instruction set
* Press the center button in the LED ring
* Supports RISC-V machine mode and user mode
* Thirty-two 32-bit integer general purpose registers (GPR) and thirty-two 32-bit/64-bit floating-point GPRs
* Integer (5-stage)/floating-point (7-stage), single-issue, sequentially executed pipeline
* Supports AXI 4.0 main device interface and AHB 5.0 peripheral interface
* 32K instruction cache, two-way set associative structure
* 16K data cache, two-way set associative structure
* See [https://www.t-head.cn/product/e907?lang=en here]


After triggering Assist, say a command supported by the assistance application. The assistance application should reply accordingly.


== LED ring lightshows and controls ==


=== System Memory ===
The center LED ring shows the current state of PineVoice. For most actions and states, light shows are used instead of voice feedback so PineVoice does not unexpectedly disturb the user, for example during the night. Active-state light shows, such as the dim cyan standby light, are intentionally kept dim so they remain visible without being distracting in a dark room.
* Embedded 16MB PSRAM


== Smart Speaker Module Features ==
=== Startup and setup ===


=== Network ===
{| class="wikitable"
* 2.4 GHz 1T1R WiFi 802.11 b/g/n
! Light show
* Bluetooth 5.x Dual-mode (BT+BLE)
! Meaning
* Zigbee
|-
| Dim white fade-in/fade-out, once
| Boot-up lightshow. PineVoice has started.
|-
| Yellow breath, loop
| PineVoice is in provisioning mode and is ready to connect to Wi-Fi through the Improv protocol.
|-
| Green fade-in/fade-out, once
| Identification signal during provisioning, used to identify the paired PineVoice.
|-
| Dim orange breath, loop
| PineVoice is trying to connect to Wi-Fi.
|-
| Dim magenta breath, loop
| PineVoice is waiting for a Wyoming client to connect.
|}


=== Action feedback ===


=== Storage ===
{| class="wikitable"
* On-board 128 Mbit (16 MB) XSPI NOR flash memory
! Light show
! Meaning
|-
| White fade-in, once
| Volume up.
|-
| White fade-out, once
| Volume down.
|-
| Red fade-out, once
| An error happened or the action failed.
|}


=== Expansion Ports ===
=== Button controls ===
* USB 2.0 OTG port


[[File:Pinevoice-top-view.png|400px|thumb|PineVoice buttons view]]


=== Audio ===
PineVoice has five top buttons for voice control, volume, microphone mute, and provisioning.
* Microphone
* Speaker


== Board Information, Schematics and Certifications ==
* '''Center LED ring button''' - starts a voice command session.
* '''+ button''' - increases the volume.
* '''- button''' - decreases the volume.
* '''Microphone button''' - hardware microphone mute. The button shines red while microphone mute is active.
* '''Dot / user button''' - currently used to enter provisioning mode. Hold it for 15 seconds to reset Wi-Fi setup and return PineVoice to provisioning mode.


== Voice feedback and wake word detection ==


* Module dimensions: 65 mm x 65 mm x 66 mm
PineVoice mostly uses light shows instead of voice feedback. Voice feedback is generally reserved for direct user interaction.
* Input power: 5 V, 2 A USB-C ports


Production version schematic:
Audio feedback is currently used in the following cases:


* [https://files.pine64.org/doc/PineVoice/PineVoice%20Main%20Board%20Schematics-20260311.PDF PineVoice MainBoard Schematic with component placement 20260311]
* '''Wi-Fi provisioning started''' - played when Wi-Fi provisioning starts, including on first boot.
* [https://files.pine64.org/doc/PineVoice/PineVoice%20Bottom%20Board%20Schematics-20250921.PDF PineVoice Bottom Board Schematic 20250921]
* '''Wi-Fi provisioning succeeded or failed''' - played when Wi-Fi provisioning finishes successfully or fails.
* '''Wyoming satellite is disconnected''' - played when Assist is attempted, but the Wyoming satellite/client is not connected.
* '''Wi-Fi is disconnected''' - played when Assist is attempted, but PineVoice is not connected to Wi-Fi.


PineVoice uses [https://github.com/OHF-Voice/micro-wake-word MicroWakeWord] for local wake word detection.


Certifications:
For now, PineVoice uses the "Hey Jarvis" model from the [https://github.com/esphome/micro-wake-word-models ESPHome MicroWakeWord models] project. Wake word recognition may vary depending on the speaker's voice, pronunciation, distance from the device, and background noise.


* [https://files.pine64.org/doc/cert/MTi260330019-0103E1C-Verification%20of%20Conformity.pdf PineVoice CE Certificate]
Future firmware updates are expected to add support for custom MicroWakeWord-compatible models. There are also plans to train a PineVoice-specific wake word model. If you are interested in helping with model training, contact us through the community channels.
* [https://files.pine64.org/doc/cert/PineVoice%20Certificate%20LCSA070722057E.pdf PineVoice FCC Certificate]


== Board information, schematics and certifications ==


== Datasheets for Components and Peripherals ==
Module dimensions:


Bouffalo BL606P SoC information:
* 65 mm x 65 mm x 66 mm
* [https://files.pine64.org/doc/datasheet/pinevoice/BL606P_DS_en_1.2.pdf Bouffalo Lab BL606P SoC Datasheet]
* [https://files.pine64.org/doc/datasheet/pinevoice/BL606P_Product_Brief_v1.0.pdf Bouffalo Lab BL606P SoC Reference Manual]


SPI NOR Flash information:
Production version schematics:
* [https://files.pine64.org/doc/datasheet/star64/gd25lq128e_rev1.0_20210513.pdf GigaDevice 128Mb XSPI-Flash Datasheet]
* [https://wiki.pine64.org/images/5/5d/W25Q128JW_RevB_11042019-1761358.pdf Winbond 128Mb QSPI-Flash Datasheet] (W25Q128JWSQ)


* [https://files.pine64.org/doc/PineVoice/PineVoice%20Main%20Board%20Schematics-20260311.PDF PineVoice MainBoard Schematic with component placement 20260311]
* [https://files.pine64.org/doc/PineVoice/PineVoice%20Bottom%20Board%20Schematics-20250921.PDF PineVoice Bottom Board Schematic 20250921]


== Compatible UARTs when in bootloader mode ==
Certifications:


When the PineVoice is in bootloader mode, some UARTs are unable to communicate with it. When this is the case, utilities such as BLDevCube are unable to actually program the device. If you see "Shake hand fail" and an empty ack, and your device is in bootloader mode, then it is likely an incompatible UART.
* [https://files.pine64.org/doc/cert/MTi260330019-0103E1C-Verification%20of%20Conformity.pdf PineVoice CE Certificate]
* [https://files.pine64.org/doc/cert/PineVoice%20Certificate%20LCSA070722057E.pdf PineVoice FCC Certificate]


The below devices have been tested and verified as working:
== Datasheets ==
* Raspberry Pi Pico - running the following [https://github.com/sanjay900/ox64-uart/releases/tag/v1.1 UART firmware] (GP4 and GP5 are used for port 0, GP12 and GP13 for port 1)
* Compiled binary for Pi Pico and connectivity diagram is [https://github.com/Kris-Sekula/Pine64_Ox64_SBC/tree/main/uart here]
* ESP32 with CP210x - bridge the EN pin to ground to disable the ESP32 itself, and then connect the TX on the esp32 to 14 on the Ox64 and RX to pin 15. Note that only baud rate 115200 works, and this doesn't seem to work for everyone)
* Stand-alone CP2102 dongle works at 115200 baud. Brand used was HiLetgo.
* STM32F401 BlackPill - running the [https://github.com/blackmagic-debug/blackmagic/tree/main/src/platforms/blackpillv2 Black Magic Debug] firmware
* STM32F103C8T6 BluePill - running Black Magic Debug.
* Some UART adapters based on the FT232H (note that the FT232RL does not work, and neither does the Pine 64 JTAG)
* Some CH340G based adapters work and some don't.
* Flipper Zero UART-Bridge works with baud rate set to 230400.


== Resources and Articles ==
Bouffalo BL606P SoC information:


== Development Efforts ==
* [https://files.pine64.org/doc/datasheet/pinevoice/BL606P_DS_en_1.2.pdf Bouffalo Lab BL606P SoC Datasheet]
* [https://raw.githubusercontent.com/bouffalolab/bl_docs/main/BL808_RM/en/BL808_RM_en_1.3.pdf Bouffalo Lab BL606P SoC Reference Manual] (BL808 reference manual applies to BL606P as well)
* [https://files.pine64.org/doc/datasheet/pinevoice/BL606P_Product_Brief_v1.0.pdf Bouffalo Lab BL606P SoC Product Brief]


== Building ==
SPI NOR flash information:


== Flashing ==
* [https://files.pine64.org/doc/datasheet/star64/gd25lq128e_rev1.0_20210513.pdf GigaDevice 128 Mb XSPI-Flash Datasheet]
* [https://wiki.pine64.org/images/5/5d/W25Q128JW_RevB_11042019-1761358.pdf Winbond 128 Mb QSPI-Flash Datasheet]

Latest revision as of 15:27, 24 June 2026

The PineVoice

The PineVoice is a compact RISC-V based smart speaker based on the Bouffalo Lab BL606P RISC-V SoC. It is designed as a local voice assistant satellite, with Wi-Fi, Bluetooth, a speaker, a dual microphone array, buttons, and a center ring LED.

The factory firmware is open-source and provides Wi-Fi provisioning over Improv, local wake word detection, and voice assistant connectivity through the Wyoming protocol, making PineVoice compatible with assistance platforms such as Home Assistant.

Specifications

SoC and memory

Powered by RISC-V
BL606P block diagram

PineVoice is based on the Bouffalo Lab BL606P.

CPU architecture

T-Head C906 480 MHz 64-bit RISC-V CPU:

  • Supports RISC-V RV64IMAFCV instruction architecture
  • Five-stage single-issue sequentially executed pipeline
  • Level-1 instruction and data cache of Harvard architecture, with a size of 32 KiB and a cache line of 64 bytes
  • Sv39 memory management unit
  • Supports AXI 4.0 128-bit master interface
  • Supports core local interrupt (CLINT) and platform-level interrupt controller (PLIC)
  • Compatible with RISC-V PMP

T-Head E907 320 MHz 32-bit RISC-V CPU:

  • Supports RISC-V RV32IMAFCP instruction set
  • Supports RISC-V 32-bit and 16-bit mixed instruction set
  • Supports RISC-V machine mode and user mode
  • Integer and floating-point pipelines
  • Supports AXI 4.0 main device interface and AHB 5.0 peripheral interface
  • 32 KiB instruction cache
  • 16 KiB data cache

T-Head E902 150 MHz 32-bit RISC-V CPU.

Memory and storage

  • 32 MiB pSRAM
  • 788 KiB SRAM
  • 16 MiB flash storage

Hardware features

Wireless

  • Wi-Fi 802.11 b/g/n
  • Bluetooth 5.2 Dual-mode (BT+BLE)

Audio

  • Built-in speaker tuned for voice applications
  • Dual microphone array

Controls and indicators

PineVoice buttons view
  • Button controls
  • Center LED ring and button
  • Hardware mute button

Power and connectivity

  • USB-C power input and data channel
  • Debug UART exposed on unused USB-C pins

Package contents

  • USB-A to USB-C power cable

Software

The factory PineVoice firmware turns PineVoice into a voice assistant satellite. Firmware uses Alibaba's AliOS, specifically the YoC/YoCop variation.

Supported features

The current factory firmware supports:

  • Wi-Fi provisioning using the Improv protocol over Bluetooth Low Energy
  • Wyoming satellite for compatible assistance applications
  • Wyoming mDNS auto-discovery for compatible assistance applications
  • Local wake word detection using MicroWakeWord

Source code

The PineVoice SmartSpeaker SDK source code is available on Codeberg and GitHub.

Wi-Fi setup

PineVoice implements the open-source Improv Wi-Fi provisioning protocol. Any application supporting this protocol can set up Wi-Fi on PineVoice.

Entering provisioning mode

On first boot, PineVoice automatically enters Wi-Fi provisioning mode. While in this mode, the ring LED blinks yellow.

If the ring LED is not blinking yellow, the speaker is not in provisioning mode. Hold the dot button for 15 seconds to reset Wi-Fi setup and return PineVoice to provisioning mode. After releasing the button, PineVoice should restart and launch provisioning mode.

Provisioning through the web

Web provisioning requires a browser with Web Bluetooth API support. See the Web Bluetooth support table for browser compatibility.

Open the PineVoice documentation website on a PC or phone with Bluetooth 4.0 Low Energy support and use the Improv provisioning button there. If that button does not work, try provisioning from the Improv website.

Provisioning through Home Assistant

Home Assistant supports Improv via BLE. This feature must be configured in Home Assistant and requires working Bluetooth support. See the Home Assistant Bluetooth documentation for details.

Improv card in Home Assistant

After successful Wi-Fi provisioning, continue with assistance setup.

Assistance setup

PineVoice implements the open-source Wyoming protocol for voice assistants. Any assistance application supporting this protocol can communicate with PineVoice.

After PineVoice has joined the Wi-Fi network, the center ring LED should slowly breathe in a dim magenta color. This means PineVoice is connected to Wi-Fi and is waiting for an assistance application to connect through the Wyoming protocol.

Adding PineVoice to Home Assistant

Home Assistant supports Wyoming Protocol devices through the Wyoming Protocol integration. Home Assistant must also have a working Assist voice pipeline. Follow the Home Assistant Assist documentation if Assist has not been configured yet.

Automatic setup

PineVoice supports mDNS auto-discovery. If Home Assistant can see mDNS announcements on the same network, PineVoice should appear automatically as a discovered Wyoming Protocol device.

  1. Open Home Assistant.
  2. Go to Settings -> Devices & services.
  3. Look for a discovered Wyoming Protocol device.
  4. Select Configure.
  5. Follow the on-screen instructions to finish adding PineVoice.

After setup completes, PineVoice should be available as an Assist satellite in Home Assistant.

Manual setup

If PineVoice does not appear automatically, add it manually through the Wyoming Protocol integration.

  1. Find the IP address of PineVoice in the client list of your Wi-Fi router or access point.
  2. Open Home Assistant.
  3. Go to Settings -> Devices & services.
  4. Select Add integration.
  5. Search for and select Wyoming Protocol.
  6. Enter the PineVoice IP address as the host.
  7. Enter 10700 as the port.
  8. Follow the on-screen instructions to finish adding PineVoice.

Troubleshooting

Known issues currently being investigated:

  • If PineVoice is stuck in the listening state or Home Assistant does not react when Assist starts, restart PineVoice.
  • If adding the device fails, press Retry / Try Again, or try to add PineVoice again.

If Home Assistant cannot connect to PineVoice, check the following:

  • PineVoice and Home Assistant are on the same network or VLAN.
  • The center ring LED is breathing in dim magenta.
  • The IP address entered in Home Assistant is the current IP address of PineVoice.
  • TCP port 10700 is reachable from the Home Assistant system.
  • mDNS is allowed on the network if using automatic discovery.

For more information, see the Home Assistant Wyoming Protocol integration documentation.

Testing

After PineVoice is added to an assistance application, Assist can be triggered in the following ways:

  • Say the wake word: "Hey Jarvis"
  • Press the center button in the LED ring

After triggering Assist, say a command supported by the assistance application. The assistance application should reply accordingly.

LED ring lightshows and controls

The center LED ring shows the current state of PineVoice. For most actions and states, light shows are used instead of voice feedback so PineVoice does not unexpectedly disturb the user, for example during the night. Active-state light shows, such as the dim cyan standby light, are intentionally kept dim so they remain visible without being distracting in a dark room.

Startup and setup

Light show Meaning
Dim white fade-in/fade-out, once Boot-up lightshow. PineVoice has started.
Yellow breath, loop PineVoice is in provisioning mode and is ready to connect to Wi-Fi through the Improv protocol.
Green fade-in/fade-out, once Identification signal during provisioning, used to identify the paired PineVoice.
Dim orange breath, loop PineVoice is trying to connect to Wi-Fi.
Dim magenta breath, loop PineVoice is waiting for a Wyoming client to connect.

Action feedback

Light show Meaning
White fade-in, once Volume up.
White fade-out, once Volume down.
Red fade-out, once An error happened or the action failed.

Button controls

PineVoice buttons view

PineVoice has five top buttons for voice control, volume, microphone mute, and provisioning.

  • Center LED ring button - starts a voice command session.
  • + button - increases the volume.
  • - button - decreases the volume.
  • Microphone button - hardware microphone mute. The button shines red while microphone mute is active.
  • Dot / user button - currently used to enter provisioning mode. Hold it for 15 seconds to reset Wi-Fi setup and return PineVoice to provisioning mode.

Voice feedback and wake word detection

PineVoice mostly uses light shows instead of voice feedback. Voice feedback is generally reserved for direct user interaction.

Audio feedback is currently used in the following cases:

  • Wi-Fi provisioning started - played when Wi-Fi provisioning starts, including on first boot.
  • Wi-Fi provisioning succeeded or failed - played when Wi-Fi provisioning finishes successfully or fails.
  • Wyoming satellite is disconnected - played when Assist is attempted, but the Wyoming satellite/client is not connected.
  • Wi-Fi is disconnected - played when Assist is attempted, but PineVoice is not connected to Wi-Fi.

PineVoice uses MicroWakeWord for local wake word detection.

For now, PineVoice uses the "Hey Jarvis" model from the ESPHome MicroWakeWord models project. Wake word recognition may vary depending on the speaker's voice, pronunciation, distance from the device, and background noise.

Future firmware updates are expected to add support for custom MicroWakeWord-compatible models. There are also plans to train a PineVoice-specific wake word model. If you are interested in helping with model training, contact us through the community channels.

Board information, schematics and certifications

Module dimensions:

  • 65 mm x 65 mm x 66 mm

Production version schematics:

Certifications:

Datasheets

Bouffalo BL606P SoC information:

SPI NOR flash information: