基于PJ85718DM与PIC18F45K40的双路温度监测系统设计
去年夏天我在调试一台空调控制板时遇到一个特别典型的怪问题面板上显示室温 30℃但房间里的人热得不行压缩机却半天不启动等到下午太阳把控制面板晒透显示温度冲到 33℃压缩机又疯狂运行。排查到最后发现控制器只采集了面板上的本地温度压根没有真正反映房间热负荷的远程温度。这件事之后我把整个方案重写成了基于 PJ85718DM 和 PIC18F45K40 的双路温度监测系统本地和远程一起测问题才彻底解决。这篇文章就把这个项目的完整思路、硬件连接、I2C 通信代码、HVAC 控制逻辑和现场踩坑记录整理出来给正在做嵌入式温度监测或 HVAC 控制改造的朋友一个可以直接落地的参考。1. 从“面板被太阳晒晕”说起为什么需要本地和远程两路温度1.1 一个真实控制故障引发的方案重构在 HVAC 系统里传统做法往往是在温控器面板内部装一个热敏电阻测量的是“控制器所在位置的温度”而不是“被控区域的空气温度”。控制器装在朝南墙壁上夏季日照会让面板局部温度比房间实际温度高出好几度。单靠这一点温度驱动压缩机启停结果必然是误判频繁面板晒热就启动制冷云层遮住太阳又立刻停机压缩机短循环加剧房间温度却始终压不下来。同样的问题在嵌入式设备里也存在。电源模块、主控芯片、功率器件附近的 PCB 温度和设备外壳外部环境温度完全是两码事。监测设备内部温度是散热和降频保护的需要监测外部环境温度才是判断系统是否正常工作的依据。所以“本地温度 远程温度”不是锦上添花而是温度控制类项目的基本架构要求。我这次做的方案就是用 PJ85718DM 数字温度传感器分别布置在控制器主板和远端风道由 PIC18F45K40 通过一条 I2C 总线同时读取两路数据。1.2 本地与远程温度在不同场景下的分工不同应用场景下本地和远程的物理含义会有区别。我做项目之前先把职责划分写清楚后续逻辑才不乱。应用场景本地温度靠近控制器远程温度远端探头HVAC 温控器面板/室内机回风口温度送风管道、房间中央、盘管表面嵌入式电源设备PCB板面温度、功率器件壳温设备外壳外部环境、电池柜内部制冷柜/冷库控制器控制箱内部温度库内中心温度、蒸发器温度从这里能看出一个核心设计原则远程温度解决“环境真实状态”的判断本地温度解决“设备自身热状态”的监测。两者的用途不同报警和控制策略也必须分别对待。比如 HVAC 的压缩机启停应该参考远程温度而嵌入式电源的温度降频保护则优先参考板面本地温度。1.3 为什么用数字 I2C 传感器而不是老式 NTC以前做温度采集最常用的是 10k NTC 热敏电阻加分压电路再接 MCU 的 ADC。这套方案本身没有大问题但工程上很麻烦每个探头都要做分压校准、查表标定线长不同会导致分压比例漂移电源电压波动也会直接引入误差。维护时换一个探头整套参数可能全得重新调。PJ85718DM 这类的 I2C 数字温度传感器把问题简化了很多温度和配置都通过寄存器读写MCU 拿到的是已经量化好的数字值不用自己算分压也不用担心 AD 参考电压精度。多个传感器可以挂在同一条 I2C 总线上靠 A0/A1/A2 引脚组合区分地址连线只需要 SDA、SCL、电源、地四根线。PIC18F45K40 自带 MSSP 硬件 I2C 外设直接在寄存器层面发起始、写地址、读字节CPU 不需要手工翻转时钟模拟协议稳定性和实时性都更有保证。这也是我最终选择这个组合的直接原因。2. 硬件平台搭建PJ85718DM 怎么挂到 PIC18F45K40 的总线上2.1 系统拓扑和 I2C 地址规划整体结构是一条 I2C 主总线主器件是 PIC18F45K40从器件是两片 PJ85718DM。本地传感器紧贴主控板走线距离控制在 10cm 以内远程传感器需要放在风道或设备远端走线长度最长时要到 2 米左右。两片传感器的 7 位 I2C 地址由硬件引脚 A0、A1、A2 决定本地传感器A00A10A20地址 0x48远程传感器A01A10A20地址 0x49。I2C 地址是在传感器上电时采样三个引脚电平来确定所以不要热插拔远程探头否则可能读到错误地址。这也是我在接线端子上特别标注“断电后插拔”的原因。2.2 PJ85718DM 的引脚连接与 PCB 布局细节PJ85718DM 这类 I2C 温度传感器一般引脚不多但布局布线要注意几点。VDD 和 GND 之间必须放一个 0.1 uF 陶瓷电容而且尽量靠近芯片电源脚否则转换瞬间的电流尖峰会在总线上产生噪声。SDA 和 SCL 是开漏结构外部必须接上拉电阻上拉电阻公共段接到 VDD我这边选的是 4.7 kΩ具体为什么后面第 5 节详细说。传感器布置位置上本地传感器不要放在 MCU、电源芯片或者继电器正上方这些热源会带来好几度的测量偏差。最好的位置是板边缘通风良好、远离大功率器件的地方。远程传感器若是放在风道中建议加一段热缩管或专用探头护套保护避免冷凝水滴直接落到芯片焊盘上造成短路。2.3 PIC18F45K40 侧的资源分配PIC18F45K40 的 MSSP1 外设可以作为 I2C 主机运行对应引脚 SCL1 和 SDA1我用的引脚是 RC0、RC1。这两个引脚要配置成数字输入模式同时把对应的模拟选择位清零否则模拟输入功能会占用引脚导致 I2C 信号无法正常读入。我分配的资源很简单MSSP1 用于 I2C定时器 Timer0 作为秒级任务调度基准数据 EEPROM 保存设定温度和校准值SPI 外设空出来备用。这样安排的好处是主控芯片还有一大半资源可以留给后续功能比如接入 RS485 或者 OLED 显示不用重新改选型。3. I2C 通信实现读寄存器、温度换算与多路轮询3.1 初始化 MSSP 为 I2C 主机模式PIC18F45K40 的 MSSP 模块初始化并不复杂关键是波特率寄存器的计算。I2C 主机模式的波特率公式是F_SCL F_OSC / (4 * (SSP1ADD 1))如果系统时钟用内部 16 MHz想得到 100 kHz 的标准 I2C 速率那么SSP1ADD 16 MHz / (4 * 100 kHz) - 1 39初始化代码可以写成下面这样void i2c1_init(void) { TRISCbits.TRISC0 1; // SCL1 输入模式开漏由外部上拉 TRISCbits.TRISC1 1; // SDA1 输入模式 ANSELCbits.ANSC0 0; // 关闭模拟输入复用 ANSELCbits.ANSC1 0; SSP1STAT 0x00; SSP1CON1 0x08; // I2C F/4 主模式基础设置 SSP1CON1bits.SSPEN 1; // 使能 MSSP1 SSP1ADD 39; // 100 kHz 16 MHz }实际项目里我并没有一开始就上 400 kHz。远程探头线长 2 米时总线电容会明显增大高速模式下波形边缘变差还会引入偶发错误。所以我坚持先按 100 kHz 跑通全流程再做优化这是做长线 I2C 最稳妥的姿势。3.2 读取温度寄存器并换算成摄氏度大多数 I2C 数字温度传感器都遵循一个通用寄存器布局0x00 是温度寄存器0x01 是配置寄存器0x02/0x03 分别是低温阈值和高温阈值。PJ85718DM 也是这个思路温度数据是两字节其中只有高 12 位有效低 4 位固定为 0。也就是说每 1 LSB 代表的温度值是0.0625 ℃ 625 / 10000 ℃下面是读取一个传感器温度并换算为毫摄氏度的函数int16_t read_temperature(uint8_t slave_addr) { uint8_t msb, lsb; uint8_t raw12; // 起始条件 SSP1CON2bits.SEN 1; while (SSP1STATbits.R_nW); // 写从机地址 写位 SSP1BUF (slave_addr 1) | 0; while (!SSP1STATbits.BF); // 指向温度寄存器 SSP1BUF 0x00; while (!SSP1STATbits.BF); // 重复起始条件 SSP1CON2bits.RSEN 1; while (SSP1STATbits.R_nW); // 写从机地址 读位 SSP1BUF (slave_addr 1) | 1; while (!SSP1STATbits.BF); msb SSP1BUF; SSP1CON2bits.ACKDT 0; // 发送 ACK SSP1CON2bits.ACKEN 1; while (SSP1CON2bits.ACKEN); lsb SSP1BUF; SSP1CON2bits.ACKDT 1; // 最后一字节发 NACK SSP1CON2bits.ACKEN 1; while (SSP1CON2bits.ACKEN); // 停止条件 SSP1CON2bits.PEN 1; while (SSP1CON2bits.PEN); raw12 (int16_t)((msb 8) | lsb) 4; if (raw12 0x0800) { raw12 - 0x1000; // 负数补码处理 } return (int16_t)(raw12 * 625L / 10L); // 单位 m℃ }只要read_temperature(0x48)和read_temperature(0x49)分别调用就能拿到本地和远程两路温度。负数情况在制冷系统除霜阶段会真实发生比如蒸发器温度可能到 -5℃所以补码处理不能省。3.3 多路轮询策略与数据有效性判定两块传感器轮流读取间隔 200 ms。每次读取之前要先判断上一次传输是否完成避免状态机错乱。读取完成后我会做三个快速检查读数是否落在量程内比如 -55℃~125℃连续两次读数跳变是否超过 10℃如果超过则视为异常总线是否有 ACK 失败标志。如果某一路连续 3 次读取失败就上报错误状态同时暂时只使用另一路温度做控制避免系统因单点故障直接停机。这两路温度在同一时刻还会互相校验如果本地和远程温差超过 20℃基本可以判定某个探头位置不合适需要在日志里记录下来方便售后排查。4. 从温度到动作HVAC 控制里的滞回、压缩机保护与参数存储4.1 为什么不能只靠一个阈值启停很多刚开始做空调控制的人会写成这样温度大于 27℃ 启动制冷小于 27℃ 停止制冷。这样做的结果是只要温度在 27℃ 附近抖动输出就会在启动和停止之间来回切换。继电器频繁吸合放弧压缩机短时间内反复启动寿命大打折扣。正确做法是滞回控制设置一个目标温度和一个滞回区间。制冷模式下温度升到“目标 回差”才启动降到“目标 - 回差”才停止。我用的是目标 27℃、回差 2℃ 的参数即 29℃ 启动25℃ 停止。这个 4℃ 的跨度让压缩机启停周期明显拉长基本符合空调实际运行节奏。4.2 压缩机保护是最容易被忽略的硬约束HVAC 控制不光是温度算法压缩机保护优先级要高于一切。制冷系统停机后高压侧和低压侧需要一个压差平衡时间如果立刻重新启动压缩机可能带载启动甚至液击损坏。行业常见的保护时间是 3 分钟我做项目时分数两个维度最短停机时间一旦压缩机停止至少 180 秒内不允许重新启动最短运行时间一旦启动至少 60 秒内不允许停止防止温度临界点抖动造成短循环。这两个时间由软件定时器独立计数定时器优先级高于温度比较。也就是说即使远程温度已经降到停止阈值只要最短运行时间没有走满压缩机也不能停。这个细节是 HVAC 控制区别于普通嵌入式温控的关键点也是我在现场吃过亏之后才真正重视起来的。4.3 参数保存到内部数据 EEPROMPIC18F45K40 内部带数据 EEPROM这个不出奇但很实用。我把目标温度、滞回回差、温度校准偏移量、压缩机保护时间都保存在 EEPROM 里。程序上电时先读出来直接用 EEPROM 里的值做主逻辑。这样改参数只要通过调试接口写一次以后断电重启都保留不用每次烧录固件。EEPROM 有擦写寿命限制我做了两个保护措施一是只有参数实际变化时才写 EEPROM避免上电即写二是把参数写入做成“写入确认 回读校验”防止异常掉电导致半写状态。控制器在现场长期运行下来EEPROM 写入次数很少寿命风险可以忽略。5. 远程布线的现实坑长线电容、干扰与总线恢复5.1 一次典型故障的完整排查链路系统集成到现场第一周反馈说远程温度偶尔跳到 125℃量程上限然后又恢复正常。刚开始我怀疑是传感器质量问题换了一片新的故障依旧。接着怀疑是接线端子接触不良重新压接了一遍还是偶发。最后用示波器看 SDA 线上的波形发现上升沿非常平缓高电平始终达不到阈值电压。问题根源一下就清楚了2 米导线引入的电容让 I2C 信号上升时间变得过长SCL 高电平可能还没稳定从机已经采样导致数据错位。这个坑在板级 I2C 通信里很少见因为板内走线电容极小。但一旦把传感器挪到远端线缆电容就是实实在在的敌人。I2C 是开漏输出只能被动下拉高电平靠外部上拉电阻把线路拉上去。线路越长电容越大同样电阻下拉就越慢波形就越丑。5.2 上拉电阻怎么选才合理I2C 上拉电阻并不是随便拿一个 10k 完事。标准 I2C 模式规定上升沿时间最大为 1 μs100 kHz 模式上拉电阻、总线电容、上升时间三者的关系近似为t_rise ≈ 0.8473 × R_p × C_bus我测量现场总线电容大约是 320 pF如果继续用 4.7 kΩ 上拉上升时间约 1.27 μs超出上限。改成 2.2 kΩ 后估算值降到约 0.6 μs。再把 SCL 从 100 kHz 降到 50 kHz信号余量充足问题彻底消失。经验计算公式是C_bus 单位长度电容 × 线长 每个传感器引脚电容 主控引脚电容实际设计时我给远程传感器选择的典型上拉电阻为 2.2 kΩ 到 3.3 kΩ本地传感器依然保留 4.7 kΩ。注意上拉电阻也不能一味减小太小会导致输出低电平灌电流过大超过芯片允许值。最稳妥的办法是用示波器实测波形确保高电平不低于 VDD×0.7低电平不高于 VDD×0.3。5.3 软件层的抗干扰兜底手段硬件调整之后我还在软件里做了三层抗干扰第一每次读取连续采样 3 次取中值作为有效温度第二读出值如果超过量程上限或者出现全 0立即重试连续失败累计到一定次数才报错第三万一从机拉低 SDA 不放导致总线卡死手动把 SDA、SCL 配回普通 GPIO在 SCL 上连续输出 9 个脉冲强制复位从机的总线状态。前两种手段绝大多数场景都够用第三种属于协议规范里没明说的土办法但实际排障时确实救过我一次。6. 低功耗与扩展规划嵌入式场景还可以继续做下去6.1 实测功耗和采样策略这个项目如果做成电池供电的无线温湿度采集节点功耗优化就不能不考虑。PJ85718DM 在正常转换时电流在几百微安级别但让它一直连续转换就没必要了。它可以进入关断模式需要读数时由 PIC18F45K40 的定时器唤醒发一条命令启动转换延时后再读寄存器。这样采样间隔拉到 10 秒一次平均电流可以压到个位数微安级比持续转换低两个数量级。PIC18F45K40 自身休眠电流也不大我实测整体待机在 10 μA 以内不含无线模块和继电器。这个数据对空调面板、电池传感器这类产品足够友好。关键点在于不要每隔几毫秒就去读一次温度温度本身是缓慢变量10 秒采样对 HVAC 和大多数嵌入式监测场景完全够用。6.2 从双路走向多路区域管理这次只做了本地和远程两路但 I2C 总线结构上完全可以扩展到更多路。每片 PJ85718DM 的 A0/A1/A2 有 8 种组合意味着同一条总线上最多可以挂 8 个传感器适合多区域房间的独立温控。用 PIC18F45K40 做主机轮询地址从 0x48 到 0x4F就能覆盖全部 8 个探头。配合 RS485 模块还能把每路温度上报到楼宇监控系统扩展成一个简单但可靠的多点温度采集网络。如果以后需要更平滑的温控效果可以考虑把当前用的滞回 ON/OFF 控制改成 PID 输出用 PWM 方式控制风机转速或调节阀门开度。这个改动需要额外增加驱动接口但滤波后的温度数据、多探头平均算法都已经在我的代码框架里预留了位置。6.3 给后来者的一点使用心得做这类项目我的个人体会是先把 I2C 底层通信跑稳定再往上层叠加控制逻辑。很多新手一上来就调 PID 或者写 UI结果底层数据偶尔跳一个异常值所有上层决策全部乱套。温度监测系统的核心指标不是“看起来准”而是“长时间稳定、可重现、可诊断”。定时把两路温度的原始值、换算值、控制状态和错误计数记录到日志能让后续维护省掉大量沟通成本。传感器位置选不好、线缆太长导致上升沿劣化这类问题只靠写代码是永远无法弥补的硬件上的容错和测试手段必须同步跟上。

相关新闻

800V/1000A下SiC模块调试五维校准实战指南

800V/1000A下SiC模块调试五维校准实战指南

1. 项目概述:当母线电压跳到800V、电流冲上1000A,SiC模块不是“换上去就能用”的零件“800V母线、千安级电流,SiC模块究竟该怎样调?”——这句话最近在多个电力电子工程师群和某高校电力变换实验室的晨会上反复出现。它不像“怎么…

2026/10/10 20:19:07 阅读更多 →
Go+Odoo实现物联网告警自动转ERP工单的实战方案

Go+Odoo实现物联网告警自动转ERP工单的实战方案

1. 项目概述:当物联网告警撞上ERP工单,中间缺的不是代码,是业务逻辑的翻译器“我用 Go Odoo 做了一个物联网平台:设备异常,能自动变成 ERP 里的一张维修单”——这句话乍看像技术堆砌,实则藏着制造业、能源…

2026/10/10 20:19:07 阅读更多 →
革 DeepSpeed 的命?higgsfield 的 CTA 感知调度器,正在把 LLM 训练的“最后一公里“卷起来

革 DeepSpeed 的命?higgsfield 的 CTA 感知调度器,正在把 LLM 训练的“最后一公里“卷起来

革 DeepSpeed 的命?higgsfield 的 CTA 感知调度器,正在把 LLM 训练的"最后一公里"卷起来 【免费下载链接】higgsfield Fault-tolerant, highly scalable GPU orchestration, and a machine learning framework designed for training models w…

2026/10/10 20:18:06 阅读更多 →

最新新闻

Rust Web框架实测:Salvo与axum对比,24小时快速开发CRUD接口

Rust Web框架实测:Salvo与axum对比,24小时快速开发CRUD接口

如果你最近在 Rust 里挑 Web 框架,应该会经历一段很具体的纠结期:axum 文档最全、生态最大,actix-web 性能名声在外,Rocket 的宏写法接近魔法。我原来一直偏向 axum,直到上周接了个小需求,要三天内把一个内…

2026/10/10 20:57:40 阅读更多 →
Secure Boot状态不一致:固件启用但Linux显示禁用的原理与诊断

Secure Boot状态不一致:固件启用但Linux显示禁用的原理与诊断

1. 现象本身不是Bug,而是两套独立状态系统的自然结果你刚进BIOS/UEFI设置界面,一眼就看到Secure Boot选项旁边清清楚楚标着「已启用」——绿色对勾、高亮文字、甚至还有个锁形图标。你松了口气,重启进Linux系统,随手敲下mokutil -…

2026/10/10 20:57:40 阅读更多 →
学习型索引:用轻量神经网络替代B-Tree的原理与实践

学习型索引:用轻量神经网络替代B-Tree的原理与实践

1. 项目概述:当索引本身开始“学习”数据分布你有没有遇到过这样的场景:数据库查一个范围查询,明明只想要100条记录,B-Tree却要从根节点一路遍历到叶子页,反复做磁盘随机IO,最后发现90%的页读进来只是用来跳…

2026/10/10 20:57:40 阅读更多 →
Python实现配电网经济性与可靠性双目标协同优化规划

Python实现配电网经济性与可靠性双目标协同优化规划

搞配电网规划的朋友,应该都体会过经济性和可靠性"打架"的感觉。传统工作流里,这两个维度往往是串行处理:先按年费用最小去定线路和容量,再用N-1准则或可靠性导则去校核,不够就加设备、加大截面,来…

2026/10/10 20:57:40 阅读更多 →
机器学习课程设计:Python垃圾分类系统源码解析与实战避坑指南

机器学习课程设计:Python垃圾分类系统源码解析与实战避坑指南

简介:这份Python垃圾分类系统课程设计源码包,面向机器学习课程设计学生及垃圾分类入门开发者,提供一套从模型训练到界面演示的完整个人大作业方案。项目基于TensorFlow 2.3,核心包括MobileNet模型训练脚本、窗口端垃圾分类测试程序…

2026/10/10 20:57:40 阅读更多 →
共聚焦显微镜与激光共聚焦有什么区别?选型与实操全解析

共聚焦显微镜与激光共聚焦有什么区别?选型与实操全解析

直接抛一个问题:你实验室里那台写着“共聚焦显微镜”的仪器,和你师弟论文里写的“激光共聚焦显微镜”,到底是不是同一个东西?如果只是名称长了三个字,为什么采购单上价格能差出一倍?很多刚接触显微成像的同…

2026/10/10 20:56:40 阅读更多 →

日新闻

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

卫星轨道分类全解析:从LEO到GEO的选型逻辑与工程实践

1. 从“卫星轨道分类”这个标题说起:为什么值得花时间搞懂第一次接触“卫星轨道分类”这个概念,很多人会觉得它离自己很远——不就是天上的星星怎么转吗?但如果你正在做航天任务规划、遥感数据接收、星座设计,甚至只是准备一场航天…

2026/10/10 0:00:39 阅读更多 →
Spring AOP 核心原理与实战:从概念到日志切面落地

Spring AOP 核心原理与实战:从概念到日志切面落地

1. 从一个真实痛点说起:为什么你的代码里到处都是重复逻辑刚入行那会儿,我写过一个用户管理模块,注册、登录、改密码、注销四个接口。每个接口里都塞了几乎一样的日志打印、参数校验、事务开启和提交。当时觉得没什么,能跑就行。直…

2026/10/10 0:00:40 阅读更多 →
Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

Python招聘数据采集与分析可视化:从采集清洗到薪资技能城市可视化全链路

简介:这是一套面向计算机相关专业学生与项目实战学习者的Python数据采集与分析可视化完整项目,以Boss直聘岗位数据为对象,适合用作毕业设计、课程设计或期末大作业。资源包共38个文件,约246KB,以13个py源码文件为核心&…

2026/10/10 0:00:40 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:25 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 1:36:08 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 11:14:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 5:23:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/10 10:38:42 阅读更多 →