<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PineVoice on PINE64</title><link>https://pine64.org/documentation/PineVoice/</link><description>Recent content in PineVoice on PINE64</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://pine64.org/documentation/PineVoice/index.xml" rel="self" type="application/rss+xml"/><item><title>Assistance Setup</title><link>https://pine64.org/documentation/PineVoice/Assistance_Setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pine64.org/documentation/PineVoice/Assistance_Setup/</guid><description>&lt;p&gt;PineVoice implements the open-source &lt;a href="https://github.com/OHF-Voice/wyoming" target="_blank"&gt;Wyoming&lt;/a&gt; protocol for voice assistants. Any assistance application supporting this protocol can communicate with PineVoice.&lt;/p&gt;



&lt;h2 id="before-starting"&gt;
 Before starting
 &lt;a id="before_starting" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Complete &lt;a href="https://pine64.org/documentation/PineVoice/WiFi_Setup/"&gt;WiFi Setup&lt;/a&gt; first. After PineVoice has joined the Wi-Fi network, the center ring LED should slowly breathe in a dim magenta color. This means that PineVoice is connected to Wi-Fi and is waiting for an assistance application to connect through the Wyoming protocol.&lt;/p&gt;



&lt;h2 id="adding-pinevoice-to-home-assistant"&gt;
 Adding PineVoice to Home Assistant
 &lt;a id="adding_pinevoice_to_home_assistant" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Home Assistant supports Wyoming Protocol devices through the &lt;a href="https://www.home-assistant.io/integrations/wyoming/" target="_blank"&gt;Wyoming Protocol integration&lt;/a&gt;. Home Assistant must also have a working Assist voice pipeline. Follow the &lt;a href="https://www.home-assistant.io/voice_control/" target="_blank"&gt;Home Assistant Assist&lt;/a&gt; documentation if Assist has not been configured yet.&lt;/p&gt;



&lt;h3 id="automatic-setup"&gt;
 Automatic setup
 &lt;a id="automatic_setup" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Home Assistant.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Devices &amp;amp; services&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Look for a discovered &lt;strong&gt;Wyoming Protocol&lt;/strong&gt; device.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Configure&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Follow the on-screen instructions to finish adding PineVoice.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After setup completes, PineVoice should be available as an Assist satellite in Home Assistant.&lt;/p&gt;



&lt;h3 id="manual-setup"&gt;
 Manual setup
 &lt;a id="manual_setup" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;If PineVoice does not appear automatically, add it manually through the Wyoming Protocol integration.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Find the IP address of PineVoice in the client list of your Wi-Fi router or access point.&lt;/li&gt;
&lt;li&gt;Open Home Assistant.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Devices &amp;amp; services&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Add integration&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Search for and select &lt;strong&gt;Wyoming Protocol&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter the PineVoice IP address as the host.&lt;/li&gt;
&lt;li&gt;Enter &lt;code&gt;10700&lt;/code&gt; as the port.&lt;/li&gt;
&lt;li&gt;Follow the on-screen instructions to finish adding PineVoice.&lt;/li&gt;
&lt;/ol&gt;



&lt;h3 id="troubleshooting"&gt;
 Troubleshooting
 &lt;a id="troubleshooting" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;div class="admonition admonition-important"&gt;
 &lt;div class="admonition-header"&gt;Important&lt;/div&gt;
 &lt;div class="admonition-text"&gt;
 &lt;p&gt;If following bugs occurs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PineVoice is stuck in listening state or Home Assistant does not react to start of Assist - restart PineVoice.&lt;/li&gt;
&lt;li&gt;Device add failed - press Retry / Try Again, or try to add the PineVoice again.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Following bugs are being investigated and will be fixed in update of PineVoice firmware or Home Assistant Core.&lt;/p&gt;

 &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If Home Assistant cannot connect to PineVoice, check the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PineVoice and Home Assistant are on the same network or VLAN.&lt;/li&gt;
&lt;li&gt;The center ring LED is breathing in dim magenta.&lt;/li&gt;
&lt;li&gt;The IP address entered in Home Assistant is the current IP address of PineVoice.&lt;/li&gt;
&lt;li&gt;TCP port &lt;code&gt;10700&lt;/code&gt; is reachable from the Home Assistant system.&lt;/li&gt;
&lt;li&gt;mDNS is allowed on the network if using automatic discovery.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, see the Home Assistant &lt;a href="https://www.home-assistant.io/integrations/wyoming/" target="_blank"&gt;Wyoming Protocol integration&lt;/a&gt; documentation.&lt;/p&gt;



&lt;h2 id="testing"&gt;
 Testing
 &lt;a id="testing" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;After PineVoice is properly added to an assistance application, assist can be triggered in the following ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Say the wake word: &amp;ldquo;Hey Jarvis&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Press the center button in the LED ring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After triggering assist, say a command supported by the assistance application. The assistance application should then reply accordingly.&lt;/p&gt;</description></item><item><title>PineVoice (Single Page)</title><link>https://pine64.org/documentation/PineVoice/_full/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pine64.org/documentation/PineVoice/_full/</guid><description>









&lt;hr&gt;

&lt;br&gt;


 
 

 
 
 &lt;figure&gt;&lt;img src="https://pine64.org/documentation/PineVoice/images/pinevoice.jpg"
 alt="The PineVoice" width="600"&gt;&lt;figcaption&gt;
 &lt;p&gt;The PineVoice&lt;/p&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;The &lt;strong&gt;PineVoice&lt;/strong&gt; 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 32 MiB of embedded pSRAM memory, 16 MiB of Flash, and with built-in Wi-Fi and Bluetooth radio interfaces. Some of notable features include dual microphone array and full local wake word detection. Factory shipped firmware is open-source and provides Wyoming Satellite, compatible with assistence platforms such as Home Assistant.&lt;/p&gt;





 
 &lt;br&gt;
 &lt;h1 id="specifications"&gt;
 &lt;a href="#specifications"&gt;Specifications&lt;/a&gt;
 &lt;/h1&gt;

 
 
 

 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 &lt;p&gt;The &lt;strong&gt;PineVoice&lt;/strong&gt; is a compact 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.&lt;/p&gt;



&lt;h2 id="soc-and-memory"&gt;
 SoC and memory
 &lt;a id="soc_and_memory" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;PineVoice is based on the &lt;a href="https://bouffalolab.com/product/?type=detail&amp;amp;id=16" target="_blank"&gt;Bouffalo Lab BL606P&lt;/a&gt;.&lt;/p&gt;



&lt;h3 id="cpu-architecture"&gt;
 CPU architecture
 &lt;a id="cpu_architecture" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;T-Head C906 480 MHz 64-bit RISC-V CPU:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supports RISC-V RV64IMAFCV instruction architecture&lt;/li&gt;
&lt;li&gt;Five-stage single-issue sequentially executed pipeline&lt;/li&gt;
&lt;li&gt;Level-1 instruction and data cache of Harvard architecture, with a size of 32 KiB and a cache line of 64 bytes&lt;/li&gt;
&lt;li&gt;Sv39 memory management unit&lt;/li&gt;
&lt;li&gt;Supports AXI 4.0 128-bit master interface&lt;/li&gt;
&lt;li&gt;Supports core local interrupt (CLINT) and platform-level interrupt controller (PLIC)&lt;/li&gt;
&lt;li&gt;Compatible with RISC-V PMP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;T-Head E907 320 MHz 32-bit RISC-V CPU:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supports RISC-V RV32IMAFCP instruction set&lt;/li&gt;
&lt;li&gt;Supports RISC-V 32-bit and 16-bit mixed instruction set&lt;/li&gt;
&lt;li&gt;Supports RISC-V machine mode and user mode&lt;/li&gt;
&lt;li&gt;Integer and floating-point pipelines&lt;/li&gt;
&lt;li&gt;Supports AXI 4.0 main device interface and AHB 5.0 peripheral interface&lt;/li&gt;
&lt;li&gt;32 KiB instruction cache&lt;/li&gt;
&lt;li&gt;16 KiB data cache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;T-Head E902 150 MHz 32-bit RISC-V CPU&lt;/p&gt;



&lt;h3 id="memory-and-storage"&gt;
 Memory and storage
 &lt;a id="memory_and_storage" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;32 MiB pSRAM&lt;/li&gt;
&lt;li&gt;788 KiB SRAM&lt;/li&gt;
&lt;li&gt;16 MiB flash storage&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="hardware-features"&gt;
 Hardware features
 &lt;a id="hardware_features" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;


&lt;h3 id="wireless"&gt;
 Wireless
 &lt;a id="wireless" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Wi-Fi 802.11 b/g/n&lt;/li&gt;
&lt;li&gt;Bluetooth 5.2 Dual-mode (BT+BLE)&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 id="audio"&gt;
 Audio
 &lt;a id="audio" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Built-in speaker (tuned for voice applications)&lt;/li&gt;
&lt;li&gt;Dual microphone array&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 id="controls-and-indicators"&gt;
 Controls and indicators
 &lt;a id="controls_and_indicators" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;figure&gt;&lt;img src="https://pine64.org/documentation/PineVoice/images/pinevoice-top-view-labels.png"
 alt="PineVoice buttons view" width="600"&gt;&lt;figcaption&gt;
 &lt;p&gt;PineVoice buttons view&lt;/p&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;Button controls&lt;/li&gt;
&lt;li&gt;Center LED ring and button&lt;/li&gt;
&lt;li&gt;Hardware mute button&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See &lt;a href="https://pine64.org/documentation/PineVoice/Software/"&gt;Software&lt;/a&gt; for the current factory firmware button behavior and LED status colors.&lt;/p&gt;



&lt;h3 id="power-and-connectivity"&gt;
 Power and connectivity
 &lt;a id="power_and_connectivity" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;USB-C power input and data channel
&lt;ul&gt;
&lt;li&gt;Debug UART is exposed on unused USB-C pins&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 id="package-contents"&gt;
 Package contents
 &lt;a id="package_contents" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;USB-A to USB-C power cable&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="board-information-schematics-and-certifications"&gt;
 Board information, schematics and certifications
 &lt;a id="board_information_schematics_and_certifications" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Module dimensions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;65 mm x 65 mm x 66 mm&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Production version schematics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/PineVoice/PineVoice%20Main%20Board%20Schematics-20260311.PDF" target="_blank"&gt;PineVoice MainBoard Schematic with component placement 20260311&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/PineVoice/PineVoice%20Bottom%20Board%20Schematics-20250921.PDF" target="_blank"&gt;PineVoice Bottom Board Schematic 20250921&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Certifications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/cert/MTi260330019-0103E1C-Verification%20of%20Conformity.pdf" target="_blank"&gt;PineVoice CE Certificate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/cert/PineVoice%20Certificate%20LCSA070722057E.pdf" target="_blank"&gt;PineVoice FCC Certificate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="datasheets"&gt;
 Datasheets
 &lt;a id="datasheets" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Bouffalo BL606P SoC information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/datasheet/pinevoice/BL606P_DS_en_1.2.pdf" target="_blank"&gt;Bouffalo Lab BL606P SoC Datasheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/bouffalolab/bl_docs/main/BL808_RM/en/BL808_RM_en_1.3.pdf" target="_blank"&gt;Bouffalo Lab BL606P SoC Reference Manual&lt;/a&gt; (BL808 RM applies to BL606P as well)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/datasheet/pinevoice/BL606P_Product_Brief_v1.0.pdf" target="_blank"&gt;Bouffalo Lab BL606P SoC Product Brief&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SPI NOR flash information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/datasheet/star64/gd25lq128e_rev1.0_20210513.pdf" target="_blank"&gt;GigaDevice 128 Mb XSPI-Flash Datasheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.pine64.org/images/5/5d/W25Q128JW_RevB_11042019-1761358.pdf" target="_blank"&gt;Winbond 128 Mb QSPI-Flash Datasheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;




 
 

 

 
 &lt;br&gt;
 &lt;h1 id="software"&gt;
 &lt;a href="#software"&gt;Software overview&lt;/a&gt;
 &lt;/h1&gt;

 
 
 

 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 &lt;p&gt;The factory PineVoice firmware is open-source and turns PineVoice into a voice assistant satellite. It provides Wi-Fi provisioning over Improv and voice assistant connectivity over the Wyoming protocol.&lt;/p&gt;
&lt;p&gt;Firmware is using Alibaba&amp;rsquo;s AliOS, specifically it&amp;rsquo;s &amp;ldquo;YoC/YoCop&amp;rdquo; variation.&lt;/p&gt;



&lt;h2 id="supported-features"&gt;
 Supported features
 &lt;a id="supported_features" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;The current factory firmware supports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wi-Fi provisioning using the &lt;a href="https://www.improv-wifi.com/" target="_blank"&gt;Improv&lt;/a&gt; protocol over Bluetooth Low Energy&lt;/li&gt;
&lt;li&gt;Wyoming satellite for compatible assistance applications&lt;/li&gt;
&lt;li&gt;Wyoming mDNS auto-discovery for compatible assistance applications&lt;/li&gt;
&lt;li&gt;Local wake word detection using &lt;a href="https://github.com/OHF-Voice/micro-wake-word" target="_blank"&gt;MicroWakeWord&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="setup"&gt;
 Setup
 &lt;a id="setup" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;On first boot, PineVoice starts in Wi-Fi provisioning mode. In this mode, the ring LED blinks yellow. Use &lt;a href="https://pine64.org/documentation/PineVoice/WiFi_Setup/"&gt;WiFi Setup&lt;/a&gt; to connect PineVoice to a Wi-Fi network and follow further instructions for connection with Assistance application which supports Wyoming protocol, such as Home Assistant.&lt;/p&gt;



&lt;h2 id="led-ring-lightshows"&gt;
 LED ring lightshows
 &lt;a id="led_ring_lightshows" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;The center LED ring is used to show 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.&lt;/p&gt;



&lt;h3 id="startup-and-setup"&gt;
 Startup and setup
 &lt;a id="startup_and_setup" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Light show&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Dim white fade-in/fade-out, once&lt;/td&gt;
 &lt;td&gt;Boot-up lightshow. PineVoice has started.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Yellow breath, loop&lt;/td&gt;
 &lt;td&gt;PineVoice is in provisioning mode and is ready to connect to Wi-Fi through the Improv protocol.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Green fade-in/fade-out, once&lt;/td&gt;
 &lt;td&gt;Identification signal during provisioning, used to identify the paired PineVoice.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dim orange breath, loop&lt;/td&gt;
 &lt;td&gt;PineVoice is trying to connect to Wi-Fi.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dim magenta breath, loop&lt;/td&gt;
 &lt;td&gt;PineVoice is waiting for a Wyoming client to connect.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;



&lt;h3 id="assistant-states"&gt;
 Assistant states
 &lt;a id="assistant_states" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Light show&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Dim cyan, still&lt;/td&gt;
 &lt;td&gt;PineVoice is active and in standby, waiting for the user to press the center button or say the wake word.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Blue-cyan-blue breath, loop&lt;/td&gt;
 &lt;td&gt;PineVoice is listening to the user&amp;rsquo;s voice input.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dim purple, still&lt;/td&gt;
 &lt;td&gt;PineVoice is processing the user&amp;rsquo;s input.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Slow green breath, loop&lt;/td&gt;
 &lt;td&gt;PineVoice is answering.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;



&lt;h3 id="action-feedback"&gt;
 Action feedback
 &lt;a id="action_feedback" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Light show&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;White fade-in, once&lt;/td&gt;
 &lt;td&gt;Volume up.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;White fade-out, once&lt;/td&gt;
 &lt;td&gt;Volume down.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Red fade-out, once&lt;/td&gt;
 &lt;td&gt;An error happened or the action failed.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;



&lt;h2 id="button-controls"&gt;
 Button controls
 &lt;a id="button_controls" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;figure&gt;&lt;img src="https://pine64.org/documentation/PineVoice/images/pinevoice-top-view.png"
 alt="PineVoice buttons view" width="400"&gt;&lt;figcaption&gt;
 &lt;p&gt;PineVoice buttons view&lt;/p&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;PineVoice has five top buttons for voice control, volume, microphone mute, and provisioning.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Center LED ring button&lt;/strong&gt; - starts a voice command session.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;+&lt;/code&gt; button&lt;/strong&gt; - increases the volume.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-&lt;/code&gt; button&lt;/strong&gt; - decreases the volume.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microphone button&lt;/strong&gt; - hardware microphone mute. The button shines red while microphone mute is active.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dot / user button&lt;/strong&gt; - currently used to enter provisioning mode. Hold it for 15 seconds to reset Wi-Fi setup and return PineVoice to provisioning mode.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="voice-feedback"&gt;
 Voice feedback
 &lt;a id="voice_feedback" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;As mentioned in &lt;a href="#led-ring-lightshows"&gt;LED ring lightshows&lt;/a&gt;, voice feedback is used rarely. PineVoice mostly uses light shows instead, and voice feedback is generally reserved for direct user interaction.&lt;/p&gt;
&lt;p&gt;Audio feedback is currently used in the following cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Wi-Fi provisioning started&lt;/strong&gt; - played when Wi-Fi provisioning starts, including on first boot.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wi-Fi provisioning succeeded or failed&lt;/strong&gt; - played when Wi-Fi provisioning finishes successfully or fails.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wyoming satellite is disconnected&lt;/strong&gt; - played when Assist is attempted, but the Wyoming satellite/client is not connected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wi-Fi is disconnected&lt;/strong&gt; - played when Assist is attempted, but PineVoice is not connected to Wi-Fi.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="wake-word-detection"&gt;
 Wake word detection
 &lt;a id="wake_word_detection" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;PineVoice uses &lt;a href="https://github.com/OHF-Voice/micro-wake-word" target="_blank"&gt;MicroWakeWord&lt;/a&gt; for local wake word detection.&lt;/p&gt;
&lt;p&gt;For now, PineVoice uses the &amp;ldquo;Hey Jarvis&amp;rdquo; model from the &lt;a href="https://github.com/esphome/micro-wake-word-models" target="_blank"&gt;ESPHome MicroWakeWord models&lt;/a&gt; project. The wake word generally works well, but recognition may vary depending on the speaker&amp;rsquo;s voice, pronunciation, distance from the device, and background noise.&lt;/p&gt;


&lt;div class="admonition admonition-note"&gt;
 &lt;div class="admonition-header"&gt;Note&lt;/div&gt;
 &lt;div class="admonition-text"&gt;
 Future firmware updates are expected to add support for using 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.
 &lt;/div&gt;
&lt;/div&gt;



&lt;h2 id="source-code"&gt;
 Source code
 &lt;a id="source_code" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;You can find source code of this firmware (PineVoice SmartSpeaker SDK) on &lt;a href="https://codeberg.org/pine64/pinevoice_smartspeaker_sdk" target="_blank"&gt;Codeberg&lt;/a&gt; and &lt;a href="https://github.com/pine64/pinevoice_smartspeaker_sdk" target="_blank"&gt;Github&lt;/a&gt;.&lt;/p&gt;




 
 

 

 
 &lt;br&gt;
 &lt;h1 id="wifi_setup"&gt;
 &lt;a href="#wifi_setup"&gt;WiFi Setup&lt;/a&gt;
 &lt;/h1&gt;

 
 
 

 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 &lt;p&gt;PineVoice implements open-source WiFi Provisioning protocol &lt;a href="https://www.improv-wifi.com/" target="_blank"&gt;Improv&lt;/a&gt;. Any application supporting this protocol is capable of setting up WiFi on the PineVoice.&lt;/p&gt;



&lt;h2 id="entering-provisioning-mode"&gt;
 Entering Provisioning Mode
 &lt;a id="entering_provisioning_mode" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;On first boot, the speaker automatically enters Wi-Fi provisioning mode. While in this mode, the ring LED blinks yellow.&lt;/p&gt;
&lt;p&gt;If the ring LED is not blinking yellow, the speaker is not in provisioning mode. Perform a factory reset to return it to provisioning mode, by holding • dot button for 15 seconds. After releasing the button, PineVoice should restart and launch Provisioning Mode.&lt;/p&gt;



&lt;h2 id="provisioning"&gt;
 Provisioning
 &lt;a id="provisioning" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Once the speaker is in provisioning mode (ring LED blinking yellow), use one of the following methods to send the Wi-Fi credentials:&lt;/p&gt;



&lt;h3 id="through-web"&gt;
 Through Web
 &lt;a id="through_web" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;div class="admonition admonition-info"&gt;
 &lt;div class="admonition-header"&gt;Info&lt;/div&gt;
 &lt;div class="admonition-text"&gt;
 Web Provisioning requires browser with Web Bluetooth API support. Please refer &lt;a href="https://caniuse.com/web-bluetooth" target="_blank"&gt;this table&lt;/a&gt; if your browser is supported.
 &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Open this website on your PC or phone, which have Bluetooth 4.0 (Low Energy) connectivity and then press following button:&lt;/p&gt;
&lt;script
 type="module"
 src="https://www.improv-wifi.com/sdk-ble-js/launch-button.js"
&gt;&lt;/script&gt;

&lt;improv-wifi-launch-button&gt;&lt;/improv-wifi-launch-button&gt;



&lt;h4 id="alternative-web-provisioning"&gt;
 Alternative web provisioning
 &lt;a id="alternative_web_provisioning" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;p&gt;If button on this website does not work, try it on &lt;a href="https://www.improv-wifi.com/" target="_blank"&gt;Improv website&lt;/a&gt;.&lt;/p&gt;



&lt;h3 id="through-home-assistant"&gt;
 Through Home Assistant
 &lt;a id="through_home_assistant" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Home Assistants supports &lt;a href="https://www.home-assistant.io/integrations/improv_ble/" target="_blank"&gt;Improv via BLE&lt;/a&gt;. This feature must be set up properly to be functional. Please, follow &lt;a href="https://www.home-assistant.io/integrations/bluetooth" target="_blank"&gt;this&lt;/a&gt; instructions on Home Assistant website.&lt;/p&gt;
&lt;p&gt;This card should pop up automatically in your Home Assistant on Devices page:&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://pine64.org/documentation/PineVoice/images/improv-card.png"
 alt="Improv Card in Home Assistant" width="400"&gt;&lt;figcaption&gt;
 &lt;p&gt;Improv Card in Home Assistant&lt;/p&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;After successful provisioning, please continue to &lt;a href="https://pine64.org/documentation/PineVoice/Assistance_Setup/"&gt;Assistance Setup&lt;/a&gt;.&lt;/p&gt;




 
 

 

 
 &lt;br&gt;
 &lt;h1 id="assistance_setup"&gt;
 &lt;a href="#assistance_setup"&gt;Assistance Setup&lt;/a&gt;
 &lt;/h1&gt;

 
 
 

 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 
 
 
 
 
 
 

 
 
 

 
 
 
 
 &lt;p&gt;PineVoice implements the open-source &lt;a href="https://github.com/OHF-Voice/wyoming" target="_blank"&gt;Wyoming&lt;/a&gt; protocol for voice assistants. Any assistance application supporting this protocol can communicate with PineVoice.&lt;/p&gt;



&lt;h2 id="before-starting"&gt;
 Before starting
 &lt;a id="before_starting" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Complete &lt;a href="https://pine64.org/documentation/PineVoice/WiFi_Setup/"&gt;WiFi Setup&lt;/a&gt; first. After PineVoice has joined the Wi-Fi network, the center ring LED should slowly breathe in a dim magenta color. This means that PineVoice is connected to Wi-Fi and is waiting for an assistance application to connect through the Wyoming protocol.&lt;/p&gt;



&lt;h2 id="adding-pinevoice-to-home-assistant"&gt;
 Adding PineVoice to Home Assistant
 &lt;a id="adding_pinevoice_to_home_assistant" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Home Assistant supports Wyoming Protocol devices through the &lt;a href="https://www.home-assistant.io/integrations/wyoming/" target="_blank"&gt;Wyoming Protocol integration&lt;/a&gt;. Home Assistant must also have a working Assist voice pipeline. Follow the &lt;a href="https://www.home-assistant.io/voice_control/" target="_blank"&gt;Home Assistant Assist&lt;/a&gt; documentation if Assist has not been configured yet.&lt;/p&gt;



&lt;h3 id="automatic-setup"&gt;
 Automatic setup
 &lt;a id="automatic_setup" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;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.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Open Home Assistant.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Devices &amp;amp; services&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Look for a discovered &lt;strong&gt;Wyoming Protocol&lt;/strong&gt; device.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Configure&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Follow the on-screen instructions to finish adding PineVoice.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;After setup completes, PineVoice should be available as an Assist satellite in Home Assistant.&lt;/p&gt;



&lt;h3 id="manual-setup"&gt;
 Manual setup
 &lt;a id="manual_setup" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;If PineVoice does not appear automatically, add it manually through the Wyoming Protocol integration.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Find the IP address of PineVoice in the client list of your Wi-Fi router or access point.&lt;/li&gt;
&lt;li&gt;Open Home Assistant.&lt;/li&gt;
&lt;li&gt;Go to &lt;strong&gt;Settings&lt;/strong&gt; -&amp;gt; &lt;strong&gt;Devices &amp;amp; services&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Select &lt;strong&gt;Add integration&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Search for and select &lt;strong&gt;Wyoming Protocol&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Enter the PineVoice IP address as the host.&lt;/li&gt;
&lt;li&gt;Enter &lt;code&gt;10700&lt;/code&gt; as the port.&lt;/li&gt;
&lt;li&gt;Follow the on-screen instructions to finish adding PineVoice.&lt;/li&gt;
&lt;/ol&gt;



&lt;h3 id="troubleshooting"&gt;
 Troubleshooting
 &lt;a id="troubleshooting" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;div class="admonition admonition-important"&gt;
 &lt;div class="admonition-header"&gt;Important&lt;/div&gt;
 &lt;div class="admonition-text"&gt;
 &lt;p&gt;If following bugs occurs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PineVoice is stuck in listening state or Home Assistant does not react to start of Assist - restart PineVoice.&lt;/li&gt;
&lt;li&gt;Device add failed - press Retry / Try Again, or try to add the PineVoice again.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Following bugs are being investigated and will be fixed in update of PineVoice firmware or Home Assistant Core.&lt;/p&gt;

 &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;If Home Assistant cannot connect to PineVoice, check the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;PineVoice and Home Assistant are on the same network or VLAN.&lt;/li&gt;
&lt;li&gt;The center ring LED is breathing in dim magenta.&lt;/li&gt;
&lt;li&gt;The IP address entered in Home Assistant is the current IP address of PineVoice.&lt;/li&gt;
&lt;li&gt;TCP port &lt;code&gt;10700&lt;/code&gt; is reachable from the Home Assistant system.&lt;/li&gt;
&lt;li&gt;mDNS is allowed on the network if using automatic discovery.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, see the Home Assistant &lt;a href="https://www.home-assistant.io/integrations/wyoming/" target="_blank"&gt;Wyoming Protocol integration&lt;/a&gt; documentation.&lt;/p&gt;



&lt;h2 id="testing"&gt;
 Testing
 &lt;a id="testing" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;After PineVoice is properly added to an assistance application, assist can be triggered in the following ways:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Say the wake word: &amp;ldquo;Hey Jarvis&amp;rdquo;&lt;/li&gt;
&lt;li&gt;Press the center button in the LED ring&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;After triggering assist, say a command supported by the assistance application. The assistance application should then reply accordingly.&lt;/p&gt;




 
 

 

 
</description></item><item><title>Software overview</title><link>https://pine64.org/documentation/PineVoice/Software/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pine64.org/documentation/PineVoice/Software/</guid><description>&lt;p&gt;The factory PineVoice firmware is open-source and turns PineVoice into a voice assistant satellite. It provides Wi-Fi provisioning over Improv and voice assistant connectivity over the Wyoming protocol.&lt;/p&gt;
&lt;p&gt;Firmware is using Alibaba&amp;rsquo;s AliOS, specifically it&amp;rsquo;s &amp;ldquo;YoC/YoCop&amp;rdquo; variation.&lt;/p&gt;



&lt;h2 id="supported-features"&gt;
 Supported features
 &lt;a id="supported_features" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;The current factory firmware supports:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Wi-Fi provisioning using the &lt;a href="https://www.improv-wifi.com/" target="_blank"&gt;Improv&lt;/a&gt; protocol over Bluetooth Low Energy&lt;/li&gt;
&lt;li&gt;Wyoming satellite for compatible assistance applications&lt;/li&gt;
&lt;li&gt;Wyoming mDNS auto-discovery for compatible assistance applications&lt;/li&gt;
&lt;li&gt;Local wake word detection using &lt;a href="https://github.com/OHF-Voice/micro-wake-word" target="_blank"&gt;MicroWakeWord&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="setup"&gt;
 Setup
 &lt;a id="setup" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;On first boot, PineVoice starts in Wi-Fi provisioning mode. In this mode, the ring LED blinks yellow. Use &lt;a href="https://pine64.org/documentation/PineVoice/WiFi_Setup/"&gt;WiFi Setup&lt;/a&gt; to connect PineVoice to a Wi-Fi network and follow further instructions for connection with Assistance application which supports Wyoming protocol, such as Home Assistant.&lt;/p&gt;



&lt;h2 id="led-ring-lightshows"&gt;
 LED ring lightshows
 &lt;a id="led_ring_lightshows" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;The center LED ring is used to show 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.&lt;/p&gt;



&lt;h3 id="startup-and-setup"&gt;
 Startup and setup
 &lt;a id="startup_and_setup" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Light show&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Dim white fade-in/fade-out, once&lt;/td&gt;
 &lt;td&gt;Boot-up lightshow. PineVoice has started.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Yellow breath, loop&lt;/td&gt;
 &lt;td&gt;PineVoice is in provisioning mode and is ready to connect to Wi-Fi through the Improv protocol.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Green fade-in/fade-out, once&lt;/td&gt;
 &lt;td&gt;Identification signal during provisioning, used to identify the paired PineVoice.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dim orange breath, loop&lt;/td&gt;
 &lt;td&gt;PineVoice is trying to connect to Wi-Fi.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dim magenta breath, loop&lt;/td&gt;
 &lt;td&gt;PineVoice is waiting for a Wyoming client to connect.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;



&lt;h3 id="assistant-states"&gt;
 Assistant states
 &lt;a id="assistant_states" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Light show&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;Dim cyan, still&lt;/td&gt;
 &lt;td&gt;PineVoice is active and in standby, waiting for the user to press the center button or say the wake word.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Blue-cyan-blue breath, loop&lt;/td&gt;
 &lt;td&gt;PineVoice is listening to the user&amp;rsquo;s voice input.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Dim purple, still&lt;/td&gt;
 &lt;td&gt;PineVoice is processing the user&amp;rsquo;s input.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Slow green breath, loop&lt;/td&gt;
 &lt;td&gt;PineVoice is answering.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;



&lt;h3 id="action-feedback"&gt;
 Action feedback
 &lt;a id="action_feedback" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;table&gt;
 &lt;thead&gt;
 &lt;tr&gt;
 &lt;th&gt;Light show&lt;/th&gt;
 &lt;th&gt;Meaning&lt;/th&gt;
 &lt;/tr&gt;
 &lt;/thead&gt;
 &lt;tbody&gt;
 &lt;tr&gt;
 &lt;td&gt;White fade-in, once&lt;/td&gt;
 &lt;td&gt;Volume up.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;White fade-out, once&lt;/td&gt;
 &lt;td&gt;Volume down.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;tr&gt;
 &lt;td&gt;Red fade-out, once&lt;/td&gt;
 &lt;td&gt;An error happened or the action failed.&lt;/td&gt;
 &lt;/tr&gt;
 &lt;/tbody&gt;
&lt;/table&gt;



&lt;h2 id="button-controls"&gt;
 Button controls
 &lt;a id="button_controls" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;figure&gt;&lt;img src="https://pine64.org/documentation/PineVoice/images/pinevoice-top-view.png"
 alt="PineVoice buttons view" width="400"&gt;&lt;figcaption&gt;
 &lt;p&gt;PineVoice buttons view&lt;/p&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;PineVoice has five top buttons for voice control, volume, microphone mute, and provisioning.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Center LED ring button&lt;/strong&gt; - starts a voice command session.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;+&lt;/code&gt; button&lt;/strong&gt; - increases the volume.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;-&lt;/code&gt; button&lt;/strong&gt; - decreases the volume.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Microphone button&lt;/strong&gt; - hardware microphone mute. The button shines red while microphone mute is active.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dot / user button&lt;/strong&gt; - currently used to enter provisioning mode. Hold it for 15 seconds to reset Wi-Fi setup and return PineVoice to provisioning mode.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="voice-feedback"&gt;
 Voice feedback
 &lt;a id="voice_feedback" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;As mentioned in &lt;a href="#led-ring-lightshows"&gt;LED ring lightshows&lt;/a&gt;, voice feedback is used rarely. PineVoice mostly uses light shows instead, and voice feedback is generally reserved for direct user interaction.&lt;/p&gt;
&lt;p&gt;Audio feedback is currently used in the following cases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Wi-Fi provisioning started&lt;/strong&gt; - played when Wi-Fi provisioning starts, including on first boot.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wi-Fi provisioning succeeded or failed&lt;/strong&gt; - played when Wi-Fi provisioning finishes successfully or fails.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wyoming satellite is disconnected&lt;/strong&gt; - played when Assist is attempted, but the Wyoming satellite/client is not connected.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wi-Fi is disconnected&lt;/strong&gt; - played when Assist is attempted, but PineVoice is not connected to Wi-Fi.&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="wake-word-detection"&gt;
 Wake word detection
 &lt;a id="wake_word_detection" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;PineVoice uses &lt;a href="https://github.com/OHF-Voice/micro-wake-word" target="_blank"&gt;MicroWakeWord&lt;/a&gt; for local wake word detection.&lt;/p&gt;
&lt;p&gt;For now, PineVoice uses the &amp;ldquo;Hey Jarvis&amp;rdquo; model from the &lt;a href="https://github.com/esphome/micro-wake-word-models" target="_blank"&gt;ESPHome MicroWakeWord models&lt;/a&gt; project. The wake word generally works well, but recognition may vary depending on the speaker&amp;rsquo;s voice, pronunciation, distance from the device, and background noise.&lt;/p&gt;


&lt;div class="admonition admonition-note"&gt;
 &lt;div class="admonition-header"&gt;Note&lt;/div&gt;
 &lt;div class="admonition-text"&gt;
 Future firmware updates are expected to add support for using 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.
 &lt;/div&gt;
&lt;/div&gt;



&lt;h2 id="source-code"&gt;
 Source code
 &lt;a id="source_code" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;You can find source code of this firmware (PineVoice SmartSpeaker SDK) on &lt;a href="https://codeberg.org/pine64/pinevoice_smartspeaker_sdk" target="_blank"&gt;Codeberg&lt;/a&gt; and &lt;a href="https://github.com/pine64/pinevoice_smartspeaker_sdk" target="_blank"&gt;Github&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Specifications</title><link>https://pine64.org/documentation/PineVoice/Specifications/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pine64.org/documentation/PineVoice/Specifications/</guid><description>&lt;p&gt;The &lt;strong&gt;PineVoice&lt;/strong&gt; is a compact 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.&lt;/p&gt;



&lt;h2 id="soc-and-memory"&gt;
 SoC and memory
 &lt;a id="soc_and_memory" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;PineVoice is based on the &lt;a href="https://bouffalolab.com/product/?type=detail&amp;amp;id=16" target="_blank"&gt;Bouffalo Lab BL606P&lt;/a&gt;.&lt;/p&gt;



&lt;h3 id="cpu-architecture"&gt;
 CPU architecture
 &lt;a id="cpu_architecture" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;T-Head C906 480 MHz 64-bit RISC-V CPU:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supports RISC-V RV64IMAFCV instruction architecture&lt;/li&gt;
&lt;li&gt;Five-stage single-issue sequentially executed pipeline&lt;/li&gt;
&lt;li&gt;Level-1 instruction and data cache of Harvard architecture, with a size of 32 KiB and a cache line of 64 bytes&lt;/li&gt;
&lt;li&gt;Sv39 memory management unit&lt;/li&gt;
&lt;li&gt;Supports AXI 4.0 128-bit master interface&lt;/li&gt;
&lt;li&gt;Supports core local interrupt (CLINT) and platform-level interrupt controller (PLIC)&lt;/li&gt;
&lt;li&gt;Compatible with RISC-V PMP&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;T-Head E907 320 MHz 32-bit RISC-V CPU:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Supports RISC-V RV32IMAFCP instruction set&lt;/li&gt;
&lt;li&gt;Supports RISC-V 32-bit and 16-bit mixed instruction set&lt;/li&gt;
&lt;li&gt;Supports RISC-V machine mode and user mode&lt;/li&gt;
&lt;li&gt;Integer and floating-point pipelines&lt;/li&gt;
&lt;li&gt;Supports AXI 4.0 main device interface and AHB 5.0 peripheral interface&lt;/li&gt;
&lt;li&gt;32 KiB instruction cache&lt;/li&gt;
&lt;li&gt;16 KiB data cache&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;T-Head E902 150 MHz 32-bit RISC-V CPU&lt;/p&gt;



&lt;h3 id="memory-and-storage"&gt;
 Memory and storage
 &lt;a id="memory_and_storage" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;32 MiB pSRAM&lt;/li&gt;
&lt;li&gt;788 KiB SRAM&lt;/li&gt;
&lt;li&gt;16 MiB flash storage&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="hardware-features"&gt;
 Hardware features
 &lt;a id="hardware_features" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;


&lt;h3 id="wireless"&gt;
 Wireless
 &lt;a id="wireless" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Wi-Fi 802.11 b/g/n&lt;/li&gt;
&lt;li&gt;Bluetooth 5.2 Dual-mode (BT+BLE)&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 id="audio"&gt;
 Audio
 &lt;a id="audio" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;Built-in speaker (tuned for voice applications)&lt;/li&gt;
&lt;li&gt;Dual microphone array&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 id="controls-and-indicators"&gt;
 Controls and indicators
 &lt;a id="controls_and_indicators" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;figure&gt;&lt;img src="https://pine64.org/documentation/PineVoice/images/pinevoice-top-view-labels.png"
 alt="PineVoice buttons view" width="600"&gt;&lt;figcaption&gt;
 &lt;p&gt;PineVoice buttons view&lt;/p&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;ul&gt;
&lt;li&gt;Button controls&lt;/li&gt;
&lt;li&gt;Center LED ring and button&lt;/li&gt;
&lt;li&gt;Hardware mute button&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See &lt;a href="https://pine64.org/documentation/PineVoice/Software/"&gt;Software&lt;/a&gt; for the current factory firmware button behavior and LED status colors.&lt;/p&gt;



&lt;h3 id="power-and-connectivity"&gt;
 Power and connectivity
 &lt;a id="power_and_connectivity" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;USB-C power input and data channel
&lt;ul&gt;
&lt;li&gt;Debug UART is exposed on unused USB-C pins&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;



&lt;h3 id="package-contents"&gt;
 Package contents
 &lt;a id="package_contents" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;ul&gt;
&lt;li&gt;USB-A to USB-C power cable&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="board-information-schematics-and-certifications"&gt;
 Board information, schematics and certifications
 &lt;a id="board_information_schematics_and_certifications" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Module dimensions:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;65 mm x 65 mm x 66 mm&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Production version schematics:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/PineVoice/PineVoice%20Main%20Board%20Schematics-20260311.PDF" target="_blank"&gt;PineVoice MainBoard Schematic with component placement 20260311&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/PineVoice/PineVoice%20Bottom%20Board%20Schematics-20250921.PDF" target="_blank"&gt;PineVoice Bottom Board Schematic 20250921&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Certifications:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/cert/MTi260330019-0103E1C-Verification%20of%20Conformity.pdf" target="_blank"&gt;PineVoice CE Certificate&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/cert/PineVoice%20Certificate%20LCSA070722057E.pdf" target="_blank"&gt;PineVoice FCC Certificate&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;



&lt;h2 id="datasheets"&gt;
 Datasheets
 &lt;a id="datasheets" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Bouffalo BL606P SoC information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/datasheet/pinevoice/BL606P_DS_en_1.2.pdf" target="_blank"&gt;Bouffalo Lab BL606P SoC Datasheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/bouffalolab/bl_docs/main/BL808_RM/en/BL808_RM_en_1.3.pdf" target="_blank"&gt;Bouffalo Lab BL606P SoC Reference Manual&lt;/a&gt; (BL808 RM applies to BL606P as well)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/datasheet/pinevoice/BL606P_Product_Brief_v1.0.pdf" target="_blank"&gt;Bouffalo Lab BL606P SoC Product Brief&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SPI NOR flash information:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://files.pine64.org/doc/datasheet/star64/gd25lq128e_rev1.0_20210513.pdf" target="_blank"&gt;GigaDevice 128 Mb XSPI-Flash Datasheet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://wiki.pine64.org/images/5/5d/W25Q128JW_RevB_11042019-1761358.pdf" target="_blank"&gt;Winbond 128 Mb QSPI-Flash Datasheet&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>WiFi Setup</title><link>https://pine64.org/documentation/PineVoice/WiFi_Setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://pine64.org/documentation/PineVoice/WiFi_Setup/</guid><description>&lt;p&gt;PineVoice implements open-source WiFi Provisioning protocol &lt;a href="https://www.improv-wifi.com/" target="_blank"&gt;Improv&lt;/a&gt;. Any application supporting this protocol is capable of setting up WiFi on the PineVoice.&lt;/p&gt;



&lt;h2 id="entering-provisioning-mode"&gt;
 Entering Provisioning Mode
 &lt;a id="entering_provisioning_mode" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;On first boot, the speaker automatically enters Wi-Fi provisioning mode. While in this mode, the ring LED blinks yellow.&lt;/p&gt;
&lt;p&gt;If the ring LED is not blinking yellow, the speaker is not in provisioning mode. Perform a factory reset to return it to provisioning mode, by holding • dot button for 15 seconds. After releasing the button, PineVoice should restart and launch Provisioning Mode.&lt;/p&gt;



&lt;h2 id="provisioning"&gt;
 Provisioning
 &lt;a id="provisioning" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h2&gt;&lt;p&gt;Once the speaker is in provisioning mode (ring LED blinking yellow), use one of the following methods to send the Wi-Fi credentials:&lt;/p&gt;



&lt;h3 id="through-web"&gt;
 Through Web
 &lt;a id="through_web" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;

&lt;div class="admonition admonition-info"&gt;
 &lt;div class="admonition-header"&gt;Info&lt;/div&gt;
 &lt;div class="admonition-text"&gt;
 Web Provisioning requires browser with Web Bluetooth API support. Please refer &lt;a href="https://caniuse.com/web-bluetooth" target="_blank"&gt;this table&lt;/a&gt; if your browser is supported.
 &lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Open this website on your PC or phone, which have Bluetooth 4.0 (Low Energy) connectivity and then press following button:&lt;/p&gt;
&lt;script
 type="module"
 src="https://www.improv-wifi.com/sdk-ble-js/launch-button.js"
&gt;&lt;/script&gt;

&lt;improv-wifi-launch-button&gt;&lt;/improv-wifi-launch-button&gt;



&lt;h4 id="alternative-web-provisioning"&gt;
 Alternative web provisioning
 &lt;a id="alternative_web_provisioning" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h4&gt;&lt;p&gt;If button on this website does not work, try it on &lt;a href="https://www.improv-wifi.com/" target="_blank"&gt;Improv website&lt;/a&gt;.&lt;/p&gt;



&lt;h3 id="through-home-assistant"&gt;
 Through Home Assistant
 &lt;a id="through_home_assistant" class="extra-anchor"&gt;&lt;/a&gt;
&lt;/h3&gt;&lt;p&gt;Home Assistants supports &lt;a href="https://www.home-assistant.io/integrations/improv_ble/" target="_blank"&gt;Improv via BLE&lt;/a&gt;. This feature must be set up properly to be functional. Please, follow &lt;a href="https://www.home-assistant.io/integrations/bluetooth" target="_blank"&gt;this&lt;/a&gt; instructions on Home Assistant website.&lt;/p&gt;
&lt;p&gt;This card should pop up automatically in your Home Assistant on Devices page:&lt;/p&gt;
&lt;figure&gt;&lt;img src="https://pine64.org/documentation/PineVoice/images/improv-card.png"
 alt="Improv Card in Home Assistant" width="400"&gt;&lt;figcaption&gt;
 &lt;p&gt;Improv Card in Home Assistant&lt;/p&gt;
 &lt;/figcaption&gt;
&lt;/figure&gt;

&lt;hr&gt;
&lt;p&gt;After successful provisioning, please continue to &lt;a href="https://pine64.org/documentation/PineVoice/Assistance_Setup/"&gt;Assistance Setup&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>