基于ESP32与Edge Impulse的智能拖鞋:无感化老人跌倒监测系统实战
1. 项目概述:一双能“看懂”老人状态的智能拖鞋
给家里的长辈买过智能手环或者跌倒报警器吗?我试过,结果往往是吃灰。手环戴不习惯,报警器按钮忘了按,或者觉得“不吉利”而拒绝佩戴。这大概是很多关心长辈安全的朋友共同的烦恼。直到有一次,我看到母亲在屋里走动时拖鞋发出的轻微声响,突然有了一个想法:为什么不把传感器做进他们每天必穿的拖鞋里呢?这就是“SmartSlippers”项目的起点——一双能通过识别步态和姿态,来无感守护长辈安全的智能拖鞋。
这个项目的核心,是让拖鞋变得“聪明”。它内置传感器,可以实时监测老人的行走、静坐、久卧甚至疑似跌倒的状态,并通过蓝牙将警报发送到子女的手机App上。整个过程,老人无需任何额外操作,就像穿普通拖鞋一样自然。这背后融合了嵌入式开发(Arduino/ESP32)、蓝牙通信、手机App开发(Android)以及最关键的边缘AI模型训练(Edge Impulse)这几项技术。我花了大概两个月的时间,从零到一完成了原型机的制作和基础功能的验证,实测下来,对于室内常见的活动状态识别,准确率能达到一个比较可靠的水平。
如果你是一位电子爱好者、创客,或者是一名正在寻找有温度、有实用价值的毕业设计/课程设计题目的学生,这个项目会非常合适。它不涉及过于高深的算法,但完整覆盖了从硬件选型、传感器数据采集、AI模型训练与部署,到移动端应用开发的全链路,是一个绝佳的“软硬结合”实战项目。接下来,我就把这几个月踩过的坑和积累的经验,毫无保留地分享给你。
2. 核心设计思路:为什么是拖鞋+边缘AI?
在动手之前,我们需要想清楚方案。市面上已经有基于摄像头、毫米波雷达甚至地板压力传感器的跌倒监测方案,为什么还要做一双拖鞋?我的设计思路主要基于以下几点考量:
2.1 无感化与用户接受度是最高原则
任何给长辈用的产品,“无感”和“不打扰”是第一位的。摄像头有隐私顾虑,雷达设备需要安装且可能让老人觉得被监视,压力地毯铺设麻烦且成本高。而拖鞋是老人居家必备、每天高频使用的物品,将传感器集成进去,几乎不改变他们的使用习惯,心理接受度最高。这是本项目相比其他方案最核心的优势。
2.2 传感器选型与数据维度的权衡
要识别动作,我们需要获取拖鞋的运动和姿态数据。常见的传感器有:
- 加速度计(Accelerometer):测量三个轴(X, Y, Z)的加速度,是检测运动、震动、姿态的核心。走路、跑步、跌倒都会产生独特的加速度波形。
- 陀螺仪(Gyroscope):测量三个轴的角速度,能很好地捕捉旋转动作,比如转身、坐下起身时的身体扭动。
- 压力传感器(Pressure Sensor):可以分布在鞋底前掌和后跟,用于检测步态周期、重心转移以及是否“脚着地”。
我的选择是MPU6050(六轴传感器,包含三轴加速度计+三轴陀螺仪)。原因很简单:成本低、数据丰富、易于获取。在项目初期,仅靠加速度计和陀螺仪的融合数据,已经足够区分“行走”、“静止”、“坐下”、“跌倒”等大类的动作。压力传感器固然能提供更精细的步态信息,但会增加布线和鞋内集成的复杂度,可以作为后续功能升级的方向。
2.3 边缘计算的必要性:实时、隐私与低功耗
所有传感器数据是在拖鞋(终端)上产生的。一种方案是把原始数据全部通过蓝牙实时发送到手机,由手机App里的模型进行判断。但这样做的弊端很明显:
- 蓝牙数据流压力大:六轴数据以50Hz甚至100Hz的频率发送,对蓝牙连接稳定性和手机功耗都是挑战。
- 隐私风险:原始运动数据持续外传,存在理论上的泄露风险。
- 手机依赖性强:手机必须常驻后台且保持连接,一旦断开就失去保护。
因此,我采用了“边缘AI”方案。即在拖鞋的微控制器(如ESP32)上,直接运行一个轻量化的AI模型,实时分析传感器数据并做出“正常行走”、“疑似跌倒”等分类判断。只有发生异常事件(如跌倒)时,才通过蓝牙向手机发送一条简单的警报指令。这极大地减少了数据传输量,保护了隐私,也降低了对手机的依赖。Edge Impulse这个平台,正是为了简化“采集数据 -> 训练模型 -> 部署到嵌入式设备”这一流程而生的,它是本项目的技术基石。
2.4 系统架构总览
整个系统的运行流程可以概括为以下几步:
- 数据采集与预处理:拖鞋上的MPU6050持续采集数据,ESP32进行初步滤波和格式化。
- 边缘AI推理:ESP32调用已部署的TinyML模型,对当前时间窗口(例如2秒)内的传感器数据进行实时分类。
- 本地决策与警报:如果模型输出“跌倒”等高风险类别的置信度超过阈值,ESP32会触发本地警报(如鞋内震动马达),并同时通过蓝牙向已配对的手机App发送警报信息。
- 手机端通知与处理:Android App收到警报后,会发出强提醒(响铃、震动、弹窗),并可以一键拨打预设的联系人电话或发送预设的求助短信。
这个架构实现了从感知、分析、决策到告警的完整闭环,且重心在边缘侧。
3. 硬件搭建与核心电路解析
理论清晰了,接下来就是动手把硬件搭起来。这部分我会详细说明元器件选型、电路连接以及几个关键的避坑点。
3.1 硬件清单与选型理由
- 主控芯片:ESP32-DevKitC 或 NodeMCU-32S
- 为什么是ESP32?这是本项目几乎唯一的选择。它集成了双核处理器、Wi-Fi和蓝牙4.2(BR/EDR + BLE),性能足以运行轻量级AI模型,且开发环境(Arduino IDE)成熟,社区资源丰富。相比Arduino Uno+蓝牙模块的组合,它集成度高,更省空间和功耗。
- 运动传感器:MPU6050模块
- 成本约10元,通过I2C接口与ESP32通信,提供三轴加速度和三轴陀螺仪数据。务必购买带电平转换的模块(通常支持3.3V/5V),以便与3.3V的ESP32直接连接。
- 电源:3.7V 锂电池(500mAh以上)与充电管理模块
- 拖鞋需要无线工作,充电是刚需。我选用一块扁平的软包锂电池,搭配一个TP4056充电/升压一体模块。这个模块能通过Micro USB口给电池充电,并能将电池电压升压到稳定的5V输出给ESP32供电。注意计算功耗,ESP32全速运行+传感器,工作电流约100-150mA,一块500mAh的电池理论上可支撑3-5小时,对于原型验证足够,产品化需选用更大容量电池并优化功耗(如使用深度睡眠)。
- 警报器:微型震动马达(扁平转子马达)
- 用于本地提醒。当检测到老人可能坐下太久(需起身活动)或系统自检低电量时,可以温和震动提示。选择工作电压3V左右、直径10mm以内的扁平马达,便于嵌入鞋底。
- 其他:杜邦线、开关、洞洞板或定制PCB
- 原型阶段用洞洞板和杜邦线飞线。如果想做得更精致、可靠,建议设计一块简单的PCB,将TP4056、ESP32的常用接口集成在一起,能极大简化组装。
3.2 电路连接详解与注意事项
连接原理很简单,但细节决定成败。以下是接线表:
| 元件 | 引脚 | 连接至 ESP32 引脚 | 说明 |
|---|---|---|---|
| MPU6050 | VCC | 3.3V | 绝对不要接5V!会烧坏传感器。 |
| MPU6050 | GND | GND | 共地。 |
| MPU6050 | SCL | GPIO22 | I2C时钟线。 |
| MPU6050 | SDA | GPIO21 | I2C数据线。 |
| TP4056模块 | BAT+ | 锂电池正极 | |
| TP4056模块 | BAT- | 锂电池负极 | |
| TP4056模块 | OUT+ | ESP32 Vin 或 5V pin | 提供5V电源。 |
| TP4056模块 | OUT- | ESP32 GND | 电源共地。 |
| 震动马达 | 一端 | 通过一个NPN三极管(如8050)控制 | 直接接IO口驱动能力不足。 |
| 震动马达 | 另一端 | 接电源正极(5V) |
注意1:电平匹配。务必确认你买的MPU6050模块是否支持3.3V逻辑电平。大多数廉价模块通过一个跳帽选择,连接前请仔细查看,确保跳接到3.3V一侧。
注意2:I2C上拉电阻。ESP32的内部上拉电阻可能较弱,如果MPU6050数据读取不稳定(常表现为读取全0或全255),请在SDA和SCL线上各外接一个4.7kΩ的上拉电阻到3.3V。
注意3:电机驱动。ESP32的GPIO口最大输出电流约40mA,而震动马达启动瞬间电流可能更大。切勿直接将马达接在IO口上!正确的做法是使用一个NPN三极管(如S8050)或一个MOS管(如SI2302)来驱动。将ESP32的GPIO(例如GPIO23)通过一个1kΩ电阻连接到三极管的基极,马达接在集电极和电源正极之间,发射极接地。这样GPIO只需提供很小的基极电流,就能控制马达的通断。
3.3 结构设计与组装心得
把一堆电子元件塞进拖鞋,并且要保证舒适和耐用,是个不小的挑战。
- 鞋底开槽:选择一双鞋底较厚、有缓冲层的EVA拖鞋。用美工刀或电烙铁在鞋底中部(足弓下方非承重区)小心挖出一个足够容纳PCB和电池的槽。注意深度,不要挖穿。
- 元件布局:将ESP32、TP4056模块和电池用双面胶或热熔胶固定在槽内。MPU6050的摆放至关重要:必须用胶水牢固地粘贴在鞋底,并且其芯片平面(即XYZ轴方向)需要与拖鞋的走向严格对齐。通常定义:X轴指向脚尖方向,Y轴指向左侧,Z轴垂直向上。如果贴歪了,后续的数据和模型就全乱了。我建议先用胶带临时固定,穿在脚上走几步,通过串口读取数据观察加速度计在静止时的Z轴值是否接近重力加速度(9.8 m/s²),来微调其水平。
- 密封与防水:这是原型机最容易忽略的一步。用硅橡胶(如704硅胶)将开槽处和所有元件仔细密封覆盖,形成一个保护层。它能防潮、防短路,且有一定弹性,不影响穿着。务必等待硅胶完全固化(通常24小时)后再测试。
- 开关与充电口:将TP4056模块的Micro USB充电口和一个小型拨动开关引到拖鞋侧面或后跟处,方便操作。
4. 软件核心:从数据采集到模型部署
硬件是躯体,软件才是灵魂。这部分是整个项目最核心也最具挑战性的环节,我们将使用Edge Impulse平台来完成AI模型的训练和部署。
4.1 数据采集:如何获取高质量的“动作样本”
模型的好坏,七分靠数据。我们需要为每一个想要识别的动作(称为“标签”),采集足够多的传感器数据样本。
- 编写数据采集固件:在Arduino IDE中,编写一个简单的程序,读取MPU6050的加速度和陀螺仪数据,并通过串口打印出来。格式可以设为 CSV:
timestamp, accX, accY, accZ, gyroX, gyroY, gyroZ。// 示例代码片段 #include <Wire.h> #include <MPU6050.h> MPU6050 mpu; void setup() { Serial.begin(115200); Wire.begin(); mpu.initialize(); // 可选:进行传感器校准 } void loop() { int16_t ax, ay, az, gx, gy, gz; mpu.getMotion6(&ax, &ay, &az, &gx, &gy, &gz); // 读取原始数据 // 将原始数据转换为实际单位(如g和°/s),此处简化处理 Serial.print(millis()); Serial.print(","); Serial.print(ax); Serial.print(","); Serial.print(ay); Serial.print(","); Serial.print(az); Serial.print(","); Serial.print(gx); Serial.print(","); Serial.print(gy); Serial.print(","); Serial.println(gz); delay(20); // 50Hz采样率 } - 连接Edge Impulse数据转发工具:在电脑上安装Edge Impulse CLI工具,使用
edge-impulse-data-forwarder命令,它会创建一个本地串口到Edge Impulse云平台的桥梁。 - 执行动作并采集:
- 穿上智能拖鞋原型机。
- 在Edge Impulse的“数据采集”页面,创建一个新标签,例如“walking”。
- 点击“开始采样”,然后在10秒内(默认采样长度)正常行走。结束后,一段10秒的“行走”数据就上传到云端了。
- 重复这个动作至少20-30次,最好在不同地面(地板、地毯)、不同速度下进行,以增加数据的多样性。
- 用同样的方法,采集其他动作的数据样本:
- standing:静止站立
- sitting_down:从站立到坐下的过程
- sitting:静坐
- falling:这是关键且敏感的数据!为了安全,请在床垫或软垫上进行模拟,模仿侧向、前向等不同姿势的缓慢跌倒。绝对不要让老人参与此类危险数据的采集!至少需要50个以上的样本。
- (可选)running,upstairs等。
实操心得:数据采集的黄金法则
- 样本均衡:尽量让每个标签的样本数量接近,避免“跌倒”样本过少导致模型不认识跌倒。
- 时长一致:Edge Impulse默认以固定时间窗口(如2秒)切片分析。确保你的每个动作都能在2秒内完成其典型特征。对于“跌倒”,2秒窗口足以捕捉到失重和撞击的完整波形。
- 人员多样性:如果条件允许,让不同体型、不同年龄的人(模拟老人步态)来采集“行走”数据,能让模型泛化能力更强。
4.2 在Edge Impulse中创建与训练模型
数据准备好后,就可以在Edge Impulse的网页工作室进行模型设计了。
- 创建脉冲(Impulse):这是数据处理流水线。
- 输入块:时间序列数据,长度设为2000ms(2秒)。采样率与你采集时一致(如50Hz),这样每个样本就是100个数据点。
- 处理块:选择“频谱分析”。它会将六轴时序数据转换成一张频谱图,这个图像包含了动作的频率和强度特征,非常适合作为神经网络(特别是CNN)的输入。这是Edge Impulse的“魔法”之一,能极大提升分类效果。
- 学习块:选择“神经网络分类器”。我们将用卷积神经网络(CNN)来识别频谱图。
- 生成特征:点击“频谱分析”块右侧的“保存参数”并生成特征。你会看到所有样本被转换成了二维的频谱图像。
- 设计并训练神经网络:在“神经网络分类器”页面,保持默认的CNN架构(如
MobileNetV2的变种)即可,这对于嵌入式设备已经足够轻量。你可以调整训练周期(Epochs,如30次)、学习率等。然后点击“开始训练”。 - 评估模型:训练完成后,平台会给出在验证集上的准确率。务必点击“混淆矩阵”,这是比单纯看准确率更重要的指标。你需要特别关注:
- “跌倒”被错误识别为“站立”或“坐下”的概率(漏报,非常危险)。
- “行走”被错误识别为“跌倒”的概率(误报,会造成骚扰)。 如果漏报率高,你需要增加“跌倒”样本的数量和多样性。如果误报率高,可能需要检查“行走”数据的质量,或者调整模型输出置信度的阈值。
4.3 模型测试与部署到ESP32
训练出满意的模型后,就要把它放到拖鞋里运行了。
- 现场测试:在Edge Impulse的“现场测试”页面,你可以连接设备,实时查看模型对当前动作的分类结果和置信度。这是快速验证模型在实际环境中表现的最佳方式。
- 部署为Arduino库:在“部署”页面,选择“Arduino库”。Edge Impulse会打包生成一个
.zip文件,里面包含了模型参数和你所有数据处理、推理的C++代码。 - 集成到主程序:在Arduino IDE中,通过“项目” -> “加载库” -> “添加.ZIP库”来安装这个库。然后,你主程序的核心就变成了调用这个库。
你需要将数据采集、模型推理、蓝牙通信、马达控制等逻辑整合到一个完整的固件中。#include <SmartSlippers_inferencing.h> // Edge Impulse生成的库 // ... 其他头文件和定义 ... void loop() { // 1. 读取传感器数据,填充到Edge Impulse提供的输入缓冲区 ei::signal_t signal; // ... 将ax, ay, az, gx, gy, gz数据填入signal... // 2. 运行推理 ei_impulse_result_t result = { 0 }; EI_IMPULSE_ERROR res = run_classifier(&signal, &result, false); // 3. 处理结果 if (res == EI_IMPULSE_OK) { float fall_score = result.classification[“falling”].value; // 获取“跌倒”类别的置信度 if (fall_score > 0.7) { // 设置一个阈值,例如0.7 triggerAlarm(); // 触发本地震动和蓝牙警报 } } delay(10); // 控制推理频率 }
5. Android应用开发:警报接收与处理
手机App是警报的最终呈现端,核心需求是:稳定连接、后台运行、强提醒。
- 开发环境:使用Android Studio,语言推荐Kotlin,它比Java更简洁现代。
- 核心功能与实现:
- 蓝牙扫描与配对:使用Android的Bluetooth API(对于旧版)或更推荐的Bluetooth GATT API(用于BLE,功耗更低)。在App启动时,扫描并连接名为“SmartSlippers”的ESP32设备。
- 后台服务:创建一个
ForegroundService(前台服务)。这是最关键的一步!普通的Service在手机休眠后很容易被系统杀死,而前台服务会显示一个常驻通知,极大提高了保活能力。在服务中维持蓝牙连接并监听特征值(Characteristic)通知。 - 警报处理:当ESP32发送特定的警报指令(例如,通过蓝牙特征值写入一个字节
0xFF)时,服务需要触发最高优先级的通知:全屏弹窗(Activity)、最大音量响铃、强烈震动。这需要申请相应的权限(如POST_NOTIFICATIONS,VIBRATE)。 - 一键求助:警报界面应提供大而醒目的按钮,用于“拨打紧急联系人”和“发送位置短信”。可以利用
Intent.ACTION_CALL和SMS Manager来实现。
- 避坑指南:
- 蓝牙连接稳定性:Android不同厂商对蓝牙后台管理策略不同,容易断连。除了使用前台服务,还可以在代码中实现断线重连机制,并引导用户在手机设置中为App开启“自启动”、“省电无限制”等权限。
- 权限管理:从Android 6.0(API 23)开始,危险权限需要动态申请。务必在运行时检查并申请电话、短信、位置等权限,否则功能会失效。
- 界面简洁:给长辈用的界面,字体要大,按钮要少,逻辑要直白。主界面可能只需要显示“已连接”状态和电量信息即可。
6. 系统联调与优化实录
当硬件、嵌入式固件、手机App都初步完成后,真正的挑战——系统联调——就开始了。我遇到了不少问题,这里把典型的几个和解决思路记录下来。
6.1 蓝牙连接不稳定,经常无故断开
- 现象:App显示已连接,但几分钟后状态丢失,收不到警报。
- 排查:
- 首先用串口监控ESP32的日志,发现蓝牙连接事件正常,但一段时间后手机主动断开了连接。
- 检查Android App日志,发现当手机屏幕熄灭进入Doze模式后,蓝牙GATT操作有时会超时。
- 解决方案:
- ESP32端:启用蓝牙连接参数更新。在建立连接后,主动向手机请求更短的连接间隔(Connection Interval),以减少延迟和功耗,但更重要的是保持连接活跃。可以使用
BLEDevice::setPower()增加发射功率(需注意法规限制和功耗)。 - Android端:这是主战场。
- 确保蓝牙操作(扫描、连接、读写)都在前台服务的独立线程中进行,避免主线程阻塞。
- 定期(例如每30秒)向ESP32发送一个小的“心跳”数据包,或者读取一个特征值,以保持连接活跃,防止被系统清理。
- 在
onConnectionStateChange回调中实现健壮的重连逻辑,断开后等待几秒自动重连。 - 编写详细的用户指引,告知用户需要在手机设置中允许App“后台弹出界面”、“常驻通知”、“电池优化-不优化”。
- ESP32端:启用蓝牙连接参数更新。在建立连接后,主动向手机请求更短的连接间隔(Connection Interval),以减少延迟和功耗,但更重要的是保持连接活跃。可以使用
6.2 跌倒误报率过高,坐下或弯腰也被判定为跌倒
- 现象:老人在沙发坐下时,手机App偶尔收到跌倒警报。
- 排查:
- 回传数据到电脑分析,发现“缓慢坐下”过程中,加速度计Z轴的变化与“缓慢侧向跌倒”有相似之处。
- 检查Edge Impulse混淆矩阵,发现“sitting_down”和“falling”两类之间存在一定混淆。
- 解决方案:
- 数据层面:补充采集更多“缓慢坐下”、“快速坐下”、“弯腰捡东西”等动作的样本,特别是动作起始和结束阶段姿态多样的样本,让模型学习更精细的区别。
- 算法层面:采用多级判断策略,而非单一模型输出。
- 第一级:Edge Impulse模型给出初步分类和置信度。
- 第二级:在嵌入式端增加简单的规则过滤器。例如,如果模型判断为“跌倒”,但同时检测到在动作发生后2秒内,姿态恢复了稳定(通过陀螺仪数据计算出的角度变化平缓),则可能是一次“坐下”或“弯腰”,予以过滤。
- 第三级:在手机App端,可以设置一个短时间内的重复确认机制。例如,在10秒内连续收到2次“跌倒”警报,才最终触发强提醒。单次警报可能只触发鞋内震动,进行本地提醒。
- 参数调整:提高模型触发警报的置信度阈值(如从0.7提升到0.85)。
6.3 电池续航时间远短于预期
- 现象:标称500mAh的电池,实际只能工作不到2小时。
- 排查:使用USB电流表串联测量,发现工作电流持续在120mA左右。
- 解决方案:嵌入式设备的功耗优化是一门大学问。
- 最有效的一招:让ESP32睡眠。我们的监测不需要100%的实时性。可以设计这样的工作循环:
- 唤醒 -> 快速采集1秒数据 -> 运行模型推理 -> 如果结果正常,立即进入深度睡眠(Deep Sleep)5秒 -> 定时器唤醒,进入下一个循环。
- 在深度睡眠下,ESP32的电流可以降到10μA级别,蓝牙和CPU大部分关闭,仅由RTC定时器维持。这能将续航从小时级提升到天级。
- 实现方法:使用
esp_deep_sleep_start()函数,并通过esp_sleep_enable_timer_wakeup()设置唤醒时间。
- 外设管理:在睡眠前,通过代码将MPU6050的电源引脚拉低(如果单独可控),或者将其设置为低功耗模式。断开震动马达的驱动电路。
- 降低工作频率:在不影响模型性能的前提下,尝试降低CPU主频。
- 最有效的一招:让ESP32睡眠。我们的监测不需要100%的实时性。可以设计这样的工作循环:
6.4 模型在ESP32上运行速度慢,导致检测延迟大
- 现象:从做出动作到出结果,感觉有超过1秒的延迟。
- 排查:在代码中打印推理函数
run_classifier()的执行时间。 - 解决方案:
- 优化Edge Impulse模型:在Edge Impulse设计脉冲时,尝试使用更轻量的神经网络架构(如选择“MobileNetV1”或“Simple NN”),或者减少输入特征图的大小。
- 启用ESP32的硬件加速:ESP32具有双核,确保推理任务运行在一个核心上,不影响数据采集和通信。此外,对于某些运算,可以尝试使用ESP32的硬件DSP指令进行优化(Edge Impulse生成的库可能已包含部分优化)。
- 调整采样与推理节奏:不必每次采集新数据就全量推理一次。可以采用“滑动窗口”法,每采集50ms的新数据,就与之前1950ms的旧数据组成一个2秒窗口进行推理,这样响应会更及时。
7. 项目总结与未来展望
经过几个月的折腾,这双看起来有点笨拙的“智能拖鞋”原型终于能比较可靠地工作了。它可能离一个成熟的产品还有很远,但作为一个原型,它成功地验证了“无感化监测”这个核心概念的可行性。回顾整个过程,最大的体会是:一个物联网+AI项目,最难的不是某一项技术,而是如何让硬件、嵌入式软件、AI模型和移动端应用这四个部分稳定、协同地工作。联调阶段花费的时间,远超过单个部分的开发。
如果想让这个项目更进一步,可以从这些方向深入:
- 多传感器融合:加入足底压力传感器矩阵,可以更精确地分析步态稳定性,甚至提前预警步态异常,这比事后检测跌倒更有意义。
- 离线语音提醒:在拖鞋内集成一个简单的语音模块,当检测到久坐时,可以用语音温和提醒老人起身活动。
- 数据同步与分析:通过Wi-Fi(ESP32也支持)将日常的活动数据(行走步数、久坐次数)同步到云端,子女可以通过App查看长辈长期的活动趋势报告。
- 低功耗极致优化:设计更精细的电源管理策略,使用更低功耗的MCU(如ESP32-C3),配合更大容量电池,目标是实现一周以上的续航。
这个项目带给我的,不仅仅是一双会“思考”的拖鞋,更是一次将技术善意转化为实际关怀的完整实践。它让我深刻理解到,技术真正的价值,在于它如何悄无声息地融入生活,去守护那些我们最在意的人。希望我的这些经验和踩过的坑,能为你点亮一点灵感,做出更有趣、更有用的东西。
