基于树莓派的智能灌溉控制器:从硬件选型到调度算法实战
1. 项目缘起与核心需求拆解1.1 为什么我要自己做一个灌溉控制器家里有个小院子种了些番茄、辣椒和几棵果树每年夏天最头疼的事情就是浇水。出差三天回来叶子全蔫了周末想睡个懒觉脑子里还惦记着早上六点要开阀门。市面上能买到的成品灌溉控制器我也研究过便宜的只能定时不管天气贵一点的带WiFi和雨量传感器但动辄上千块而且App体验一言难尽数据还在别人的服务器上。后来我翻到了Sprinqua这个项目它是一个跑在Raspberry Pi上的智能灌溉控制器方案。简单说就是用一块树莓派作为大脑接上电磁阀、土壤湿度传感器、雨量传感器再写一套调度逻辑让浇水这件事完全自动化。它解决的核心问题就三个第一根据土壤实际湿度决定浇不浇而不是死板地按时间表第二结合天气预报自动跳过即将下雨的时段第三所有数据留在本地不依赖任何云服务。这个项目适合谁呢如果你家里有Raspberry Pi在吃灰有个小花园或者几盆比较娇贵的植物又愿意花一个周末折腾一下硬件和代码那Sprinqua的思路非常值得参考。即使你不想完全照搬里面关于传感器选型、阀门驱动、调度算法的设计也很有借鉴意义。1.2 Sprinqua的核心设计哲学我仔细研究了Sprinqua的设计思路发现它和市面上大多数灌溉控制器有一个根本区别它把“决策”和“执行”分得很清楚。很多廉价控制器是定时器直接驱动阀门到点就开没有任何判断。Sprinqua的做法是有一个调度引擎每隔一段时间跑一次综合土壤湿度读数、未来降雨概率、当前温度、上次浇水时间等多个输入决定是否要启动某个区域的阀门。这种设计的好处是扩展性极强。你想加一个“如果风速超过多少就跳过”的规则只需要在决策层加一个条件判断不用动底层的阀门驱动代码。另一个好处是安全性即使决策层出了bug底层驱动也有超时保护不会出现阀门一直开着把院子淹了的情况。从技术栈来看Sprinqua选择了Python作为主要开发语言这在Raspberry Pi生态里是最自然的选择。GPIO控制用RPi.GPIO或者gpiozero库传感器读取用对应的Python驱动调度用APScheduler或者自己写一个简单的循环。数据库方面SQLite足够用了存一些历史湿度数据和浇水记录方便后续分析。注意灌溉系统涉及水和电的混合安全永远是第一位的。树莓派和继电器模块必须放在防水盒里电磁阀的电源要和树莓派电源完全隔离否则一旦漏水可能导致短路甚至火灾。2. 硬件选型与接线实操2.1 核心组件清单与选型理由我按照Sprinqua的思路结合自己实际采购的经验整理了一份组件清单。这里面的每一个选择都有具体的理由不是随便凑的。组件推荐型号/规格选型理由大致成本主控板Raspberry Pi 4B 2GB性能足够GPIO丰富社区支持好300-400元继电器模块4路5V光耦隔离继电器光耦隔离保护树莓派4路可控制4个区域20-30元电磁阀12V DC常闭型常闭设计断电自动关闭安全30-50元/个土壤湿度传感器电容式如SEN0193电容式不易腐蚀电阻式用几个月就烂了15-25元/个雨量传感器翻斗式或电阻式翻斗式精度高电阻式便宜够用10-50元电源12V 5A开关电源给电磁阀供电余量充足30-50元降压模块LM2596可调降压把12V降到5V给树莓派供电5-10元防水盒IP65 ABS塑料盒保护所有电子部件20-40元这里重点说一下土壤湿度传感器的选择。我一开始图便宜买了电阻式的两个探针插在土里靠电阻变化测湿度。结果用了不到两个月探针就明显腐蚀了读数飘得厉害。后来换了电容式的它表面有一层绝缘涂层不和土壤直接发生电化学反应寿命长很多。虽然贵了几块钱但省心太多了。电磁阀我选的是常闭型意思是断电的时候阀门是关着的。这个选择很关键万一树莓派死机了、程序崩溃了、或者停电了阀门会自动关闭不会一直浇水。如果你选常开型断电反而会一直放水那就麻烦了。2.2 接线图与安全隔离要点接线这块我踩过坑所以说得细一点。整个系统有两套电源12V给电磁阀5V给树莓派。这两个电源必须共地但不共正也就是说12V电源的负极要和降压模块的输入负极连在一起但12V的正极只去电磁阀不直接进树莓派。具体接线步骤12V开关电源的输出正极接到继电器模块的公共端COM负极接到电磁阀的一端。电磁阀的另一端接到继电器模块的常开端NO。这样当继电器吸合时COM和NO导通12V电流通过电磁阀阀门打开。12V电源的正负极同时接到LM2596降压模块的输入端调节电位器使输出为5.1V左右接到树莓派的GPIO 5V引脚和GND引脚。树莓派的GPIO引脚比如GPIO 17、27、22、23接到继电器模块的IN1-IN4。土壤湿度传感器的信号线接到树莓派的ADC如果用的是模拟传感器或者直接接GPIO如果是数字输出的。树莓派没有模拟输入引脚所以模拟传感器需要加一个MCP3008这样的ADC芯片。提示继电器模块的VCC和GND也要接到树莓派的5V和GND但注意继电器的驱动电流可能比较大如果同时吸合多个继电器导致树莓派重启可以考虑给继电器模块单独供电只共地不共5V。我实际测试下来4路继电器同时吸合的时候树莓派4B的5V引脚电压会从5.1V掉到4.8V左右还在安全范围内。但如果你用的是树莓派Zero可能就要注意了最好给继电器单独供电。3. 软件架构与核心代码实现3.1 整体软件架构设计Sprinqua的软件部分我按照自己的理解重新组织了一下分成四个层次每层职责清晰方便调试和扩展。第一层是硬件抽象层负责和GPIO、传感器打交道。这一层提供简单的接口比如read_soil_moisture(channel)返回湿度百分比open_valve(zone)打开某个区域的阀门。上层代码不需要知道底层用的是哪个GPIO库也不需要知道传感器的具体型号。第二层是数据层用SQLite数据库存储所有历史数据。我建了三张表sensor_readings存传感器读数irrigation_events存每次浇水的记录config存系统配置。这样我可以随时查询过去一周的湿度变化分析浇水策略是否合理。第三层是决策层这是整个系统的大脑。它定期运行读取最新传感器数据查询天气预报然后根据一套规则决定是否要浇水。规则可以很简单也可以很复杂取决于你的需求。第四层是调度层用APScheduler或者简单的while True循环每隔一定时间触发决策层运行。同时它也负责处理一些定时任务比如每天凌晨清理旧数据。这种分层设计的好处是每一层都可以单独测试。比如我想测试决策逻辑可以模拟传感器数据输入不需要真的接硬件。我想换一个土壤湿度传感器只需要改硬件抽象层的代码上层完全不受影响。3.2 土壤湿度读取与校准电容式土壤湿度传感器输出的是模拟电压需要经过ADC转换成数字值。我用的是MCP30088通道10位ADC通过SPI接口和树莓派通信。接线方式这里不展开网上教程很多重点说一下校准。传感器在空气中读到的值和在水中读到的值差别很大而且每个传感器个体之间也有差异。所以拿到传感器后第一件事是校准# 校准脚本示例 import spidev import time spi spidev.SpiDev() spi.open(0, 0) spi.max_speed_hz 1000000 def read_adc(channel): if channel 0 or channel 7: return -1 r spi.xfer2([1, (8 channel) 4, 0]) return ((r[1] 3) 8) r[2] # 把传感器放在空气中读取最大值 print(请将传感器置于空气中5秒后读取...) time.sleep(5) air_value read_adc(0) print(f空气中读数: {air_value}) # 把传感器插入水中读取最小值 print(请将传感器插入水中5秒后读取...) time.sleep(5) water_value read_adc(0) print(f水中读数: {water_value}) # 计算湿度百分比 def moisture_percent(raw): # 注意空气中读数大水中读数小 percent (air_value - raw) / (air_value - water_value) * 100 return max(0, min(100, percent))我实测下来空气中读数大概在850左右水中读数在350左右。但这个值会随供电电压和温度变化所以建议每隔几个月重新校准一次。另外传感器不要一直通电否则会加速老化。我的做法是只在读取的时候给传感器供电读完立刻断电用一个GPIO控制传感器的电源。3.3 阀门控制与超时保护阀门控制看起来简单就是开和关但实际写代码的时候有几个坑要注意。第一个坑是继电器模块的触发电平。有些继电器是低电平触发有些是高电平触发。买的时候要看清楚代码里也要对应设置。我用的模块是低电平触发所以GPIO.output(pin, GPIO.LOW)是打开阀门GPIO.HIGH是关闭。第二个坑是同时打开多个阀门。如果4个区域同时浇水总电流可能超过电源的额定输出导致电压下降甚至电源保护。我的做法是加一个互斥锁同一时间只允许一个阀门打开。如果你确实需要同时浇多个区域要确保电源功率足够。第三个坑是超时保护。程序可能因为各种原因卡住如果这时候阀门是开着的就会一直浇水。所以我在硬件抽象层加了一个看门狗机制import threading import RPi.GPIO as GPIO class ValveController: def __init__(self, pins, max_open_time1800): self.pins pins self.max_open_time max_open_time # 最大开启时间秒 self.timers {} for pin in pins: GPIO.setup(pin, GPIO.OUT) GPIO.output(pin, GPIO.HIGH) # 默认关闭 def open_valve(self, zone): pin self.pins[zone] GPIO.output(pin, GPIO.LOW) # 启动超时定时器 timer threading.Timer(self.max_open_time, self.force_close, args[zone]) timer.start() self.timers[zone] timer def close_valve(self, zone): pin self.pins[zone] GPIO.output(pin, GPIO.HIGH) if zone in self.timers: self.timers[zone].cancel() del self.timers[zone] def force_close(self, zone): print(f区域{zone}超时强制关闭) self.close_valve(zone)这个max_open_time我设的是30分钟因为我的院子最大区域浇透也就20分钟左右。超过30分钟肯定不正常强制关闭并记录日志。3.4 智能调度算法的实现调度算法是Sprinqua最核心的部分。我的实现思路是这样的每天早上6点和晚上6点系统运行一次决策流程。对于每个区域依次检查以下条件土壤湿度是否低于阈值。如果湿度高于阈值比如60%说明不缺水跳过。未来12小时降雨概率是否超过阈值。如果超过60%说明可能要下雨跳过。距离上次浇水是否超过最小间隔。比如至少间隔8小时防止过度浇水。当前温度是否在合理范围。如果低于5度或高于40度跳过因为极端温度下浇水对植物不好。只有所有条件都满足才会启动浇水。浇水时长根据土壤湿度和目标湿度的差值动态计算def calculate_duration(current_moisture, target_moisture, area_sqft): # 基础时长每平方英尺需要0.5分钟来提升1%湿度 # 这个系数需要根据你的土壤类型和喷头流量调整 base_rate 0.5 # 分钟/平方英尺/百分比 deficit max(0, target_moisture - current_moisture) duration deficit * area_sqft * base_rate # 限制在1到30分钟之间 return max(1, min(30, duration))这个base_rate系数需要你自己实测调整。我的做法是先设一个保守的值浇一次水后等2小时让水分渗透均匀再读一次湿度看看提升了多少然后反推系数。比如浇了10分钟湿度从30%升到45%面积是20平方英尺那base_rate 10 / (15 * 20) 0.033。多测几次取平均就比较准了。天气预报我用的是OpenWeatherMap的免费API每天调用次数有限制所以我把结果缓存6小时。如果API调用失败就降级为“不参考天气”只根据土壤湿度决策。4. 常见问题与排查实录4.1 传感器读数异常排查土壤湿度传感器用久了最常见的问题就是读数不准或者跳动。我整理了一个排查流程现象可能原因排查方法解决方案读数一直是0或100传感器没接好或损坏用万用表测传感器输出检查接线更换传感器读数跳动大电源干扰或接触不良示波器看电源纹波加滤波电容重新插拔读数逐渐漂移传感器老化或土壤盐分积累对比新传感器读数更换传感器冲洗土壤不同传感器读数差异大个体差异未校准分别校准每个传感器单独记录校准值我遇到过一次读数一直显示100%的情况查了半天发现是传感器探针上沾了泥形成了一层导电膜相当于短路了。用砂纸轻轻打磨一下探针表面就好了。所以建议每隔一两个月把传感器拔出来检查一下清理干净再插回去。4.2 阀门不动作或关不严阀门的问题一般出在三个地方继电器、电源、阀门本身。继电器不吸合先听声音正常的继电器吸合会有“咔嗒”一声。如果没有声音用万用表测继电器线圈两端电压看是不是5V。如果没有电压检查树莓派GPIO输出如果有电压但不吸合继电器坏了。阀门打开但水流很小可能是水压不够或者阀门滤网堵了。检查水源压力拆开阀门清洗滤网。阀门关不严一直滴水这是最危险的可能把院子淹了。常见原因是阀门内部有杂质卡住了膜片。拆开阀门清理或者在水路前端加一个过滤器。我现在的做法是在总进水口加了一个120目的Y型过滤器从此再没出现过关不严的问题。提示电磁阀建议每年检查一次膜片如果发现老化变硬就换掉。膜片是易损件几块钱一个别等漏水了才后悔。4.3 系统稳定性与日志分析树莓派长时间运行可能会遇到内存泄漏、SD卡损坏、网络断开等问题。我的经验是第一用只读文件系统。把根文件系统挂载为只读所有需要写入的数据放到一个单独的U盘或者网络存储上。这样即使突然断电SD卡也不会损坏。我之前的树莓派就因为断电导致SD卡文件系统损坏重装了三次系统后来改成只读就再没出过问题。第二加看门狗。树莓派自带硬件看门狗可以设置成如果系统卡死超过一定时间就自动重启。在/boot/config.txt里加一行dtparamwatchdogon然后在系统里启用systemd的看门狗服务。第三日志分级。我用Python的logging模块把日志分成DEBUG、INFO、WARNING、ERROR四个级别。正常运行时只记录INFO以上调试的时候开DEBUG。日志文件按天切割保留最近30天。这样出问题的时候可以快速定位又不会把存储塞满。我还会在数据库里记录每次决策的详细过程包括当时的湿度、温度、降雨概率、决策结果和理由。这样过一段时间回头看就能知道系统为什么做了某个决定方便优化参数。5. 进阶扩展与个人心得5.1 可以继续折腾的方向Sprinqua的基础功能跑通之后还有很多可以扩展的方向。我自己尝试过几个效果不错。增加流量传感器在主管路上加一个霍尔式流量传感器可以精确测量每次浇水用了多少水。结合水费单价就能算出每个月浇花花了多少钱。更重要的是如果流量异常比如突然变大说明管路可能破了可以及时报警。接入Home Assistant把树莓派上的数据通过MQTT推送到Home Assistant就能在手机上看湿度曲线、手动控制阀门、设置自动化规则。Home Assistant的界面比我自己写的Web页面好看多了而且支持语音控制。太阳能供电如果院子离房子比较远拉线不方便可以用一块20W的太阳能板加一个12V蓄电池给系统供电。电磁阀是脉冲工作的耗电不大一块20Ah的电池加太阳能板足够连续阴雨天用一周。多区域独立控制我目前是4个区域每个区域可以独立设置湿度阈值和浇水时长。如果你有更多区域可以级联多个继电器模块树莓派的GPIO不够就用MCP23017扩展一个芯片可以多出16个IO口。5.2 我踩过的坑和总结的经验最后分享几个我实际踩过的坑希望能帮你省点时间和钱。坑一电磁阀的浪涌电压。电磁阀是感性负载断电瞬间会产生很高的反向电压可能击穿继电器或者干扰树莓派。我一开始没注意结果树莓派经常莫名其妙重启。后来在电磁阀两端并联了一个续流二极管1N4007就行问题就解决了。如果你用的是交流电磁阀要并联一个RC吸收电路。坑二土壤湿度传感器的供电。前面提过传感器不要一直通电。我一开始图省事把传感器电源直接接在5V上结果不到一个月探针就腐蚀得不成样子。后来改成用GPIO控制传感器电源只在读取前1秒通电读完立刻断电寿命长了很多。坑三浇水时间的设置。我一开始把浇水时间设在中午觉得中午热植物需要水。后来查资料才知道中午浇水蒸发损失大而且水滴在叶子上像放大镜一样可能灼伤叶片。最佳浇水时间是清晨这时候温度低、风小、蒸发少水分能充分渗透到根部。坑四不要过度依赖自动化。系统跑起来之后我有一段时间完全不管了结果有一周连续阴天系统根据降雨概率一直跳过浇水但实际没下多少雨植物差点旱死。后来我加了一个“最大连续跳过天数”的限制不管天气预报怎么说超过3天没浇水就强制浇一次。自动化是辅助定期去院子里看看植物状态才是根本。这个项目从开始做到稳定运行大概花了我三个周末的时间。硬件采购和接线一个周末写代码和调试一个周末优化参数和加各种保护机制又一个周末。现在每天早上听着继电器“咔嗒”一声看着水慢慢渗进土里那种感觉还是挺满足的。如果你也有个小院子不妨试试这个方案比买成品有意思多了而且完全按自己的需求来。

相关新闻

树莓派智能灌溉系统Sprinqua:从硬件选型到数据驱动灌溉的完整实践

树莓派智能灌溉系统Sprinqua:从硬件选型到数据驱动灌溉的完整实践

1. 从一块吃灰的树莓派到全自动灌溉系统:Sprinqua 到底解决了什么问题如果你手头有一块 Raspberry Pi,大概率它正躺在抽屉里吃灰——当初买来想学 Python、想搭 NAS、想做家庭自动化中枢,结果折腾两天就搁置了。我自己的那块 Pi 4B 也是这样&…

2026/10/11 19:10:14 阅读更多 →
Java框架 SpringCloud 快速入门: Feign 替代 RestTemplate 实现声明式远程调用

Java框架 SpringCloud 快速入门: Feign 替代 RestTemplate 实现声明式远程调用

概述 上一篇用 RestTemplate LoadBalanced 打通了 order-service 到 user-service 的远程调用,能用,但写法笨重。本文用 Feign 把远程调用改造成"调本地方法"的体验,四步完成改造,并顺手把底层原理和常见的启动坑讲清…

2026/10/11 19:10:13 阅读更多 →
VSCode插件路径设置全攻略:从默认目录到自定义扩展位置的完整配置指南

VSCode插件路径设置全攻略:从默认目录到自定义扩展位置的完整配置指南

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

2026/10/11 11:21:39 阅读更多 →

最新新闻

综合能源系统双层优化调度策略复现与Matlab实现解析

综合能源系统双层优化调度策略复现与Matlab实现解析

1. 项目概述与选题背景1.1 为什么"核心期刊复现"这么让人头大先说结论:复现一篇综合能源系统方向的核心期刊论文,很多时候比自己在原有框架上加一个新目标函数更痛苦。原因很简单,期刊正文里给出的公式是从定稿模型中截取的"高…

2026/10/13 7:59:25 阅读更多 →
文件二维码生成与应用全指南

文件二维码生成与应用全指南

1. 为什么需要文件二维码?在办公室经常遇到这样的场景:同事需要你刚做好的PPT,微信传输有大小限制;客户索要产品手册,发邮件又担心对方没空下载;团队协作时,大体积的设计稿在群里刷屏影响沟通。…

2026/10/13 7:59:25 阅读更多 →
深入理解数据库事务隔离级别:从脏读幻读到MVCC与锁机制

深入理解数据库事务隔离级别:从脏读幻读到MVCC与锁机制

做后端开发这些年,面试过不少人,也在不少技术群里看到过讨论,只要聊到数据库事务,隔离级别这个话题几乎必被提起。问一句"事务的隔离级别你知道几个",大部分人都能脱口而出四个答案:读未提交、读…

2026/10/13 7:59:25 阅读更多 →
杰理蓝牙模块与小米电视回连问题解决方案

杰理蓝牙模块与小米电视回连问题解决方案

1. 问题现象与背景分析最近在调试杰理蓝牙模块与小米电视的配对连接时,遇到了一个典型问题:设备在首次成功配对后,再次开机时无法自动回连。这种情况在智能家居和影音设备互联场景中相当常见,特别是使用第三方蓝牙方案对接品牌设备…

2026/10/13 7:59:25 阅读更多 →
Redis与RDM可视化客户端安装配置实战:从下载到连接全攻略

Redis与RDM可视化客户端安装配置实战:从下载到连接全攻略

这两年做后端和运维的朋友应该都有同感,Redis这名字基本天天见。缓存、分布式锁、排行榜、消息队列,哪里都有它。但很多刚接触Redis的人,第一步往往不是学命令,而是卡在“怎么下载”“怎么安装”“怎么连上”这三件事上。尤其是Wi…

2026/10/13 7:59:25 阅读更多 →
lingbot-map:室内移动机器人激光SLAM建图与导航实战

lingbot-map:室内移动机器人激光SLAM建图与导航实战

看到“lingbot-map”这个项目名,我第一反应就是机器人地图相关,而且大概率是围绕建图、定位、导航这三件套来做文章。我实际接触过不少类似的室内移动机器人项目,名字里带“bot”的通常都是机器人本体的代号,“map”则明确指向地图…

2026/10/13 7:58:24 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 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/12 21:05:09 阅读更多 →
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/12 14:48:49 阅读更多 →
黑夜航拍船只数据集训练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/12 18:11:17 阅读更多 →