当前位置: 首页 > news >正文

基于NodeMCU与IFTTT的Google Assistant语音控制智能开关实现

1. 项目概述与核心价值

想不想在沙发上喊一嗓子“Hey Google,开灯”,客厅的吊灯就应声而亮?或者睡前懒得下床,一句“关掉卧室风扇”就能搞定?这个想法听起来很未来,但实现起来,你手边可能只需要一块几十块钱的NodeMCU开发板和一些基础电子元件。今天要聊的,就是一个把Google Assistant语音助手、IFTTT自动化平台和NodeMCU物联网模块“攒”在一起,打造一个完全由你声音控制的智能开关项目。这不仅仅是点亮一盏灯,它代表了一种典型的物联网(IoT)架构思路:语音触发云端服务,云端通过互联网下发指令,最终由本地嵌入式设备执行动作。掌握了这套流程,你就能举一反三,控制风扇、空调、窗帘,甚至是你自己DIY的任何电器。

这个项目的核心价值在于它的高实用性和低门槛。它避开了需要自建复杂服务器或深度编程的坑,巧妙地利用了现成的、免费的云服务(IFTTT和Google Assistant)作为“中间人”,让我们可以专注于硬件连接和逻辑控制。对于物联网入门者、智能家居爱好者,或者只是想给生活添点自动化乐趣的朋友来说,这是一个绝佳的练手项目。整个过程你会接触到硬件接线、Arduino编程、移动端App配置、云端服务联动,算是一次微型的全栈物联网开发体验。

2. 核心组件选型与原理剖析

2.1 硬件核心:为什么是NodeMCU?

在这个项目中,NodeMCU扮演着“智能大脑”和“网络接口”的双重角色。它本质上是一块基于ESP8266芯片的开发板。选择它,而非更基础的Arduino Uno,主要基于三点考量:

  1. 内置Wi-Fi:ESP8266集成了完整的TCP/IP协议栈和Wi-Fi功能,这意味着它天生就能连接你家路由器,直接与互联网对话。如果使用Arduino Uno,你还需要额外购买并配置一个Wi-Fi扩展模块(如ESP-01),增加了复杂性和成本。
  2. 性能与性价比:NodeMCU拥有比传统AVR单片机(如Arduino Uno用的ATmega328p)更强大的处理能力和更多的内存,能够轻松处理网络通信和逻辑控制任务。其价格却非常亲民,堪称“性价比之王”。
  3. 丰富的社区与库支持:围绕ESP8266/NodeMCU的Arduino核心库和第三方库(如本项目用到的Blynk库)生态非常成熟,遇到问题几乎都能找到解决方案,极大降低了开发难度。

核心工作原理:NodeMCU在上电后,会运行我们烧录进去的程序。这个程序的核心任务就是持续连接指定的Wi-Fi网络,并保持与Blynk云服务器的“长连接”。它就像一个时刻在线、等待命令的哨兵。

2.2 云端桥梁:IFTTT与Webhooks的工作机制

IFTTT是这个项目的“调度中心”。它的核心逻辑“If This Then That”完美诠释了自动化:如果“这件事”发生,那么就执行“那件事”

  • This(触发器):在我们的项目里,“This”就是你对Google Assistant说出的特定语音指令,例如“打开台灯”。Google Assistant服务在识别到这句指令后,会触发IFTTT中我们设置好的Applet。
  • That(动作):触发之后要执行的“That”,我们选择了“Webhooks”服务。Webhooks可以理解为一个简单的HTTP请求发送器。当Applet被触发时,IFTTT会代表我们,向一个指定的URL地址发送一个HTTP请求。

关键的一步:这个指定的URL,就是通向我们设备的关键。它指向了Blynk的云服务器,并携带了我们的设备授权令牌(Auth Token)和要控制的引脚状态(如/update/D0?value=1)。Blynk服务器收到这个请求后,会通过已经建立的长连接,将“把D0引脚设为高电平”这个指令瞬间推送到我们的NodeMCU上。

注意:这里存在一个常见的理解误区。指令的流向是:你的语音 -> Google Assistant -> IFTTT -> Blynk云 -> NodeMCU。NodeMCU并不直接接收来自IFTTT或Google的请求,它只与Blynk云通信。这种架构的好处是,即使你的手机不在身边,只要NodeMCU联网,云端指令依然能送达。

2.3 设备管理平台:Blynk App的角色

Blynk在这里扮演了“设备管理面板”和“通信中介”的角色。它主要由两部分构成:

  1. Blynk App(移动端):用于创建项目界面(如添加开关按钮)、配置设备(选择NodeMCU)、获取唯一的Auth Token。它提供了一个可视化且友好的方式与硬件交互。
  2. Blynk Cloud(服务器端):负责在App和你的NodeMCU硬件之间同步数据和指令。你按下App里的按钮,状态变化先到Blynk云,再下发到设备;反之,设备的状态也能通过云反馈到App上显示。

使用Blynk的优势在于,它为我们省去了自己搭建MQTT服务器或Web服务器的麻烦,提供了开箱即用的设备-云-手机通信框架。

2.4 执行末端:继电器模块与强电隔离

NodeMCU的GPIO引脚只能输出3.3V的直流低压信号,驱动一个LED没问题,但绝对不能直接连接220V的家用交流电,那是极其危险的,会烧毁设备并可能引发安全事故。

因此,继电器模块是强弱电隔离的关键安全组件。其工作原理是:

  • 控制端(低压):连接NodeMCU的GPIO引脚。当引脚输出高电平(3.3V)时,继电器内部的线圈通电,产生磁场。
  • 被控端(高压):继电器内部有一个机械开关(或固态开关)。在磁场作用下,开关吸合,从而接通连接在继电器输出端子的220V电路,使得插座通电,电器工作。

我们通常选用5V供电的继电器模块,因为它内部有光耦和晶体管驱动电路,可以用3.3V的NodeMCU信号可靠地控制5V的继电器线圈,实现了完美的电平转换和电气隔离。

3. 硬件准备与电路连接详解

3.1 物料清单与安全须知

核心组件清单:

  • NodeMCU ESP8266 开发板 x1
  • 5V 单路继电器模块 x1
  • HLK-PM01 或类似 AC-DC 电源模块(220V转5V)x1 – 用于给NodeMCU和继电器稳定供电。
  • 86型或118型墙壁插座面板 x1 – 作为项目的最终外壳。
  • 公母插头电源线 x1 – 用于连接墙壁插座和我们的电路。
  • 导线、螺丝钉、绝缘胶带 若干。

工具准备:

  • 电烙铁与焊锡
  • 螺丝刀套装
  • 万用表 –强烈建议备有,用于通电前检查线路是否短路。
  • 剥线钳
  • 热熔胶枪(用于内部固定)

安全警告(务必逐条阅读):

  1. 断电操作:任何涉及220V市电连接的步骤,必须在完全断开电源(拔掉插头)的情况下进行。连接完毕后,检查再三,才能通电测试。
  2. 绝缘处理:所有220V电压的接线点,必须用绝缘胶带包裹严实,确保不会相互触碰或接触到金属外壳。
  3. 模块选择:确保AC-DC电源模块(如HLK-PM01)和继电器模块的负载能力(电流、电压)符合你所要控制电器的功率。控制普通台灯、风扇没问题,但控制空调、热水器等大功率电器需选用更大规格的继电器和电源。
  4. 外壳防护:完成后的电路必须装入绝缘良好的塑料外壳(如改造的插座面板)内,防止误触。

3.2 电路原理与接线步骤

整个系统的供电与控制逻辑如下:

  1. 220V市电输入->AC-DC电源模块-> 输出5V直流电
  2. 5V直流电同时为NodeMCU(通过VIN引脚)和继电器模块(通过JD-VCC和GND)供电。
  3. NodeMCU的数字引脚(如D1)输出控制信号(高/低电平)到继电器模块的输入引脚(IN)。
  4. 继电器模块的常开(NO)触点串联到220V输出回路中,控制最终插座的通断。

具体接线步骤:

  1. 准备电源部分

    • 将一根220V电源线的火线(L)和零线(N)接入HLK-PM01电源模块的交流输入端子。
    • 将电源模块的直流输出正极(+5V)连接到NodeMCU的VIN引脚和继电器模块的JD-VCC引脚。
    • 将电源模块的直流输出负极(GND)连接到NodeMCU的GND引脚和继电器模块的GND引脚。确保所有GND共地,这是电路正常工作的基础。
  2. 连接控制信号

    • 选择NodeMCU的一个数字引脚作为控制引脚,例如D1(对应GPIO5)。
    • 用一根导线将NodeMCU的D1引脚连接到继电器模块的IN(或SIG)信号输入引脚。
  3. 连接强电部分(最需谨慎)

    • 将220V输入电源线的火线(L)先接入继电器模块的公共端(COM)端子。
    • 从继电器模块的常开端子(NO)引出一根线,连接到最终输出插座(或插座面板)的火线接口
    • 将220V输入电源线的零线(N)直接连接到输出插座的零线接口
    • (如果插座有地线)将输入电源线的地线(PE)直接连接到输出插座的地线接口

接线核对表:

连接点 A连接点 B线材/说明注意事项
市电火线 (L)HLK-PM01 AC-L导线确保断电操作
市电零线 (N)HLK-PM01 AC-N导线确保断电操作
HLK-PM01 +5VNodeMCU VIN导线供电正极
HLK-PM01 +5V继电器 JD-VCC导线继电器供电
HLK-PM01 GNDNodeMCU GND导线共地
HLK-PM01 GND继电器 GND导线共地
NodeMCU D1继电器 IN导线控制信号
继电器 COM输出插座火线孔导线控制火线,非零线
HLK-PM01 AC-N (同输入零线)输出插座零线孔导线零线直通
市电地线 (PE)输出插座地线孔导线地线直通,保障安全

实操心得:在将电路板装入插座面板前,建议先在一个开放的环境(如面包板或洞洞板)上完成所有低压部分(5V和信号)的连接与测试。确认NodeMCU能联网、继电器能受控“咔哒”动作后,再最后连接220V部分。这样可以分阶段排查问题,更安全。

4. 软件环境配置与编程

4.1 Arduino IDE环境搭建

  1. 安装Arduino IDE:从官网下载并安装最新版Arduino IDE。
  2. 添加ESP8266开发板支持
    • 打开IDE,进入文件 -> 首选项。在“附加开发板管理器网址”中,填入:http://arduino.esp8266.com/stable/package_esp8266com_index.json
    • 点击“确定”后,进入工具 -> 开发板 -> 开发板管理器
    • 搜索“esp8266”,找到并安装“esp8266 by ESP8266 Community”平台。安装过程可能需要一些时间。
  3. 安装Blynk库
    • 进入项目 -> 加载库 -> 管理库
    • 搜索“Blynk”,找到并安装“Blynk”库,作者是Volodymyr Shymanskyy。

4.2 Blynk App项目创建与配置

  1. 下载与注册:在手机应用商店搜索“Blynk IoT”并安装。使用邮箱注册一个新账号。
  2. 创建新项目
    • 打开App,点击“New Project”。
    • 给项目起个名字,例如“Voice Light Switch”。
    • 在“Choose Device”中选择“ESP8266”(NodeMCU)。
    • 连接类型选择“Wi-Fi”。
    • 点击“Create”。系统会自动生成一个Auth Token,并发送到你的注册邮箱。这个Token是你的设备在Blynk云上的唯一身份证,务必复制保存好
  3. 添加控制控件
    • 在项目空白处点击,打开“Widget Box”。
    • 添加一个“Button”控件。
    • 点击刚添加的按钮进行设置。将模式从“PUSH”改为“SWITCH”。
    • 在“OUTPUT”选项下,选择虚拟引脚(Virtual Pin),例如V0。这意味着这个按钮将控制虚拟引脚V0的状态。
    • 你可以根据需要设置按钮开/关时显示的标签,如“ON”和“OFF”。
  4. 运行项目:点击右上角的“Play”三角按钮,项目进入运行模式。此时界面上的开关应该可以操作,但还无法控制硬件,因为我们的NodeMCU程序还没写。

4.3 NodeMCU程序编写与上传

以下是完整的Arduino代码,并附有详细注释:

// 定义Blynk的模板ID、设备名称和认证令牌 #define BLYNK_TEMPLATE_ID "TMPLxxxxxx" // 如果Blynk App要求,在此处填写 #define BLYNK_TEMPLATE_NAME "Voice Switch" #define BLYNK_AUTH_TOKEN "你的Auth Token" // !!!重要:替换成你从邮箱收到的Token // 引入必要的库 #include <ESP8266WiFi.h> #include <BlynkSimpleEsp8266.h> // 你的Wi-Fi网络凭证 char ssid[] = "你的Wi-Fi名称"; char pass[] = "你的Wi-Fi密码"; // 定义控制继电器所用的引脚(D1对应GPIO5) const int relayPin = 5; // NodeMCU上D1引脚 // Blynk虚拟引脚V0的写入处理函数 // 当App上的开关或云端通过Webhooks改变V0的值时,此函数被调用 BLYNK_WRITE(V0) { int pinValue = param.asInt(); // 获取从云端传来的值,0或1 digitalWrite(relayPin, pinValue); // 用这个值控制继电器引脚 // 可选:将状态同步回App的某个显示控件 Blynk.virtualWrite(V1, pinValue ? "已开启" : "已关闭"); } void setup() { // 初始化串口,用于调试输出 Serial.begin(115200); // 设置继电器控制引脚为输出模式,并初始化为低电平(关闭) pinMode(relayPin, OUTPUT); digitalWrite(relayPin, LOW); // 连接Wi-Fi和Blynk云 Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass); // 你也可以指定Blynk服务器(可选,通常不需要) // Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass, "blynk.cloud", 8080); Serial.println("正在连接Blynk..."); } void loop() { // 必须持续运行Blynk,以处理网络通信和事件 Blynk.run(); }

上传代码步骤:

  1. 用USB线连接NodeMCU和电脑。
  2. 在Arduino IDE中,工具 -> 开发板选择 “NodeMCU 1.0 (ESP-12E Module)”。
  3. 工具 -> 端口选择正确的COM口(在Windows设备管理器中可查看)。
  4. 将代码中的ssid,pass,BLYNK_AUTH_TOKEN替换成你自己的信息。
  5. 点击上传按钮。上传成功后,NodeMCU会自动重启。
  6. 打开串口监视器(波特率115200),查看连接状态。看到Connected to Blynk Cloud或类似的提示,即表示成功。

此时,你应该可以在Blynk App里点击开关,听到继电器“咔哒”的吸合与释放声。这表明从手机App到NodeMCU再到继电器的整个控制链路已经打通。

5. IFTTT与Google Assistant联动配置

这是实现语音控制的关键一步,我们将创建两个Applet,分别对应“开”和“关”。

5.1 创建“打开”设备的Applet

  1. 登录IFTTT:访问 ifttt.com ,使用你的Google账号登录。
  2. 创建新Applet:点击右上角头像,选择“Create”。点击“If This”。
  3. 选择触发器服务:在搜索框输入“Google Assistant”,选择它并完成授权连接。
  4. 设置触发器
    • 选择触发器类型“Say a simple phrase”。
    • 在“What do you want to say?”中,填写触发短语,例如:“turn on the living room light”。
    • 在“What do you want the Assistant to say in response?”中,填写助理的回应,例如:“Okay, turning on the light.”。这会让交互更有反馈感。
    • 其他两个可选短语可以填写近义词,如“switch on the light”, “light on”。
    • 点击“Create trigger”。
  5. 设置动作:点击“Then That”。在搜索框输入“Webhooks”,选择它并连接。
  6. 配置Web请求
    • 选择动作“Make a web request”。
    • URL字段:这是核心。格式为:https://blynk.cloud/external/api/update?token=你的Auth Token&V0=1
      • 你的Auth Token替换为之前Blynk发给你的那串字符。
      • V0对应我们代码中监听的虚拟引脚。
      • =1表示将V0的值设置为1(高电平)。
    • Method:选择GET
    • Content Type:选择application/json
    • Body:对于GET请求,Body通常留空。但Blynk的接口也接受JSON格式的Body,另一种写法是:在Body里填写["1"],同时URL中只保留.../update/V0为了简单可靠,建议使用第一种URL带参数的方式
  7. 完成:点击“Create action”,然后点击“Finish”完成Applet创建。

5.2 创建“关闭”设备的Applet

重复步骤5.1,但在第4步,触发短语设为“turn off the living room light”,回应设为“Okay, turning off the light.”。在第6步,URL中的值改为&V0=0

5.3 测试语音控制

  1. 确保你的手机(已登录相同Google账号)或Google Nest音箱在同一个Wi-Fi网络下。
  2. 对设备说:“Hey Google, turn on the living room light.”
  3. 你应该能听到Google Assistant的确认回复,并立刻听到继电器吸合的声音,同时Blynk App里的开关状态也会同步变为开启。

注意事项:IFTTT的免费版Applet触发可能会有几秒钟的延迟,这是正常现象。付费版(IFTTT Pro)通常响应更快。此外,确保你的Google Assistant语言设置支持你设定的英文短语。

6. 系统集成测试与故障排查

6.1 完整功能测试流程

按照以下顺序进行系统测试,可以分层定位问题:

  1. 硬件基础测试:上传一个简单的Blink程序到NodeMCU,确保其本身工作正常。单独给继电器模块高低电平,测试其开关动作是否正常。
  2. Blynk本地控制测试:完成第4步后,在Blynk App内操作开关,看是否能控制继电器。这是测试“NodeMCU - Blynk云 - 手机”链路。
  3. Webhooks手动触发测试:在浏览器地址栏直接输入你设置在IFTTT里的完整URL,例如https://blynk.cloud/external/api/update?token=你的Token&V0=1。回车后,观察继电器是否动作。这测试了“互联网 - Blynk云 - NodeMCU”链路,绕过了IFTTT和Google。
  4. IFTTT手动触发测试:在IFTTT的Webhooks服务页面,有“Test it”按钮。点击测试,看是否能触发继电器。这测试了IFTTT到Blynk的链路。
  5. 最终语音集成测试:进行第5.3步的语音测试。

6.2 常见问题与解决方案速查表

问题现象可能原因排查步骤与解决方案
NodeMCU无法连接Wi-Fi/Blynk1. Wi-Fi密码错误
2. 路由器屏蔽了新设备
3. 代码中Token或服务器地址错误
1. 检查串口监视器输出信息。
2. 确认SSID和密码正确,注意大小写。
3. 重启路由器,或将手机热点作为测试网络。
4. 核对Blynk Token,确保项目处于“运行”模式。
Blynk App能控制,但语音无效1. IFTTT Applet未激活
2. Webhooks URL错误
3. Google Assistant未识别短语
1. 登录IFTTT,检查Applet是否为“Active”状态。
2.重点:在浏览器中手动访问URL,确认能控制设备。
3. 检查URL中的Token和虚拟引脚号(V0)是否正确。
4. 对Google Assistant说话时,发音清晰,使用设定的完整短语。
继电器有响声但电器不工作1. 继电器触点未正确串联在火线上
2. 被控电器本身故障或开关未开
3. 继电器负载能力不足
1. 用万用表通断档,在继电器动作时测量输出端子是否导通。
2.确保控制的是火线回路,这是最常见的接线错误。
3. 直接给电器通电,检查电器是否正常。
4. 确认电器功率在继电器额定容量内(通常5A或10A)。
控制延迟非常大(>10秒)1. IFTTT免费版延迟
2. 网络连接质量差
3. Blynk服务器连接不稳定
1. 使用浏览器直接访问URL测试延迟,如果很快,则是IFTTT问题,考虑升级Pro或容忍延迟。
2. 检查NodeMCU的Wi-Fi信号强度。
3. 尝试在Blynk.begin中更换其他Blynk服务器区域。
语音控制偶尔失灵1. NodeMCU网络断连
2. IFTTT服务临时故障
3. Google Assistant识别错误
1. 在代码loop()中增加网络重连逻辑,如if (!Blynk.connected()) { Blynk.connect(); }
2. 检查Blynk App是否能看到设备在线。
3. 重新训练Google Assistant的语音模型。

6.3 进阶优化与扩展思路

当基础功能稳定后,可以考虑以下优化:

  • 状态反馈:在代码中,我们通过Blynk.virtualWrite(V1, ...)将状态写回了另一个虚拟引脚V1。你可以在Blynk App中添加一个“Labeled Value”控件,绑定到V1,这样App上就能实时显示“已开启/已关闭”的文字状态。
  • 本地控制冗余:除了语音和App,可以在墙上加一个实体开关,连接到NodeMCU的另一个引脚,实现本地物理控制。代码中需要读取开关状态,并与Blynk虚拟引脚状态同步,逻辑会稍复杂一些。
  • 多设备控制:复制本项目的框架,为不同的电器创建不同的Blynk虚拟引脚(V0, V1, V2...)和对应的IFTTT Applet(使用不同的触发短语和URL参数),即可用同一个Google Assistant控制多个设备。
  • 定时与自动化:利用Blynk App自带的定时器功能,或者IFTTT的其他触发器(如时间、天气、地理位置),可以实现更复杂的自动化场景,例如“日落时自动开灯”、“离家后关闭所有插座”。
  • 功耗与安全:对于长期插电的设备,可以考虑使用带有深睡眠模式的ESP模块,或使用物理开关完全切断强电部分供电。确保外壳密封良好,防止灰尘和虫蚁进入造成短路。

这个项目从构思到实现,最深的体会是“分而治之”的重要性。将复杂的物联网系统拆解为“语音输入-云端逻辑-设备执行”三个相对独立的模块,并利用成熟的第三方服务去填充中间环节,极大地降低了开发难度。遇到的坑大多集中在细节:Webhooks的URL格式、Blynk Token的粘贴错误、继电器的强弱电隔离接线。每解决一个问题,对整个系统的理解就加深一层。最后,当你用一句话控制一个物理设备时,那种连接数字世界与物理世界的成就感,正是物联网开发最吸引人的地方。

http://www.rkmt.cn/news/1458369.html

相关文章:

  • 计算机顶尖奖学金申请指南:从研究提案到职业规划
  • 别再只玩瘦AP了!用Cisco Fat AP在家搭建小型无线实验室(附Packet Tracer配置)
  • 保姆级教程:用JD-GUI和JAD反编译JimuReport 1.7.0源码并成功运行(附常见错误修复)
  • Transformers Pipeline:NLP 任务的全面指南
  • FX3U软元件实战笔记:如何用M8020标志位和高速计数器C235优化设备控制程序
  • WebSocket、HTTPS 与浏览器访问网页全过程
  • KeymouseGo:终极鼠标键盘自动化工具完全指南 - 快速解放你的双手!
  • 2026年天津代理记账公司选对=省心 荣天会计值得推荐 - 本地品牌推荐
  • 换SSD后装系统四条实操路径:克隆、PE离线、纯净安装与DISM迁移
  • 从Argparse到Click:我是如何用5个装饰器重构了团队的CLI工具(附代码对比)
  • 别再瞎调了!手把手教你用手机App和自制工具搞定卫星锅三大角度(附实测避坑)
  • 如何制作微信投票活动?云帆投票小程序搭建指南 - 投票小程序
  • AI模型开源许可证合规性解析与商用边界判定
  • 2025-2026年岗位外包公司推荐:五大企业评测短期项目冲刺注意事项口碑价格 - 品牌推荐
  • 保姆级教程:在QGC地面站二次开发中,如何从零开始构建一个飞行仪表盘(附源码解析)
  • 2026年6月职业学校推荐:十大排行专业评测就业市场选择指南价格 - 品牌推荐
  • 从“撒豆子”到“绑架营救”:用生活例子彻底搞懂AMCL粒子滤波
  • 实测对比:Houdini、QEMU、原生,谁才是Android跨架构运行效率之王?附p7zip详细跑分数据
  • 有序Logistic回归实战:用SPSSAU分析‘幸福度’影响因素,附完整数据与代码(可下载)
  • 别再只盯着Transformer了!聊聊被低估的CNN:BiTCN如何用‘膨胀卷积’搞定时间序列预测?
  • 保姆级教程:给Nginx 1.25.4装上VTS模块,再用Prometheus和Grafana实现监控大屏
  • 信号与系统期末救急:单边拉普拉斯变换这6个性质,背会就能拿分
  • GPT-5.5 Ultra工程化落地:从芯片编译到电力协同的端到端部署指南
  • AI与BI系统割裂之痛,深度解构3层融合架构与实时决策闭环构建法
  • Grok在AI女友应用中的真实技术定位与工程实践
  • ASP.NET Core 中的重定向(Redirect)深度解析
  • GPT-5.5是假消息?揭秘当前真实大模型演进路线与性能优化实践
  • 从对抗性流量到负载均衡:手把手解析Dragonfly拓扑中UGAL路由算法的实战配置与调优
  • 056、位置环与速度环的串级PID实现
  • 后端使用 AI 开发前端速成:第五期:Cursor 深度工作流与 Prompt 工程