Series
Lập Trình Raspberry Pi & Ứng Dụng Thực Tế
  1. Series: Lập trình Raspberry Pi & Ứng dụng thực tế
  2. 1Voice Assistant offline tiếng Việt với Raspberry Pi – Bài 1: Tổng quan hệ thống điều khiển giọng nói offline
  3. 2Voice Assistant offline tiếng Việt với Raspberry Pi – Bài 2: Cài đặt micro và kiểm tra audio input
  4. 3Voice Assistant offline tiếng Việt với Raspberry Pi – Bài 3: Nhận diện lệnh tiếng Việt bằng Vosk với bộ từ vựng giới hạn
  5. 4Voice Assistant offline tiếng Việt với Raspberry Pi – Bài 4: Điều khiển đèn, quạt và thiết bị bằng giọng nói
  6. 5Voice Assistant offline tiếng Việt với Raspberry Pi – Bài 5: Gửi lệnh qua MQTT để điều khiển hệ thống IoT
  7. 6Hệ thống giám sát nhà thông minh mini với Raspberry Pi – Bài 1: Tổng quan hệ thống giám sát cửa và phát hiện chuyển động
  8. 7Hệ thống giám sát nhà thông minh mini với Raspberry Pi – Bài 2: Đấu nối cảm biến cửa từ và chuyển động PIR
  9. 8Hệ thống giám sát nhà thông minh mini với Raspberry Pi – Bài 3: Đọc trạng thái cửa và phát hiện chuyển động bằng Python
  10. 9Hệ thống giám sát nhà thông minh mini với Raspberry Pi – Bài 4: Xây dựng rule cảnh báo thông minh cho cửa và chuyển động
  11. 10Hệ thống giám sát nhà thông minh mini với Raspberry Pi – Bài 5: Gửi cảnh báo và đẩy event lên MQTT, dashboard
  12. 11Edge AI trên Pi 5: TensorFlow Lite, MediaPipe, YOLO
Kiến thức

Voice Assistant offline tiếng Việt với Raspberry Pi – Bài 4: Điều khiển đèn, quạt và thiết bị bằng giọng nói

Th4 2026
Voice Assistant offline tiếng Việt với Raspberry Pi – Bài 4: Điều khiển đèn, quạt và thiết bị bằng giọng nói

Ở bài trước, chúng ta đã:

  • nhận diện được giọng nói tiếng Việt bằng Vosk
  • chuyển câu nói thành command nội bộ (LIGHT_ON, FAN_OFF…)

Trong bài này, chúng ta sẽ làm bước quan trọng nhất:

Biến command thành hành động thực tế

Nói cách khác:

“bật đèn” → LIGHT_ON → GPIO → Đèn sáng 

1. Bạn sẽ làm được gì sau bài này

  • Điều khiển LED/relay bằng giọng nói
  • Kết nối command với GPIO
  • Tạo một hệ thống Voice Assistant mini chạy thật

2. Tổng quan hệ thống

Luồng xử lý hoàn chỉnh:

Micro → Vosk → Text → Command → GPIO → Device

Ví dụ:

“tắt quạt” → FAN_OFF → GPIO LOW → Relay OFF

3. Chuẩn bị phần cứng

Option 1: Demo đơn giản (LED)

  • Raspberry Pi
  • LED
  • Điện trở 220Ω
  • Breadboard + dây

Option 2: Thực tế hơn (Relay)

  • Module relay 1 kênh (5V)
  • Thiết bị: đèn / quạt / ổ cắm

⚠️ Lưu ý:

  • Raspberry Pi GPIO là 3.3V
  • Không cấp trực tiếp 220V vào Pi
  • Relay module cần loại có optocoupler (an toàn hơn)

4. Thực hiện

Sơ đồ kết nối

GPIO17 → Resistor → LED → GND

Bước 1: Cài thư viện GPIO

pip install RPi.GPIO

Bước 2: Code điều khiển GPIO

Tạo file:

control_device.py

Code cơ bản:

import RPi.GPIO as GPIO

LED_PIN = 17

GPIO.setmode(GPIO.BCM)
GPIO.setup(LED_PIN, GPIO.OUT)

def turn_on_led():
    GPIO.output(LED_PIN, GPIO.HIGH)
    print(" Đèn ON")

def turn_off_led():
    GPIO.output(LED_PIN, GPIO.LOW)
    print(" Đèn OFF")

Bước 3: Kết nối với command parser

Từ bài 23.3, bạn đã có:

def parse_command(text):
    if "bat den" in text:
        return "LIGHT_ON"
    elif "tat den" in text:
        return "LIGHT_OFF"

Bây giờ map sang action:

def execute_command(command):
    if command == "LIGHT_ON":
        turn_on_led()
    elif command == "LIGHT_OFF":
        turn_off_led()

Bước 4: Tích hợp vào voice recognition

Trong loop chính:

while True:
    data = q.get()

    if recognizer.AcceptWaveform(data):
        result = json.loads(recognizer.Result())
        text = normalize(result.get("text", ""))

        print("Bạn nói:", text)

        command = parse_command(text)

        if command:
            print(" Command:", command)
            execute_command(command)

5. Demo thực tế

Khi chạy:

Bạn nói: bat den
 Command: LIGHT_ON
 Đèn ON
Bạn nói: tat den
 Command: LIGHT_OFF
 Đèn OFF

Điều khiển relay (quạt, đèn thật)

Nếu dùng relay:

RELAY_PIN = 18

GPIO.setup(RELAY_PIN, GPIO.OUT)

def fan_on():
    GPIO.output(RELAY_PIN, GPIO.LOW)  # tùy module
    print(" Quạt ON")

def fan_off():
    GPIO.output(RELAY_PIN, GPIO.HIGH)
    print(" Quạt OFF")

Lưu ý:

  • Nhiều relay dùng LOW = ON
  • Test kỹ trước khi dùng thật

Mở rộng command

def parse_command(text):
    if "bat den" in text or "mo den" in text:
        return "LIGHT_ON"

    elif "tat den" in text:
        return "LIGHT_OFF"

    elif "bat quat" in text:
        return "FAN_ON"

    elif "tat quat" in text:
        return "FAN_OFF"

6. Gợi ý nâng cấp

Bạn có thể:

  • in log ra terminal
  • phát âm thanh phản hồi
  • hiển thị lên màn hình

Ví dụ:

print("Đã bật đèn")

7. Các lỗi thường gặp

❌ GPIO không hoạt động

  • sai pin (BCM vs BOARD)
  • chưa setmode

Fix:

GPIO.setmode(GPIO.BCM)

❌ Đèn không sáng

  • sai wiring
  • thiếu điện trở

❌ Relay hoạt động ngược

  • HIGH/LOW bị đảo

Test:

GPIO.output(pin, GPIO.LOW)

❌ Nhận diện đúng nhưng không chạy

  • command không match

debug:

print(command)

8. Tối ưu hệ thống

1. Tách module

  • voice.py
  • command.py
  • device.py

2. Tránh spam command

Thêm delay hoặc check trạng thái:

if current_state != new_state:

3. Log trạng thái

Lưu lại:

{
  "device": "light",
  "status": "on",
  "ts": 1712800000
}

Kết nối với bài tiếp theo

Hiện tại bạn đã có:

✅ Nhận diện giọng nói
✅ Map command
✅ Điều khiển thiết bị thật

Bước tiếp theo:

Gửi lệnh qua MQTT để điều khiển hệ thống IoT

Chúng ta sẽ:

  • không chỉ bật đèn local
  • mà điều khiển ESP32 / thiết bị khác qua MQTT

Kết luận

Đây là bước chuyển quan trọng nhất:

từ “nghe hiểu” → “hành động thật”

Bạn đã biến Raspberry Pi thành một Voice Assistant có thể điều khiển thiết bị ngoài đời thực, hoàn toàn offline.