ESP8266机械狗硬件平台:嵌入式学习型原型设计与工程实践

news2026/3/14 23:37:55
1. 项目概述“hello-hachi”是一个以ESP8266-12F为主控的可编程机械狗硬件平台其设计目标并非追求高动态步态或复杂运动控制而是构建一个面向嵌入式学习与功能扩展的软硬协同实验载体。项目名称中的“hachi”隐喻忠犬八公的形象定位但实际结构设计更强调工程实用性四足采用SG90舵机驱动躯干集成OLED人机界面、实时时钟、环境感知接口及多模态交互能力。整机不依赖专用运动算法库所有动作序列由预设PWM参数表驱动通过Web Server实现零客户端配置降低上手门槛同时预留红外收发、串口语音扩展、I2C传感器接入等物理层通道支持二次开发向智能宠物交互、低功耗环境监测、遥控协议复用等方向延伸。该项目属于典型的“学习型硬件原型”Learning-oriented Hardware Prototype其价值不在于性能指标的极致化而在于将电源管理、外设冲突规避、固件热更新、多协议共存等真实工程问题显性化呈现。例如OLED与红外接收共用I²C总线导致信号干扰的问题并未被掩盖为“兼容性缺陷”而是转化为一个可观察、可验证、可隔离的硬件调试案例——这种设计坦诚性恰恰是嵌入式初学者建立系统级调试直觉的关键训练场。2. 系统架构与功能模块划分2.1 整体架构框图系统采用主从式分层架构以ESP8266-12F为核心调度单元外围按功能域划分为五大子系统子系统核心器件接口类型主要职责人机交互SSD1306 OLED0.96I²C显示时间、天气、电量、表情动画电源与充放电IP5306 PMOS防反接—双18650并联供电、充电管理、过流保护运动执行4×SG90舵机GPIO PWM四足关节角度控制支持站立/坐姿/摇尾等基础动作无线通信ESP8266内置Wi-Fi—启动AP模式提供Web Server接收HTTP指令扩展接口IR ReceiverHS0038BD、UART TX/RX、I²C HubIR/UART/I²C支持红外遥控学习、语音模块接入、激光测距等外设挂载该架构摒弃了传统机器人中常见的专用电机驱动芯片如L298N、TB6612FNG转而利用ESP8266的GPIO直接输出50Hz PWM波控制SG90。此举虽牺牲了电流驱动能力与多轴同步精度但大幅简化了PCB布线复杂度使开发者能将注意力聚焦于控制逻辑而非底层时序细节。2.2 功能模块详解2.2.1 Web Server交互机制ESP8266在启动后自动进入SoftAP模式广播SSID为hello-hachi-XXXX后四位为MAC地址末段默认IP为192.168.4.1。用户通过手机浏览器访问该地址加载轻量级HTML页面页面内嵌AJAX请求向/set端点提交JSON格式指令{ action: walk_forward, speed: 80, steps: 5 }服务端使用Arduino Core for ESP8266框架中的ESP8266WebServer库解析请求调用预定义动作函数。关键设计点在于所有动作均以“状态机定时器”方式实现避免delay()阻塞Wi-Fi任务页面刷新采用长轮询Long Polling而非WebSocket降低内存占用指令缓存至SPIFFS文件系统确保断电重启后恢复上次设置。2.2.2 OLED显示子系统OLED选用SSD1306驱动的0.96英寸单色屏分辨率128×64I²C地址为0x3C。显示内容分为四个逻辑区域区域刷新频率数据来源技术要点顶部状态栏1HzRTCDS3231 IP5306 ADC读取时间采用RTC硬件校准避免软件计时漂移中央表情区0.5Hz预渲染位图数组表情帧存于Flash减少RAM占用底部信息栏30s/次OpenWeatherMap API经ESP转发天气数据经JSON解析后本地缓存降低网络依赖右侧电量条2HzIP5306 VBAT引脚ADC采样使用内部11dB衰减档位适配3.7V电池电压范围值得注意的是OLED的I²C SCL线与红外接收模块共享同一物理总线。当OLED处于DISPLAYOFF指令后的睡眠状态时其SCL引脚仍存在微弱漏电流导致HS0038BD输出持续乱码。此现象非器件失效而是I²C总线电气特性引发的竞争性干扰。2.2.3 红外收发模块红外接收采用HS0038BD一体化接收头中心频率38kHz输出为TTL电平信号直接连接ESP8266的GPIO14D5。发射端由GPIO12D6驱动红外LED经1kΩ限流电阻与BC817三极管放大后输出。原始设计中HS0038BD的OUT引脚接至GPIO14同时OLED的SCL也接于此引脚形成总线竞争。调试发现即使OLED执行ssd1306_command(SSD1306_DISPLAYOFF)其内部振荡器停振后SCL引脚仍保持高阻态但PCB走线分布电容与ESD保护二极管构成微弱耦合路径使红外信号被高频噪声淹没。解决方案为硬件级隔离在OLED的SCL走线上串联0Ω跳帽J1需使用红外功能时拔除跳帽物理切断OLED对总线的影响。该设计体现了嵌入式系统中“资源互斥”的典型处理范式——不依赖软件时序规避而以确定性硬件开关保障信号完整性。2.2.4 串口扩展与语音模块兼容性板载UART接口GPIO1/TX, GPIO3/RX预留标准间距排针支持HLK-V20、SYN6288等UART语音合成模块。设计时特别注意电平匹配与流控HLK-V20工作电压3.3V与ESP8266电平兼容无需电平转换RX引脚串联100Ω电阻抑制信号反射未启用RTS/CTS硬件流控依赖模块内置缓冲区与ATPLAY指令的应答机制实现同步固件中预留uart_write_bytes()封装函数屏蔽不同语音模块的AT指令差异。此接口亦可用于调试日志输出通过CH340X USB转串口芯片实现免跳线烧录与实时日志监控双功能。2.2.5 I²C Hub扩展能力PCB在OLED接口旁引出独立I²C总线SCL/SDA标注为“I2C-HUB”上拉电阻配置为4.7kΩVCC3.3V。该总线与主I²COLED用物理隔离支持挂载以下典型传感器传感器类型示例型号关键参数接入注意事项激光测距VL53L0X2m量程I²C地址0x29需在代码中调用VL53L0X::init()初始化时序环境光强BH17501–65535 lux地址0x23/0x27选择连续测量模式避免I²C总线长时间占用温湿度SHT30±2%RH精度地址0x44/0x45注意I²C时钟延展Clock Stretching兼容性I²C Hub未集成电平转换电路故仅支持3.3V逻辑器件。若需接入5V设备如部分旧款MPU6050需外加TXS0108E电平转换芯片。3. 硬件设计关键决策分析3.1 电池供电方案并联替代串联的工程权衡原始构想采用两节18650串联标称7.4V但面临三个不可回避的工程瓶颈LDO压降过大若选用AMS1117-3.3输入7.4V→输出3.3V压差达4.1V。按峰值电流1.2A4舵机同时动作计算LDO功耗达4.1V × 1.2A ≈ 4.9W远超其1.5W散热能力必然触发热关断电池均衡需求串联电池组必须配备均衡电路否则单节过充4.25V将引发热失控风险。而IP5306仅支持单节充电管理无法直接用于串联拓扑系统可靠性下降任一电芯内阻升高或容量衰减将导致整组可用容量骤降且故障定位困难。改为两节18650并联后系统电压稳定在3.7V±0.5V直接适配IP5306的输入范围3.0–4.5V。此时采用PMOS防反接方案SI2302DS导通电阻Rds(on)≈0.05Ω满载1.2A时压降仅0.06V功耗0.07W体二极管反向耐压20V足以承受误接9V电源冲击驱动电路仅需10kΩ下拉电阻与100nF滤波电容无额外IC成本。该方案以牺牲约15%的理论续航时间为代价并联容量相加但电压不变能量U×Q换取了电源链路的鲁棒性与可维护性——这是嵌入式产品从实验室原型走向稳定运行的必要妥协。3.2 充电管理芯片IP5306深度应用IP5306作为高度集成的锂电充放电SoC在本项目中承担三重角色功能配置方式工程实现要点充电管理内部寄存器默认配置无需外部电阻设定充电电流出厂已校准1A恒流阶段放电升压BOOSTEN引脚拉高输出5V/2A为舵机提供瞬时大电流SG90堵转电流≈1A电池电量监测读取VBAT引脚ADC值12-bit查IP5306 datasheet中Table 10将ADC值映射为SOC百分比特别值得注意的是其“边充边放”能力当USB插入充电且舵机动作时IP5306自动切换至Pass-through模式USB输入电流优先供给负载多余电流为电池充电。该特性消除了传统方案中所需的电源路径管理Power Path ManagementIC显著压缩BOM成本。3.3 CH340X烧录接口的可靠性优化板载CH340C非CH340GUSB转串口芯片其优势在于内置上电复位电路避免ESP8266因VCC上升过慢导致启动失败支持Windows/Linux/macOS免驱安装CDC类设备TYPE-C接口引脚间距0.5mm焊接时易发生桥连。针对TYPE-C易短路问题PCB设计采取两项加固措施焊盘外扩将TYPE-C母座的A6/A7D/D-及B6/B7引脚向外延长0.3mm增大烙铁操作空间阻焊开窗隔离在D与D-焊盘间保留0.1mm阻焊桥防止锡膏流动造成短路。实测表明该设计使一次焊接成功率从62%提升至98%且返修时仅需热风枪局部加热即可分离焊点无需整片拆卸。3.4 机械结构与PCB协同设计外壳采用光固化树脂SLA3D打印关键结构特征如下结构部位设计参数工程目的上下壳配合唇缘间隙0.2mm补偿SLA打印收缩率约0.2%确保装配无干涉底壳通风孔Φ3mm×12个呈环形分布覆盖IP5306与CH340C热源区域自然对流降温舵机安装凸台高4mmM2螺纹攻丝深度2.5mm避免SG90塑料齿轮箱因螺丝过长顶裂同时提供足够扭矩传递刚度鱼鳞纹包覆区深度0.15mm节距0.8mm增大手掌握持摩擦力防止调试时整机滑落分形图案Mandelbrot集不仅作为美学元素更是对SLA打印精度的实测标尺当图案边缘锯齿感消失、迭代层级清晰可辨时表明打印机Z轴步进精度已达10μm量级为后续精密结构件如舵机联动臂的制造提供工艺信心。4. BOM关键器件选型依据下表列出影响系统稳定性的核心器件及其选型逻辑器件类别型号选型依据替代建议主控芯片ESP8266-12F内置Wi-FiTCP/IP协议栈Flash容量4MB满足OTA升级GPIO数量满足舵机OLEDIR按键需求ESP32-WROOM-32需重写Wi-Fi部分OLED驱动SSD1306I²C接口、低功耗休眠电流10μA、Arduino生态支持完善SH1106需修改初始化序列红外接收头HS0038BD38kHz中心频率、-3dB带宽±5kHz适配绝大多数遥控器TO-18金属封装抗EMI能力强VS1838B引脚兼容充电管理IP5306单芯片解决充/放/电量监测QFN20封装节省面积支持USB 5V输入与5V/2A升压输出BQ24075需外置MOS与电感防反接MOSSI2302DSP沟道Vgs(th)-1.0V3.3V GPIO可完全导通SOT-23封装便于手工焊接DMG2305UVT参数相近USB转串口CH340CCDC类免驱、内置复位电路、-40℃~85℃工业温度范围CP2102需外接复位电路所有被动器件均选用X7R材质MLCC如10μF/16V避免Y5V器件在电压偏置下容量衰减超50%的问题。晶振采用±10ppm精度的32.768kHz保障RTC日误差1分钟/月。5. 软件实现要点与调试经验5.1 固件架构固件基于Arduino框架采用模块化分层设计src/ ├── main.cpp // 系统入口初始化各模块 ├── hardware/ // 硬件抽象层 │ ├── oled_ssd1306.cpp // OLED驱动含位图缓存管理 │ ├── ir_receiver.cpp // 红外解码NEC协议支持学习模式 │ └── ip5306_manager.cpp // IP5306寄存器读写与SOC计算 ├── web/ // Web服务层 │ ├── server_handler.cpp // HTTP路由分发 │ └── html_pages.h // 嵌入式HTML资源gzip压缩后存Flash └── motion/ // 运动控制层 ├── servo_controller.cpp // SG90 PWM参数表管理 └── action_sequences.cpp // 预设动作序列stand/sit/wag_tail关键约束整个固件编译后Flash占用≤3.2MB预留0.8MB用于OTA升级RAM使用≤45KBESP8266 RAM总量80KB需为WiFi保留35KB。5.2 红外学习模式实现红外学习功能通过捕获原始脉冲宽度实现不依赖协议预设。核心代码逻辑如下// 定义脉冲存储结构 struct IrRawData { uint16_t header_mark; uint16_t header_space; uint16_t bit_mark; uint16_t bits[64]; // 最多64位数据 uint8_t length; }; volatile IrRawData current_ir; volatile bool ir_received false; void ICACHE_RAM_ATTR gpio_intr_handler(void* arg) { static uint32_t last_time 0; uint32_t now system_get_time(); uint32_t delta now - last_time; last_time now; if (digitalRead(IR_PIN) LOW) { // 红外载波关闭space if (current_ir.length 64) { current_ir.bits[current_ir.length] delta; } } } // 在setup()中注册中断 pinMode(IR_PIN, INPUT); attachInterrupt(digitalPinToInterrupt(IR_PIN), gpio_intr_handler, CHANGE);该实现规避了pulseIn()函数在ESP8266上的不可靠性易受WiFi中断干扰改用硬件中断捕获边沿时间戳精度达1μs。学习到的原始脉冲序列可导出为JSON格式供其他设备复现。5.3 Web Server内存优化技巧为在有限RAM下支撑Web服务采用三项关键技术静态资源压缩HTML/CSS/JS经gzip压缩后存入SPIFFS服务端响应时添加Content-Encoding: gzip头动态内容流式生成天气数据不拼接字符串而是分段server.sendContent()输出JSON解析轻量化放弃ArduinoJson库占用RAM8KB改用strtok()手动解析关键字段。实测表明启用上述优化后空闲RAM从23KB提升至39KB可稳定运行72小时无内存泄漏。6. 组装与调试指南6.1 关键焊接顺序先焊小体积器件CH340C、0402电阻电容、晶振再焊中等器件IP5306QFN20、SSD1306 OLED排针最后焊大功率器件SI2302DSSOT-23、TYPE-C母座特别注意焊接IP5306时使用镊子夹住芯片本体烙铁尖端仅接触焊盘边缘避免热量传导至内部锂电池保护电路。6.2 分阶段上电验证阶段验证方法预期现象电源子系统万用表测TP1VCC与TP2GND电压3.2–3.6V无短路电流5mA充电管理插入USB测BAT与BAT-电压充电中BAT≈3.8V充满BAT≈4.15VWi-Fi功能手机搜索Wi-Fi列表出现hello-hachi-XXXX可ping通192.168.4.1OLED显示上电后观察屏幕显示“HELLO HACHI”启动画面3秒后进入主界面红外接收对准HS0038BD按下遥控器任意键GPIO14电平跳变串口输出HEX码如000000FF若OLED无显示首先检查I²C上拉电阻是否虚焊若红外无响应确认J1跳帽已移除且HS0038BD正负极无反接。6.3 常见问题与根因分析现象可能根因验证方法上电后Wi-Fi热点不出现CH340C的DTR#引脚未正确连接ESP8266的GPIO0用示波器测GPIO0上电时序应为低电平保持≥100msOLED显示残影或花屏SSD1306初始化时序错误如PRECHARGE参数不匹配对比SSD1306与SH1106初始化代码差异舵机抖动剧烈电源纹波过大IP5306输出电容不足示波器测VCC引脚纹波应50mVpp红外学习数据每次不一致GPIO14中断被Wi-Fi任务抢占临时禁用Wi-Fi仅运行红外学习例程测试所有调试过程均应在3.3V LDO输出端并联100μF钽电容与100nF陶瓷电容构成复合去耦网络这是保证数字电路稳定运行的黄金法则。7. 扩展应用方向本平台的硬件预留能力可支撑以下进阶开发红外协议逆向工程捕获空调/电视遥控码后用irsend.sendNEC()复现构建家庭自动化中枢离线语音控制接入SYN6288模块通过MFCC特征提取DTW算法实现本地关键词识别如“坐下”、“握手”环境安全监测挂载VL53L0X测距仪当检测到前方障碍物20cm时自动停止前进并鸣笛低功耗广域网接入拆除CH340C将GPIO15改接SX1278 LoRa模块实现1km内远程指令下发。这些扩展无需修改PCB仅通过固件重构与外设堆叠即可实现。其本质是将一个具身化硬件平台转化为嵌入式系统能力的综合训练沙盒——在这里每一个焊点、每一行代码、每一次示波器测量都在无声地回答同一个问题“当理论遇见铜箔你能否让想法真正站立起来”

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2412734.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…