The Juxi KWS Wake-up Sound Card is a high-performance offline voice recognition module designed for embedded systems, robotics, and IoT applications. Featuring local processing without cloud dependency, it provides fast, reliable voice control with minimal latency, making it ideal for scenarios requiring fast response and data privacy.
Key Features
- ✅ 100% Offline Processing: All voice recognition runs locally on the module, no internet connection required, ensuring data privacy and low latency
- 🎤 High Recognition Accuracy: Supports both Chinese and English voice commands with >95% recognition accuracy in normal environments
- ⚡ Ultra-Low Latency: Response within 300ms after voice command input, providing real-time control experience
- 🔧 Highly Customizable: Support custom wake words and command phrases via official firmware configuration tool
- 🖥️ Multi-Platform Support: Compatible with Raspberry Pi, Jetson Nano, x86 PCs, and ROS/ROS2 robotic systems
- 🔌 Plug-and-Play: Standard USB HID interface, no additional hardware required for operation
- 🎛️ Integrated Audio Output: Built-in speaker driver for voice feedback responses
- 💡 Low Power Consumption: Average operating current < 50mA, suitable for battery-powered devices
Basic Functionality
Default Wake-up Words
The module comes pre-configured with factory default wake words:
- Chinese: "你好小犀", "小犀小犀", "钜犀"
- English: "Hello Xiaoxi", "Juxi Technology"
Supported Command Categories
The module supports up to 100 custom voice commands, including:
- Motion control: forward, backward, turn left, turn right, stop
- Light control: turn on/off lights, change light colors (red, green, blue, yellow)
- System control: sleep mode, wake up, return to origin position
- Actuator control: gripper open/close, motor speed adjustment
- Custom commands: Fully customizable command set for specific applications
Communication Protocol
The module uses a simple and reliable serial port protocol:
- Baud rate: 115200
- Data bits: 8
- Stop bits: 1
- Parity: None
- Frame format:
0xAA 0x55 [Command Type] [Command ID] 0xFB
Quick Start
Basic Serial Communication Example (Python)
Here's a minimal working example to read voice commands from the module:
#!/usr/bin/env python3
import serial
import time
# Configure serial port (adjust port name for your system)
# Windows: "COM3", "COM4", etc.
# Linux: "/dev/ttyUSB0", "/dev/ttyACM0", etc.
ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.01)
# Command mapping dictionary
COMMANDS = {
(0x00, 0x01): "Stop",
(0x00, 0x04): "Move forward",
(0x00, 0x05): "Move backward",
(0x00, 0x06): "Turn left",
(0x00, 0x07): "Turn right",
(0x00, 0x0A): "Turn off light",
(0x00, 0x0B): "Turn on red light",
(0x00, 0x0C): "Turn on green light",
(0x00, 0x0D): "Turn on blue light",
(0x00, 0x0E): "Turn on yellow light",
(0x00, 0x21): "Return to origin",
(0x00, 0x27): "Move up",
(0x00, 0x28): "Move down",
(0x00, 0x2B): "Grip close",
(0x00, 0x2C): "Grip open",
(0x00, 0x03): "System sleep"
}
WAKE_WORDS = {
0x01: "Hello Xiaoxi",
0x02: "Xiaoxi Xiaoxi",
0x03: "Juxi Technology"
}
def read_voice_command():
"""Read and parse voice command frames from serial port"""
if ser.in_waiting >= 5:
frame = ser.read(5)
# Verify frame header and footer
if frame[0] == 0xAA and frame[1] == 0x55 and frame[4] == 0xFB:
# Wake word detected
if frame[3] == 0x00:
return f"[WAKE] {WAKE_WORDS.get(frame[2], 'Unknown wake word')}"
# Command received
else:
cmd = COMMANDS.get((frame[2], frame[3]), f"Unknown command: {frame[2]}:{frame[3]}")
return f"[COMMAND] {cmd}"
return None
# Main execution loop
if __name__ == "__main__":
try:
print("KWS Wake-up Sound Card Test")
print("Listening for voice commands... (Press Ctrl+C to exit)")
print("-" * 50)
while True:
result = read_voice_command()
if result:
print(result)
time.sleep(0.01)
except KeyboardInterrupt:
ser.close()
print("\n" + "-" * 50)
print("Program terminated")
Usage Instructions
- Connect the KWS sound card to your device via USB port
- Install CH341 serial driver if needed (available at: https://www.wch.cn/downloads/CH341SER_EXE.html)
- Adjust the serial port name in the code to match your system
- Run the Python script
- Speak the wake word ("Hello Xiaoxi") to activate the module
- Speak your command within 5 seconds after the confirmation tone
- The module will recognize and output the command via serial port
Advanced Application: ROS2 Integration
The module seamlessly integrates with ROS2 (Robot Operating System 2) for robotic applications. Here's a simplified voice control node example:
#!/usr/bin/env python3
import rclpy
from rclpy.node import Node
from std_msgs.msg import String
import serial
class KWSVoiceControlNode(Node):
def __init__(self):
super().__init__('kws_voice_control_node')
# Create publisher for voice commands
self.cmd_publisher = self.create_publisher(String, '/kws/voice_command', 10)
# Initialize serial port
self.ser = serial.Serial('/dev/ttyUSB0', 115200, timeout=0.01)
# Create timer for serial reading
self.timer = self.create_timer(0.01, self.serial_read_callback)
self.get_logger().info("KWS Voice Control Node started successfully")
self.get_logger().info("Listening for wake words and commands...")
def serial_read_callback(self):
"""Read and process serial data"""
if self.ser.in_waiting >= 5:
frame = self.ser.read(5)
if frame[0] == 0xAA and frame[1] == 0x55 and frame[4] == 0xFB:
msg = String()
# Process wake event
if frame[3] == 0x00:
wake_word = {0x01: "hello_xiaoxi", 0x02: "xiaoxi_xiaoxi", 0x03: "juxi"}.get(frame[2], "unknown")
msg.data = f"wake:{wake_word}"
self.get_logger().info(f"Wake up detected: {wake_word}")
# Process command event
else:
cmd_data = f"{frame[2]}:{frame[3]}"
msg.data = f"command:{cmd_data}"
self.get_logger().info(f"Command received: {cmd_data}")
# Publish message
self.cmd_publisher.publish(msg)
def main(args=None):
rclpy.init(args=args)
node = KWSVoiceControlNode()
try:
rclpy.spin(node)
except KeyboardInterrupt:
node.get_logger().info("Node interrupted by user")
finally:
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
Typical Application Scenarios
- 🤖 Robotics: Voice control for mobile robots, robotic arms, UAVs, and service robots
- 🏠 Smart Home: Voice control for lighting systems, home appliances, curtain control, and security systems
- 🏭 Industrial Control: Hands-free operation for industrial equipment, production lines, and workshop control
- 🚗 Automotive: In-vehicle voice control systems for infotainment, climate control, and vehicle functions
- 🎮 IoT Devices: Voice interaction for smart speakers, smart displays, and other connected devices
- 🎓 Education & Research: Development platform for voice interaction projects and robotics research
Technical Specifications
| Parameter | Specification |
|---|---|
| Chipset | CI1302 High-performance Voice Recognition SoC |
| Recognition Distance | 0.5m ~ 5m (adjustable) |
| Response Time | < 300ms |
| Recognition Accuracy | > 95% (quiet environment, < 60dB background noise) |
| Supported Languages | Chinese, English (customizable for other languages) |
| Communication Interface | USB Serial (CDC-ACM), 115200 baud rate |
| Operating Voltage | 5V DC (USB powered) |
| Operating Current | < 50mA (active mode), < 10mA (idle mode) |
| Operating Temperature | -10°C ~ 60°C |
| Storage Temperature | -20°C ~ 85°C |
| Dimensions | 40mm x 30mm x 10mm |
| Audio Output | 1W speaker driver output |
| Microphone | Built-in high-sensitivity MEMS microphone |
Firmware Customization
The module supports fully customizable wake words and command sets:
- Visit the Qiying Tairen Voice AI Platform
- Create a new project with CI1302 chipset configuration
- Add your custom wake words and command phrases
- Configure response tones and broadcast content
- Compile and download the customized firmware
- Flash the firmware to the module using the official programming tool
Resources & Support
- JuxiTechnology github: Official open-source code, examples, and development resources
- Lark Wiki: Complete documentation, user guides, and technical support

