news 2026/8/19 1:05:09

基于ESP32与Edge Impulse的智能拖鞋:无感化老人跌倒监测系统实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
基于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里的模型进行判断。但这样做的弊端很明显:

  1. 蓝牙数据流压力大:六轴数据以50Hz甚至100Hz的频率发送,对蓝牙连接稳定性和手机功耗都是挑战。
  2. 隐私风险:原始运动数据持续外传,存在理论上的泄露风险。
  3. 手机依赖性强:手机必须常驻后台且保持连接,一旦断开就失去保护。

因此,我采用了“边缘AI”方案。即在拖鞋的微控制器(如ESP32)上,直接运行一个轻量化的AI模型,实时分析传感器数据并做出“正常行走”、“疑似跌倒”等分类判断。只有发生异常事件(如跌倒)时,才通过蓝牙向手机发送一条简单的警报指令。这极大地减少了数据传输量,保护了隐私,也降低了对手机的依赖。Edge Impulse这个平台,正是为了简化“采集数据 -> 训练模型 -> 部署到嵌入式设备”这一流程而生的,它是本项目的技术基石。

2.4 系统架构总览

整个系统的运行流程可以概括为以下几步:

  1. 数据采集与预处理:拖鞋上的MPU6050持续采集数据,ESP32进行初步滤波和格式化。
  2. 边缘AI推理:ESP32调用已部署的TinyML模型,对当前时间窗口(例如2秒)内的传感器数据进行实时分类。
  3. 本地决策与警报:如果模型输出“跌倒”等高风险类别的置信度超过阈值,ESP32会触发本地警报(如鞋内震动马达),并同时通过蓝牙向已配对的手机App发送警报信息。
  4. 手机端通知与处理: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 引脚说明
MPU6050VCC3.3V绝对不要接5V!会烧坏传感器。
MPU6050GNDGND共地。
MPU6050SCLGPIO22I2C时钟线。
MPU6050SDAGPIO21I2C数据线。
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 结构设计与组装心得

把一堆电子元件塞进拖鞋,并且要保证舒适和耐用,是个不小的挑战。

  1. 鞋底开槽:选择一双鞋底较厚、有缓冲层的EVA拖鞋。用美工刀或电烙铁在鞋底中部(足弓下方非承重区)小心挖出一个足够容纳PCB和电池的槽。注意深度,不要挖穿。
  2. 元件布局:将ESP32、TP4056模块和电池用双面胶或热熔胶固定在槽内。MPU6050的摆放至关重要:必须用胶水牢固地粘贴在鞋底,并且其芯片平面(即XYZ轴方向)需要与拖鞋的走向严格对齐。通常定义:X轴指向脚尖方向,Y轴指向左侧,Z轴垂直向上。如果贴歪了,后续的数据和模型就全乱了。我建议先用胶带临时固定,穿在脚上走几步,通过串口读取数据观察加速度计在静止时的Z轴值是否接近重力加速度(9.8 m/s²),来微调其水平。
  3. 密封与防水:这是原型机最容易忽略的一步。用硅橡胶(如704硅胶)将开槽处和所有元件仔细密封覆盖,形成一个保护层。它能防潮、防短路,且有一定弹性,不影响穿着。务必等待硅胶完全固化(通常24小时)后再测试。
  4. 开关与充电口:将TP4056模块的Micro USB充电口和一个小型拨动开关引到拖鞋侧面或后跟处,方便操作。

4. 软件核心:从数据采集到模型部署

硬件是躯体,软件才是灵魂。这部分是整个项目最核心也最具挑战性的环节,我们将使用Edge Impulse平台来完成AI模型的训练和部署。

4.1 数据采集:如何获取高质量的“动作样本”

模型的好坏,七分靠数据。我们需要为每一个想要识别的动作(称为“标签”),采集足够多的传感器数据样本。

  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采样率 }
  2. 连接Edge Impulse数据转发工具:在电脑上安装Edge Impulse CLI工具,使用edge-impulse-data-forwarder命令,它会创建一个本地串口到Edge Impulse云平台的桥梁。
  3. 执行动作并采集
    • 穿上智能拖鞋原型机。
    • 在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的网页工作室进行模型设计了。

  1. 创建脉冲(Impulse):这是数据处理流水线。
    • 输入块:时间序列数据,长度设为2000ms(2秒)。采样率与你采集时一致(如50Hz),这样每个样本就是100个数据点。
    • 处理块:选择“频谱分析”。它会将六轴时序数据转换成一张频谱图,这个图像包含了动作的频率和强度特征,非常适合作为神经网络(特别是CNN)的输入。这是Edge Impulse的“魔法”之一,能极大提升分类效果。
    • 学习块:选择“神经网络分类器”。我们将用卷积神经网络(CNN)来识别频谱图。
  2. 生成特征:点击“频谱分析”块右侧的“保存参数”并生成特征。你会看到所有样本被转换成了二维的频谱图像。
  3. 设计并训练神经网络:在“神经网络分类器”页面,保持默认的CNN架构(如MobileNetV2的变种)即可,这对于嵌入式设备已经足够轻量。你可以调整训练周期(Epochs,如30次)、学习率等。然后点击“开始训练”。
  4. 评估模型:训练完成后,平台会给出在验证集上的准确率。务必点击“混淆矩阵”,这是比单纯看准确率更重要的指标。你需要特别关注:
    • “跌倒”被错误识别为“站立”或“坐下”的概率(漏报,非常危险)。
    • “行走”被错误识别为“跌倒”的概率(误报,会造成骚扰)。 如果漏报率高,你需要增加“跌倒”样本的数量和多样性。如果误报率高,可能需要检查“行走”数据的质量,或者调整模型输出置信度的阈值。

4.3 模型测试与部署到ESP32

训练出满意的模型后,就要把它放到拖鞋里运行了。

  1. 现场测试:在Edge Impulse的“现场测试”页面,你可以连接设备,实时查看模型对当前动作的分类结果和置信度。这是快速验证模型在实际环境中表现的最佳方式。
  2. 部署为Arduino库:在“部署”页面,选择“Arduino库”。Edge Impulse会打包生成一个.zip文件,里面包含了模型参数和你所有数据处理、推理的C++代码。
  3. 集成到主程序:在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是警报的最终呈现端,核心需求是:稳定连接、后台运行、强提醒

  1. 开发环境:使用Android Studio,语言推荐Kotlin,它比Java更简洁现代。
  2. 核心功能与实现
    • 蓝牙扫描与配对:使用Android的Bluetooth API(对于旧版)或更推荐的Bluetooth GATT API(用于BLE,功耗更低)。在App启动时,扫描并连接名为“SmartSlippers”的ESP32设备。
    • 后台服务:创建一个ForegroundService(前台服务)。这是最关键的一步!普通的Service在手机休眠后很容易被系统杀死,而前台服务会显示一个常驻通知,极大提高了保活能力。在服务中维持蓝牙连接并监听特征值(Characteristic)通知。
    • 警报处理:当ESP32发送特定的警报指令(例如,通过蓝牙特征值写入一个字节0xFF)时,服务需要触发最高优先级的通知:全屏弹窗(Activity)、最大音量响铃、强烈震动。这需要申请相应的权限(如POST_NOTIFICATIONS,VIBRATE)。
    • 一键求助:警报界面应提供大而醒目的按钮,用于“拨打紧急联系人”和“发送位置短信”。可以利用Intent.ACTION_CALL和SMS Manager来实现。
  3. 避坑指南
    • 蓝牙连接稳定性:Android不同厂商对蓝牙后台管理策略不同,容易断连。除了使用前台服务,还可以在代码中实现断线重连机制,并引导用户在手机设置中为App开启“自启动”、“省电无限制”等权限。
    • 权限管理:从Android 6.0(API 23)开始,危险权限需要动态申请。务必在运行时检查并申请电话、短信、位置等权限,否则功能会失效。
    • 界面简洁:给长辈用的界面,字体要大,按钮要少,逻辑要直白。主界面可能只需要显示“已连接”状态和电量信息即可。

6. 系统联调与优化实录

当硬件、嵌入式固件、手机App都初步完成后,真正的挑战——系统联调——就开始了。我遇到了不少问题,这里把典型的几个和解决思路记录下来。

6.1 蓝牙连接不稳定,经常无故断开

  • 现象:App显示已连接,但几分钟后状态丢失,收不到警报。
  • 排查
    1. 首先用串口监控ESP32的日志,发现蓝牙连接事件正常,但一段时间后手机主动断开了连接。
    2. 检查Android App日志,发现当手机屏幕熄灭进入Doze模式后,蓝牙GATT操作有时会超时。
  • 解决方案
    1. ESP32端:启用蓝牙连接参数更新。在建立连接后,主动向手机请求更短的连接间隔(Connection Interval),以减少延迟和功耗,但更重要的是保持连接活跃。可以使用BLEDevice::setPower()增加发射功率(需注意法规限制和功耗)。
    2. Android端:这是主战场。
      • 确保蓝牙操作(扫描、连接、读写)都在前台服务的独立线程中进行,避免主线程阻塞。
      • 定期(例如每30秒)向ESP32发送一个小的“心跳”数据包,或者读取一个特征值,以保持连接活跃,防止被系统清理。
      • onConnectionStateChange回调中实现健壮的重连逻辑,断开后等待几秒自动重连。
      • 编写详细的用户指引,告知用户需要在手机设置中允许App“后台弹出界面”、“常驻通知”、“电池优化-不优化”。

6.2 跌倒误报率过高,坐下或弯腰也被判定为跌倒

  • 现象:老人在沙发坐下时,手机App偶尔收到跌倒警报。
  • 排查
    1. 回传数据到电脑分析,发现“缓慢坐下”过程中,加速度计Z轴的变化与“缓慢侧向跌倒”有相似之处。
    2. 检查Edge Impulse混淆矩阵,发现“sitting_down”和“falling”两类之间存在一定混淆。
  • 解决方案
    1. 数据层面:补充采集更多“缓慢坐下”、“快速坐下”、“弯腰捡东西”等动作的样本,特别是动作起始和结束阶段姿态多样的样本,让模型学习更精细的区别。
    2. 算法层面:采用多级判断策略,而非单一模型输出。
      • 第一级:Edge Impulse模型给出初步分类和置信度。
      • 第二级:在嵌入式端增加简单的规则过滤器。例如,如果模型判断为“跌倒”,但同时检测到在动作发生后2秒内,姿态恢复了稳定(通过陀螺仪数据计算出的角度变化平缓),则可能是一次“坐下”或“弯腰”,予以过滤。
      • 第三级:在手机App端,可以设置一个短时间内的重复确认机制。例如,在10秒内连续收到2次“跌倒”警报,才最终触发强提醒。单次警报可能只触发鞋内震动,进行本地提醒。
    3. 参数调整:提高模型触发警报的置信度阈值(如从0.7提升到0.85)。

6.3 电池续航时间远短于预期

  • 现象:标称500mAh的电池,实际只能工作不到2小时。
  • 排查:使用USB电流表串联测量,发现工作电流持续在120mA左右。
  • 解决方案:嵌入式设备的功耗优化是一门大学问。
    1. 最有效的一招:让ESP32睡眠。我们的监测不需要100%的实时性。可以设计这样的工作循环:
      • 唤醒 -> 快速采集1秒数据 -> 运行模型推理 -> 如果结果正常,立即进入深度睡眠(Deep Sleep)5秒 -> 定时器唤醒,进入下一个循环。
      • 在深度睡眠下,ESP32的电流可以降到10μA级别,蓝牙和CPU大部分关闭,仅由RTC定时器维持。这能将续航从小时级提升到天级。
      • 实现方法:使用esp_deep_sleep_start()函数,并通过esp_sleep_enable_timer_wakeup()设置唤醒时间。
    2. 外设管理:在睡眠前,通过代码将MPU6050的电源引脚拉低(如果单独可控),或者将其设置为低功耗模式。断开震动马达的驱动电路。
    3. 降低工作频率:在不影响模型性能的前提下,尝试降低CPU主频。

6.4 模型在ESP32上运行速度慢,导致检测延迟大

  • 现象:从做出动作到出结果,感觉有超过1秒的延迟。
  • 排查:在代码中打印推理函数run_classifier()的执行时间。
  • 解决方案
    1. 优化Edge Impulse模型:在Edge Impulse设计脉冲时,尝试使用更轻量的神经网络架构(如选择“MobileNetV1”或“Simple NN”),或者减少输入特征图的大小。
    2. 启用ESP32的硬件加速:ESP32具有双核,确保推理任务运行在一个核心上,不影响数据采集和通信。此外,对于某些运算,可以尝试使用ESP32的硬件DSP指令进行优化(Edge Impulse生成的库可能已包含部分优化)。
    3. 调整采样与推理节奏:不必每次采集新数据就全量推理一次。可以采用“滑动窗口”法,每采集50ms的新数据,就与之前1950ms的旧数据组成一个2秒窗口进行推理,这样响应会更及时。

7. 项目总结与未来展望

经过几个月的折腾,这双看起来有点笨拙的“智能拖鞋”原型终于能比较可靠地工作了。它可能离一个成熟的产品还有很远,但作为一个原型,它成功地验证了“无感化监测”这个核心概念的可行性。回顾整个过程,最大的体会是:一个物联网+AI项目,最难的不是某一项技术,而是如何让硬件、嵌入式软件、AI模型和移动端应用这四个部分稳定、协同地工作。联调阶段花费的时间,远超过单个部分的开发。

如果想让这个项目更进一步,可以从这些方向深入:

  • 多传感器融合:加入足底压力传感器矩阵,可以更精确地分析步态稳定性,甚至提前预警步态异常,这比事后检测跌倒更有意义。
  • 离线语音提醒:在拖鞋内集成一个简单的语音模块,当检测到久坐时,可以用语音温和提醒老人起身活动。
  • 数据同步与分析:通过Wi-Fi(ESP32也支持)将日常的活动数据(行走步数、久坐次数)同步到云端,子女可以通过App查看长辈长期的活动趋势报告。
  • 低功耗极致优化:设计更精细的电源管理策略,使用更低功耗的MCU(如ESP32-C3),配合更大容量电池,目标是实现一周以上的续航。

这个项目带给我的,不仅仅是一双会“思考”的拖鞋,更是一次将技术善意转化为实际关怀的完整实践。它让我深刻理解到,技术真正的价值,在于它如何悄无声息地融入生活,去守护那些我们最在意的人。希望我的这些经验和踩过的坑,能为你点亮一点灵感,做出更有趣、更有用的东西。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/19 0:56:00

3 步搞定按设备滚动方向设置:Scroll Reverser 完整使用指南

3 步搞定按设备滚动方向设置&#xff1a;Scroll Reverser 完整使用指南 【免费下载链接】Scroll-Reverser Per-device scrolling prefs on macOS. 项目地址: https://gitcode.com/gh_mirrors/sc/Scroll-Reverser 你的 Mac 可能同时连着触控板和鼠标&#xff1a;用触控板…

作者头像 李华
网站建设 2026/8/19 0:55:03

Python爬虫进阶实战:增量爬取与更新检测系统完整实现

前言 在数据驱动的时代,网络爬虫作为数据采集的核心工具,其重要性不言而喻。然而,许多爬虫开发者往往停留在全量爬取的初级阶段,这种简单粗暴的方式在面对大规模、高频率的数据采集需求时,暴露出效率低下、资源浪费、对目标服务器压力过大等诸多问题。本文将深入探讨爬虫…

作者头像 李华
网站建设 2026/8/19 0:52:59

单片机毕设项目:基于 STM32 单片机的多传感器学习环境智能调控装置开发 基于 STM32 的坐姿距离检测智能预警座椅控制系统设计(018403)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/8/19 0:46:30

基于大数据的游戏购买网站设计与实现毕业设计项目源码

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/8/19 0:46:17

单片机毕设项目:基于易安卓 App 的 ESP8266 单片机无线智能监控系统设计 嵌入式局域网温湿度采集终端与移动端交互系统设计(020903)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机&#xff0c;Java、小程序技术领域和毕业项目实战 ✌️…

作者头像 李华
网站建设 2026/8/19 0:41:16

期刊AI率降到多少才算合格?别把工具服务线当投稿标准!

期刊AI率降到多少才算合格&#xff1f;别把工具服务线当投稿标准&#xff01; 使用前先排查哪些风险&#xff1f; 投稿须知没有公布统一AI阈值&#xff0c;作者却在网上看到多个数字。遇到这种情况&#xff0c;最容易犯的错误是立刻换词、换工具或重写全文&#xff0c;却没有…

作者头像 李华