You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
注册

基于Raspberry Pi与Google Home的智能家居灯光控制深度教程及经验咨询

嘿,我之前刚好折腾过一套几乎一模一样的Google Assistant控制灯光的系统,结合你的需求,给你唠唠从硬件到代码的完整落地细节,还有我踩过的坑,应该能帮你少走弯路~

整体方案架构

先理清楚核心流程:Google Assistant语音指令 → Dialogflow解析意图 → 树莓派后端接收请求 → 继电器通断控制灯光,你已经用过Dialogflow,那重点就放在硬件对接和后端实现上。

1. 硬件选型与安全接线

  • 核心控制设备:优先选Raspberry Pi 4(性价比拉满,GPIO接口足够,WiFi稳定);预算有限的话,Pi Zero W也能搞定,只要有WiFi就行。
  • 继电器模块:选带光耦隔离的5V单路/多路继电器(根据你要控制的灯数量选),划重点:树莓派GPIO输出是3.3V,光耦隔离能防止反向电流烧坏Pi,安全第一!
  • 接线步骤(务必断电操作!)
    • 继电器的VCC接Pi的5V引脚,GND接Pi的GND引脚;
    • 继电器的IN引脚接Pi的任意通用GPIO(比如GPIO17,记好这个引脚号后面代码要用);
    • 继电器的公共端(COM)接家里火线,常开端(NO)接灯的火线,灯的零线直接接家里零线(不懂电工的话建议找专业人士帮忙接)。

2. Dialogflow进阶配置(适配树莓派对接)

你已经熟悉Dialogflow,这里只讲关键的对接部分:

  • 创建Agent后,建立核心Intents:比如「打开客厅灯」「关闭卧室灯」,设置足够多的Training Phrases让Assistant能精准识别;
  • 开启Fulfillment里的Webhook,把树莓派的可访问地址(内网穿透地址或公网地址)填进去——注意Dialogflow只接受HTTPS请求,所以后面要处理SSL或内网穿透的问题。

3. 树莓派后端代码实现(Python Flask为例)

用Flask写一个轻量Web服务,接收Dialogflow的请求并控制GPIO:

  • 先安装依赖:sudo apt-get install python3-flask python3-rpi.gpio
  • 示例代码(保存为light_control.py):
from flask import Flask, request, jsonify
import RPi.GPIO as GPIO
import atexit

app = Flask(__name__)

# 配置GPIO参数
RELAY_PIN = 17
GPIO.setmode(GPIO.BCM)
GPIO.setup(RELAY_PIN, GPIO.OUT)
GPIO.output(RELAY_PIN, GPIO.HIGH)  # 初始状态:继电器断开(灯关闭)

# 程序退出时清理GPIO
def cleanup_gpio():
    GPIO.cleanup()
atexit.register(cleanup_gpio)

@app.route('/webhook', methods=['POST'])
def handle_webhook():
    req = request.get_json()
    intent_name = req['queryResult']['intent']['displayName']
    
    # 根据Intent执行对应操作
    if intent_name == "TurnOnLight":
        GPIO.output(RELAY_PIN, GPIO.LOW)  # 继电器吸合,开灯
        response = "好的,已经帮你打开灯光啦"
    elif intent_name == "TurnOffLight":
        GPIO.output(RELAY_PIN, GPIO.HIGH)  # 继电器断开,关灯
        response = "灯光已经关闭咯"
    else:
        response = "我不太明白你的意思哦,换个说法试试?"
    
    return jsonify({"fulfillmentText": response})

if __name__ == '__main__':
    # 测试阶段可以去掉ssl_context,正式用要配SSL证书
    app.run(host='0.0.0.0', port=5000, ssl_context=('cert.pem', 'key.pem'))
  • 测试:启动服务后,用Postman模拟Dialogflow的JSON请求发送到http://你的Pi地址:5000/webhook,看继电器是否正常动作。

4. 内网穿透与长期运行优化

  • 临时测试:用Ngrok做内网穿透,执行ngrok http 5000,它会生成一个临时HTTPS地址,直接填到Dialogflow的Webhook里就能用了;
  • 长期运行:推荐用FRP或花生壳配置固定域名+SSL证书,保证Google Assistant能稳定访问;
  • 开机自启:把Flask服务做成systemd服务,避免每次重启Pi都要手动启动:
    创建/etc/systemd/system/light-control.service文件,内容如下:
    [Unit]
    Description=Google Assistant Light Control Service
    After=network.target
    
    [Service]
    User=pi
    WorkingDirectory=/home/pi/light-control
    ExecStart=/usr/bin/python3 light_control.py
    Restart=always
    
    [Install]
    WantedBy=multi-user.target
    
    然后执行:sudo systemctl daemon-reloadsudo systemctl enable light-controlsudo systemctl start light-control

5. 我踩过的坑分享

  • GPIO引脚冲突:别用Pi默认带串口/其他功能的引脚,优先选GPIO17、27这类通用引脚;
  • 继电器供电问题:绝对别用3.3V给继电器供电,带不动!一定要接Pi的5V引脚;
  • Dialogflow超时:树莓派的响应要尽量快,代码里别加耗时操作,否则Assistant会提示「无法连接到设备」;
  • Google Home同步:配置完Dialogflow后,要在Google Home app里「添加设备」→「服务」找到你的Agent同步,不然语音指令找不到设备;
  • 安全问题:接线务必断电,继电器模块最好放在绝缘盒子里,避免短路。

内容的提问来源于stack exchange,提问作者Felix Kunz

火山引擎 最新活动