基于ESP32与IFTTT的物联网智能捕鼠器邮件通知系统
1. 项目概述一个更“聪明”的捕鼠方案如果你和我一样既想人道地处理家里的“不速之客”——老鼠又不想每天像个强迫症一样去检查捕鼠笼那这个项目就是为你准备的。传统的活捉式捕鼠笼有个痛点你不知道它什么时候被触发。老鼠被困在里面如果长时间无人发现会面临脱水和饥饿的风险这完全违背了我们“人道”的初衷。而每天频繁检查又非常耗费精力。于是我动手做了一个成本极低、但非常实用的解决方案SqueakMail智能捕鼠器邮件通知系统。它的核心思路很简单给捕鼠笼装上一个“电子哨兵”。当笼门关闭、老鼠被捉住时这个“哨兵”能立刻感知到并通过家中的Wi-Fi网络自动给你的邮箱发送一封报警邮件。这样你就能在办公室、在卧室、甚至在外出差时第一时间知道“战果”及时去处理既保证了老鼠的福利也解放了你自己。整个系统的硬件核心是一块ESP32开发板它是一颗功能强大且极其廉价的物联网微控制器自带Wi-Fi功能。感知部件则是一个不到1美元的红外避障传感器用来检测笼门是否关闭。逻辑也很直接传感器被触发笼门关闭挡住红外线→ ESP32检测到信号变化→ ESP32通过Wi-Fi向IFTTT这个自动化云服务平台发送一个网络请求→ IFTTT按照我们预设的规则自动给我们指定的邮箱发送一封通知邮件。全部物料成本可以控制在3美元以内大部分花费其实就是那块ESP32板子。接下来我会详细拆解从思路设计、硬件选型、软件编程到实际安装调试的每一个步骤并分享我在这个过程中踩过的坑和总结的经验。无论你是物联网新手还是有一定基础的爱好者都能跟着这篇指南亲手搭建起这个实用的小系统。2. 核心思路与方案选型解析2.1 需求拆解与技术路径选择这个项目的根本需求是“状态变化的远程即时通知”。拆解开来需要解决三个子问题状态感知如何可靠地检测到捕鼠笼门从“打开”到“关闭”这一物理状态变化信息处理与发送如何将感知到的状态变化转化为可通过互联网传递的信号通知接收如何以最便捷、最通用的方式让用户收到这个信号针对这三个问题我评估了以下几种常见方案方案A蓝牙手机App。在捕鼠笼上安装蓝牙模块状态变化后向手机发送通知。优点是功耗可能较低。缺点非常明显通信距离短通常10米一旦你离开家就收不到通知需要手机端常驻一个后台App增加了复杂性。方案B蜂窝网络4G/5G模块。直接使用NB-IoT或4G Cat.1模块通过移动网络发送短信或数据。优点是覆盖广真正意义上的“任何地方”。缺点是硬件成本和后续流量费用较高不适合这种极低成本、固定位置的应用场景。方案CWi-Fi 云服务平台。这正是本项目采用的方案。利用家中无处不在的Wi-Fi网络将状态数据发送到云端再由云端服务转发通知。为什么最终选择方案CWi-Fi IFTTT成本与普及度的完美平衡ESP32这类Wi-Fi模组价格已降至冰点约2-3美元性能却非常强大。家庭Wi-Fi网络是现成的基础设施无需额外付费。开发门槛极低ESP32拥有极其完善的Arduino核心支持网络编程有现成的库几行代码就能实现HTTP请求。IFTTT提供了“Webhooks”服务只需一个简单的HTTP POST请求就能触发复杂的自动化流程无需自建服务器。用户端零配置通知最终通过邮件送达。邮件是互联网最基础、最通用的服务任何智能设备手机、电脑、手表都能即时收到用户无需安装任何特定应用。高可靠性只要ESP32能连上家中的Wi-Fi就能保证通知发出。IFTTT作为成熟的平台送达率很高。2.2 核心组件深度解析2.2.1 微控制器为什么是ESP32ESP32在这个项目中扮演“大脑”和“通信官”的角色。市面上常见的还有ESP8266它更便宜但为什么我更推荐ESP32性能冗余与未来扩展性ESP32是双核处理器主频更高内存更大。这意味着在完成联网、发送请求等主要任务时游刃有余。如果你未来想增加更多传感器比如温湿度传感器监测笼内环境、或本地处理更复杂的逻辑ESP32能轻松应对而ESP8266可能会捉襟见肘。更稳定的Wi-Fi连接ESP32的Wi-Fi驱动和射频性能通常更稳定在信号稍弱的角落其连接可靠性优于ESP8266。对于这种需要7x24小时稳定待机的监控设备连接稳定性至关重要。差不多的成本与开发体验目前ESP32开发板如ESP32-DevKitC的价格与ESP8266 NodeMCU开发板相差无几但带来了全方位的提升。两者都完美支持Arduino IDE开发流程几乎一样。注意如果你手头只有ESP8266它也完全能够胜任本项目的基本功能。代码几乎可以通用只需注意引脚定义和部分库函数的微小差异。2.2.2 传感器红外避障传感器的原理与局限本项目使用的关键传感器是红外避障传感器。它的工作原理是传感器上的红外发射管持续发射调制过的红外线。红外接收管负责接收。当传感器前方一定距离内通常2-30cm可调出现物体时红外线被反射回来被接收管收到。传感器上的比较器电路输出电平变化例如从高电平变为低电平。在这个项目中我们将传感器安装在笼门内侧。当笼门打开时传感器前方是空的输出一种状态比如高电平当笼门关闭时门板进入了传感器的检测范围输出状态翻转变为低电平ESP32由此判断“老鼠已入笼”。但是这种传感器有它的局限性这也是实操中最大的坑点对光敏感强烈的环境光特别是阳光尤其是含有红外成分的光源会干扰传感器的接收管导致误触发。这就是原项目作者提到“在直射阳光下会误报”的原因。对反射物敏感不同颜色、材质的物体对红外线的反射率不同。深色、吸光材质可能无法有效触发传感器。替代方案考量超声波传感器如HC-SR04通过测量超声波发射和回波的时间差来计算距离。几乎不受光线影响检测更可靠。但成本稍高代码稍复杂且需要两个IO口Trig和Echo。微型磁簧开关/霍尔传感器在笼门和笼体对应位置分别安装磁铁和传感器。当门关闭时磁铁靠近传感器触发。这是最可靠、最省电的机械式方案但需要精确的安装位置。轻触开关/限位开关直接利用笼门关闭时的机械压力触发一个物理开关。简单粗暴但需要设计安装结构且可能影响笼门正常开合。综合考虑成本、安装便利性和代码简易度红外传感器仍是入门首选但我们必须清楚它的局限并在安装时避开强光环境。2.2.3 云服务平台IFTTT的桥梁作用IFTTTIf This Then That是本项目的“通知中转站”。它不需要我们编写任何服务器端代码其工作模式是“触发器动作”。创建触发器This我们使用“Webhooks”服务。IFTTT会给我们一个唯一的URL地址就像一个专属的API接口。定义动作That我们选择“Email”服务并设置好邮件的标题、内容模板以及收件人。建立联系在IFTTT中创建一个“Applet”将“Webhooks”触发器与“Email”动作连接起来。之后ESP32只需要向那个专属URL发送一个HTTP POST请求IFTTT就会认为触发器被激活随即执行发送邮件的动作。整个过程我们只负责配置无需关心网络协议、邮件服务器等底层细节极大地简化了开发。3. 硬件准备与电路连接详解3.1 物料清单与选购建议以下是构建SqueakMail系统所需的全部硬件组件型号/规格数量预估成本选购要点与备注微控制器ESP32开发板如ESP32-DevKitC V41~$2.5 - $3.5建议选择带有USB-C接口和稳压电路的版本使用更方便。传感器红外避障传感器常见型号KY-032, E18-D80NK1~$0.5 - $1.5推荐选择检测距离可调带电位器的型号便于精确校准。捕鼠笼活捉式人道捕鼠笼1~$4 - $10确保笼顶有可用于固定的孔洞或栅格。连接线杜邦线母对母若干~$0.1用于连接ESP32和传感器。电源USB电源适配器 Micro-USB/USB-C线1套已有任何手机充电器均可输出5V1A或以上。外壳3D打印结构件1套~$0.5耗材用于固定ESP32和传感器。若无3D打印机可用厚双面胶、扎带等替代。选购深度解析ESP32开发板注意区分“开发板”和“模组”。开发板如DevKitC、NodeMCU-32S已将ESP32模组、USB转串口芯片、稳压电路、LED和按钮集成在一块PCB上开箱即用最适合初学者。直接购买模组需要自行设计外围电路不推荐。红外传感器优先选择3线制VCC, GND, OUT的模块输出为数字信号高/低电平与ESP32直接兼容。避免选择4线制增加AO模拟输出的除非你需要模拟量。注意工作电压常见有5V和3.3V两种我们的ESP32开发板既能提供5V也能提供3.3V输出通常两种电压的传感器模块都能驱动。捕鼠笼这是机械基础。务必确认你购买的笼子顶部有可供固定的位置。原设计利用了笼顶的预制孔。如果你的笼子没有孔可能需要使用强力胶、扎带或重新设计固定支架。3.2 电路连接原理与实操电路连接非常简单只有三根线。但在连接前我们必须理解每个引脚的作用这是避免烧毁设备的关键。红外避障传感器引脚说明VCC电源正极。模块通常宽电压设计3.3V-5V。为了获得最稳定的检测性能我建议连接到ESP32开发板的“5V”引脚。虽然ESP32芯片IO口是3.3V逻辑但其开发板上的“5V”引脚是从USB口直接引出的驱动能力更强。GND电源负极。必须与ESP32的GND相连形成共地。OUT数字信号输出。当检测到障碍物时输出低电平0V未检测到时输出高电平模块工作电压如5V或3.3V。这里有一个重要隐患如果传感器是5V供电其OUT脚高电平就是5V而ESP32的GPIO引脚最大耐受电压是3.3V直接连接会损坏ESP32解决方案分情况讨论情况一推荐传感器模块支持3.3V供电或者你确认其OUT脚输出电平与供电电压无关有些模块内部有稳压OUT脚恒为3.3V逻辑。此时可以将传感器VCC接ESP32的“3.3V”引脚OUT直接接ESP32的GPIO如GPIO12。情况二传感器为5V逻辑输出。绝对不能直接连接必须在传感器OUT脚和ESP32的GPIO之间加入一个“电平转换电路”。最简单的方法是使用一个电阻分压电路一个1kΩ电阻接在OUT脚与GPIO之间一个2kΩ电阻接在GPIO与GND之间。这样可以将5V分压至约3.3V。或者直接使用现成的电平转换模块。安全连接步骤断电操作确保ESP32未连接USB线。连接电源将传感器的GND线连接到ESP32开发板上任意一个GND引脚。连接信号线将传感器的OUT线连接到ESP32的GPIO 12引脚或其他你打算在代码中使用的数字引脚如GPIO14。连接电源正极如果你采用情况一将传感器VCC接ESP32的3.3V引脚。如果你采用情况二先将分压电路焊好或用面包板搭好再将传感器VCC接ESP32的5V引脚。复查对照下图或你的开发板引脚图仔细检查三根线是否连接正确特别是电源正负极不能接反。实操心得在不确定传感器输出逻辑电平的情况下最保险的做法是先用万用表测量。给传感器供电接5V在检测到障碍物和未检测到时分别测量OUT脚对GND的电压。如果高电平超过3.6V就必须使用电平转换。我最初就烧坏过一个ESP32的GPIO教训深刻。4. 软件配置与代码深度剖析4.1 IFTTT Webhooks服务配置指南IFTTT是我们无需编码的“云大脑”。配置步骤如下注册与登录访问 IFTTT官网 用邮箱注册并登录。创建Webhooks触发器点击右上角头像选择“Create”。点击“If This”在搜索框中输入“Webhooks”并选择它。选择触发事件“Receive a web request”。填写Event Name 例如“mouse_trap_triggered”。这个事件名称非常重要后续ESP32的代码里就要调用这个名字。记下它。点击“Create trigger”。配置邮件动作接着点击“Then That”搜索并选择“Email”服务。选择动作“Send me an email”。现在可以定制你的邮件内容了。IFTTT提供了丰富的变量这些变量可以通过ESP32在发送请求时传递过来。Subject邮件标题。例如Alert! Mouse Trap Triggered!Body邮件正文。你可以写得更详细例如SqueakMail Notification: The humane mouse trap has been triggered! - Trap armed at: {{OccurredAt}} - Mouse trapped for: {{Value1}} seconds. - Total trap runtime: {{Value2}} seconds. Please check the trap at your earliest convenience.这里的{{OccurredAt}}是IFTTT自动生成的时间戳。{{Value1}},{{Value2}},{{Value3}}是三个自定义字段我们可以从ESP32代码中传递数值或字符串过来。在这个项目中我们可以用Value1传递老鼠被困时长Value2传递捕鼠器本次布防的总时长。点击“Create action”然后“Finish”完成Applet的创建。获取Webhooks密钥再次进入 Webhooks服务页面 。点击右上角“Documentation”。页面会显示你的“URL”格式为https://maker.ifttt.com/trigger/{event}/with/key/{your_key}。其中{your_key}就是你的唯一API密钥{event}就是你刚才创建的事件名如mouse_trap_triggered。整个URL需要填入到后面的Arduino代码中。4.2 Arduino代码逐行解析与定制以下是完整的squeakmail.ino代码我将结合注释详细解释每一部分的作用和可定制点。// SqueakMail - ESP32 Smart Mouse Trap Notifier // 作者基于dakota-mewt项目深度优化 // 1. 网络与IFTTT配置区 - 必须修改 const char* ssid YOUR_WIFI_SSID; // 你的Wi-Fi名称 const char* password YOUR_WIFI_PASSWORD; // 你的Wi-Fi密码 const char* serverName https://maker.ifttt.com/trigger/mouse_trap_triggered/with/key/YOUR_IFTTT_KEY; // 你的IFTTT Webhooks URL // 2. 硬件引脚与参数配置区 - 根据实际情况调整 const int sensorPin 12; // 红外传感器OUT引脚连接的GPIO const int ledPin 2; // ESP32内置LED引脚通常为GPIO2 unsigned long timerDelay 30000; // 触发后重复发送邮件的时间间隔毫秒默认30秒 unsigned long trapArmedTime 0; // 记录捕鼠器布防开始的时间 unsigned long mouseTrappedTime 0;// 记录老鼠被捉住的时间 bool trapTriggered false; // 捕鼠器触发状态标志 bool lastSensorState HIGH; // 传感器上一次的状态假设初始为高电平即门开 // 引入必要的库 #include WiFi.h #include HTTPClient.h void setup() { Serial.begin(115200); // 启动串口调试便于查看信息 pinMode(sensorPin, INPUT_PULLUP); // 将传感器引脚设置为输入模式并启用内部上拉电阻 pinMode(ledPin, OUTPUT); // 内置LED引脚为输出 // 3. 启动视觉指示快速闪烁LED 3次 for(int i0; i3; i){ digitalWrite(ledPin, HIGH); delay(200); digitalWrite(ledPin, LOW); delay(200); } // 4. 连接Wi-Fi WiFi.begin(ssid, password); Serial.println(Connecting to WiFi...); while (WiFi.status() ! WL_CONNECTED) { delay(500); Serial.print(.); } Serial.println(\nConnected! IP address: ); Serial.println(WiFi.localIP()); // 5. 发送“系统启动”通知并记录布防时间 sendNotification(init, 0, 0); // 发送初始化邮件 trapArmedTime millis(); // 记录当前时间作为布防开始时刻 Serial.println(Trap armed and monitoring started.); } void loop() { // 6. 读取传感器当前状态 int currentSensorState digitalRead(sensorPin); // 读取数字引脚电平 // 7. 状态变化检测从高电平门开变为低电平门关 if (lastSensorState HIGH currentSensorState LOW) { // 检测到下降沿表示门被关上了 trapTriggered true; mouseTrappedTime millis(); // 记录老鼠被困的开始时间 Serial.println(!!! Trap Triggered - Door Closed !!!); // 立即发送第一次触发通知 sendNotification(triggered, 0, (millis() - trapArmedTime) / 1000); } // 8. 如果处于已触发状态则按设定间隔重复发送通知 if (trapTriggered) { unsigned long currentTime millis(); // 检查是否到达设定的发送间隔timerDelay static unsigned long lastTriggerNotification 0; // 静态变量保存上次发送时间 if (currentTime - lastTriggerNotification timerDelay) { unsigned long mouseTrappedDuration (currentTime - mouseTrappedTime) / 1000; // 老鼠被困时长秒 unsigned long totalTrapRuntime (currentTime - trapArmedTime) / 1000; // 总运行时长秒 sendNotification(update, mouseTrappedDuration, totalTrapRuntime); lastTriggerNotification currentTime; // 更新上次发送时间 } } // 9. 更新传感器状态用于下一次循环比较 lastSensorState currentSensorState; // 一个小延迟防止循环过快消耗CPU delay(100); } // 10. 核心函数发送HTTP请求到IFTTT void sendNotification(String eventType, unsigned long mouseDuration, unsigned long totalDuration) { // 首先检查Wi-Fi是否还连着 if (WiFi.status() ! WL_CONNECTED) { Serial.println(WiFi disconnected. Attempting to reconnect...); WiFi.reconnect(); delay(2000); // 等待重连 if (WiFi.status() ! WL_CONNECTED) { Serial.println(Reconnection failed. Notification not sent.); return; // 重连失败则放弃本次发送 } } HTTPClient http; http.begin(serverName); // 指定请求的URL http.addHeader(Content-Type, application/x-www-form-urlencoded); // 设置请求头 // 构建POST请求的数据体。IFTTT的Webhooks可以接收最多3个数值value1, value2, value3 String httpRequestData; if (eventType init) { httpRequestData value1System%20Startedvalue20value30; // URL编码 } else { // 将时长信息填入value1和value2 httpRequestData value1 String(mouseDuration) value2 String(totalDuration) value3 eventType; } Serial.print(Sending POST request to IFTTT... ); int httpResponseCode http.POST(httpRequestData); // 发送POST请求 if (httpResponseCode 0) { Serial.printf(Success! Response code: %d\n, httpResponseCode); // 发送成功时让LED闪烁一下作为确认 digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); } else { Serial.printf(Error! Response code: %d, Error: %s\n, httpResponseCode, http.errorToString(httpResponseCode).c_str()); // 发送失败时让LED快速闪烁3次告警 for(int i0; i3; i){ digitalWrite(ledPin, HIGH); delay(100); digitalWrite(ledPin, LOW); delay(100); } } http.end(); // 释放资源 }关键代码解析与定制点网络配置务必修改ssid,password,serverName三个变量。serverName就是你在IFTTT获取的完整Webhooks URL。传感器逻辑pinMode(sensorPin, INPUT_PULLUP);这行代码启用了ESP32的内部上拉电阻。这意味着当传感器OUT引脚悬空或输出高阻态时该引脚会被内部电阻拉至高电平。这能增强抗干扰能力。你需要根据你的传感器实际输出逻辑来调整判断条件。本例中假设“无障碍物HIGH”“有障碍物LOW”。如果你的传感器逻辑相反需要将if (lastSensorState HIGH currentSensorState LOW)改为if (lastSensorState LOW currentSensorState HIGH)。定时重复通知timerDelay变量默认30000毫秒即30秒控制着老鼠被困后重复发送通知邮件的频率。你可以根据需要调整比如设为60000010分钟以减少邮件数量。注意IFTTT免费账户对触发频率有一定限制不宜设置得过短如几秒一次。数据传递sendNotification函数中的httpRequestData构建了POST数据。我们将老鼠被困时长和总运行时通过value1和value2传递给IFTTT这样在邮件模板中就能用{{Value1}}和{{Value2}}显示这些动态信息了。健壮性增强代码中添加了Wi-Fi重连逻辑。在实际部署中家庭Wi-Fi网络可能偶尔波动这个机制能确保设备断线后自动尝试恢复连接而不是“僵死”。4.3 代码上传与初始测试安装开发环境在电脑上安装Arduino IDE。打开后进入“文件”-“首选项”在“附加开发板管理器网址”中添加https://espressif.github.io/arduino-esp32/package_esp32_index.json。然后进入“工具”-“开发板”-“开发板管理器”搜索“esp32”并安装。选择开发板与端口用USB线连接ESP32。在“工具”-“开发板”中选择你的ESP32型号如“ESP32 Dev Module”。在“端口”中选择对应的串口。上传代码将上述代码复制到新项目中修改好配置信息。点击上传按钮。串口监视器测试上传完成后打开串口监视器右上角放大镜图标设置波特率为115200。你将看到连接Wi-Fi和发送初始化邮件的日志。此时用手遮挡红外传感器模拟笼门关闭观察串口是否打印触发信息并检查邮箱是否收到对应邮件。5. 机械结构安装与现场校准5.1 3D打印件安装与替代方案原项目提供了精巧的3D打印支架将ESP32和传感器固定在捕鼠笼顶部。如果你有3D打印机可以直接使用提供的STL文件打印。安装要点ESP32支架它有两个卡榫对准笼顶最靠近笼门的那两个孔按下去即可。确保安装牢固不会因搬运而脱落。传感器支架这个部件需要插入ESP32支架底部的滑槽。它的作用是让红外传感器的发射/接收头恰好伸到笼门内侧的边缘位置。安装时要确保传感器探头不会被笼门直接撞击到但又要在门关闭时能被完全遮挡。没有3D打印机完全可以DIY材料一小块塑料板、亚克力边角料甚至厚的硬纸板需做防水处理。固定方式ESP32使用两条结实的扎带穿过笼顶的孔洞和ESP32开发板上的安装孔直接绑在笼子上。注意不要压迫到电路板上的元件。传感器用热熔胶或强力双面胶如VHB胶带将传感器粘在笼子内侧顶部靠近门轴的位置。确保其探测方向指向笼门关闭时的路径。核心原则稳固、不干扰笼门正常开合、传感器探测位置准确。5.2 传感器灵敏度校准与现场调试这是项目成功最关键的一步直接关系到检测的准确性。校准步骤通电观察给系统通电。大多数红外避障传感器上有一个LED指示灯当检测到障碍物时会亮起也有些是常亮触发时熄灭请查阅模块说明书。定位与调节将捕鼠笼门完全打开。观察传感器指示灯状态。我们的目标是门完全打开时指示灯熄灭未触发门完全关闭时指示灯亮起已触发。调节电位器使用小螺丝刀缓慢旋转传感器模块上的电位器通常是一个蓝色可调电阻。一边旋转一边开合笼门观察指示灯变化。如果门打开时灯就亮说明灵敏度过高可能检测到了远处的背景。应逆时针旋转电位器降低灵敏度直到门打开时灯熄灭。如果门关闭时灯也不亮说明灵敏度过低或探测距离不够。应顺时针旋转电位器提高灵敏度同时确保传感器探头正对门板。如果调到最灵敏仍不亮可能需要调整传感器的安装位置让它离门更近一些。反复测试校准后反复快速开合笼门10-20次确保每次关闭都能稳定触发每次打开都能稳定复位。同时用手在传感器前方不同距离、角度晃动确保不会因为人的路过或其他干扰而产生误触发。避坑指南环境光干扰是红外传感器的大敌。务必在计划放置捕鼠笼的实际环境中进行最终校准。避免将笼子放在阳光直射、正对强烈白炽灯或红外遥控器如电视、空调遥控经常使用的方向。如果环境光干扰无法避免考虑为传感器制作一个小的遮光罩或者如前所述换用超声波传感器。6. 系统优化、问题排查与扩展思路6.1 常见问题与故障排除速查表在实际部署中你可能会遇到以下问题。这里提供一个快速排查指南现象可能原因排查步骤与解决方案上电后LED不闪烁串口无输出1. USB线/电源故障2. ESP32板载稳压芯片损坏3. 代码未正确上传1. 更换USB线和充电头。2. 检查板载LED非GPIO2是否亮测量5V/3.3V引脚电压。3. 尝试上传最简单的Blink示例程序确认开发板完好。串口显示连接Wi-Fi失败1. SSID/密码错误2. Wi-Fi信号太弱3. 路由器设置了MAC过滤或仅允许特定设备1. 仔细检查代码中的SSID和密码注意大小写和特殊字符。2. 将设备移近路由器测试。3. 登录路由器后台查看连接设备列表或将ESP32的MAC地址加入允许列表。串口显示Wi-Fi已连接但未收到初始化邮件1. IFTTT Webhooks URL错误2. IFTTT Applet未启用3. 网络防火墙或DNS问题1. 核对代码中的serverName确保事件名和密钥完全正确。2. 登录IFTTT确认对应的Applet是“Enabled”状态。3. 尝试在电脑浏览器中直接访问该URL会返回提示测试连通性。能收到初始化邮件但触发时无邮件1. 传感器未正确触发2. 传感器逻辑电平与代码判断相反3. 电平不匹配损坏GPIO1. 观察触发时传感器指示灯和串口打印。用digitalRead在串口打印传感器实时状态。2. 调整代码中的状态判断逻辑HIGH/LOW互换。3. 检查传感器输出电平确认是否需要电平转换。邮件延迟极高或偶尔收不到1. 家庭网络不稳定2. IFTTT服务延迟3. ESP32进入深度睡眠如果代码有1. 检查路由器状态确保ESP32信号强度稳定。2. IFTTT免费服务在高负载时可能有延迟属于正常现象。3. 确保循环中没有使用ESP.deepSleep()。误报无老鼠时收到邮件1. 环境光干扰阳光、灯光2. 传感器灵敏度太高3. 笼子被意外碰撞或震动1. 移开干扰光源或为传感器加遮光罩。2. 逆时针微调电位器降低灵敏度。3. 确保捕鼠笼放置平稳不易被碰倒。6.2 功耗优化与电池供电方案目前系统通过USB电源适配器供电意味着需要靠近插座。如果想将其放置在院子、车库等无电源处就需要考虑电池供电。ESP32的功耗主要来自射频模块Wi-Fi持续保持Wi-Fi连接是耗电大户。CPU持续运行loop循环。传感器红外传感器功耗很小可忽略。优化策略使用深度睡眠Deep Sleep这是最有效的省电方式。可以修改代码逻辑平时ESP32处于深度睡眠状态每10秒由定时器唤醒一次。唤醒后快速读取传感器状态。如果状态未变化立即重新进入深度睡眠。如果状态变化门关闭则连接Wi-Fi发送邮件发送完成后再次进入深度睡眠。这样绝大多数时间芯片的电流消耗可降至微安级别。挑战深度睡眠下GPIO状态和变量会丢失。需要将“门已触发”这个状态保存在RTC内存或EEPROM中或者使用外部看门狗/触发器电路来唤醒。使用更省电的ESP32型号例如ESP32-S2或ESP32-C3它们在睡眠模式下的功耗有进一步优化。电池选择对于深度睡眠方案两节串联的18650锂电池约7.4V配合一个高效的DC-DC降压模块至5V或3.3V可以续航数周甚至数月。也可以使用大容量的3.7V锂聚合物电池直接接在3.3V引脚需确认开发板稳压电路支持。注意深度睡眠编程相对复杂且需要连接GPIO0到RST引脚以实现定时唤醒。对于新手建议先从市电供电版本开始稳定后再考虑电池优化。6.3 功能扩展思路这个项目是一个完美的物联网入门平台你可以在此基础上添加更多有趣的功能多通道通知除了邮件IFTTT还支持发送短信需运营商支持、推送通知到手机如通过Telegram Bot、Pushbullet、甚至记录到Google Sheets表格。你可以在同一个Webhooks触发后添加多个动作。本地声光报警在ESP32上连接一个蜂鸣器和小型LED灯珠。当触发时除了发邮件也在本地发出“滴滴”声和闪光便于室内人员立即察觉。环境监测在笼内增加一个DHT11温湿度传感器。在通知邮件中附带笼内环境信息特别是在炎热或寒冷的极端天气下这能帮助你更紧迫地处理被困动物。电池电量上报如果使用电池供电可以增加一个电压检测电路利用ESP32的ADC引脚在每次发送通知时将电池电压作为value3发送这样你就能在邮件里收到低电量预警。接入私有云/本地服务器如果你有NAS或运行Home Assistant可以让ESP32将数据直接POST到你的本地服务器实现完全自主可控的智能家居集成。这个基于ESP32和IFTTT的智能捕鼠器通知项目从一个具体的需求出发串联了硬件选型、电路连接、嵌入式编程、云服务集成和机械安装等多个物联网核心环节。它花费极少但带来的便利是实实在在的。更重要的是通过完成它你获得了一套可复用的方法论如何用简单的传感器感知世界如何用微控制器做出决策又如何通过互联网将信息传递到指尖。这套方法论完全可以迁移到监控花盆土壤湿度、检测车库门是否关闭、提醒信箱有新信件等无数个生活场景中。动手去实现遇到问题去解决这个过程本身就是最大的乐趣所在。