news 2026/9/24 13:55:18

树莓派DIY智能灌溉控制器:MQTT+继电器HAT+土壤湿度传感器实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
树莓派DIY智能灌溉控制器:MQTT+继电器HAT+土壤湿度传感器实战

1. 项目缘起与整体设计思路

1.1 为什么我要用树莓派做一套自动灌溉控制器

家里有个小院子,种了些番茄、辣椒和几盆月季。前两年夏天出差一周,回来一看,番茄叶子全蔫了,辣椒直接干死两棵。请邻居帮忙浇水吧,人家也有自己的事,不好意思天天麻烦。市面上卖的成品灌溉定时器我也看过,便宜的只能按固定时间开关,不管下没下雨、土干不干,到点就浇;贵一点的带WiFi的,功能是多了,但要么绑定厂商云服务,要么App做得稀烂,数据还攥在别人手里。后来一想,我手头正好有块树莓派4B在吃灰,加上一个继电器扩展板,干脆自己搭一套。

Sprinqua这个项目就是在这个背景下折腾出来的。名字是我自己起的,Sprinkler加Aqua的组合,核心思路很直接:用树莓派作为大脑,通过继电器控制电磁阀,结合土壤湿度传感器和天气预报数据,决定什么时候开阀、开多久。所有逻辑跑在本地,数据通过MQTT协议在局域网内流转,手机、电脑、甚至Home Assistant都能订阅状态。整套东西做下来,硬件成本不到三百块,功能却比市面上七八百的成品更贴合自己的需求。

这套方案适合谁呢?如果你家里有院子、阳台菜箱、或者小型温室,又刚好有一块树莓派在抽屉里躺着,那这篇文章就是写给你的。不需要你懂太多电子知识,会插杜邦线、能照着步骤敲命令就行。我会把踩过的坑、选型时的纠结、以及最后跑通的那套配置全部摊开讲。

1.2 核心架构拆解:从传感器到电磁阀的完整链路

整套系统的逻辑链路其实不复杂,我画个文字版的架构图帮你理解:

感知层:土壤湿度传感器插在花坛里,实时读取土壤含水量。我用的是一款电容式传感器,相比电阻式的不容易腐蚀,寿命长很多。同时树莓派通过HTTP请求拉取本地天气预报数据,判断未来几小时会不会下雨。

决策层:树莓派上跑一个Python主程序,每隔一段时间读取传感器数据,结合天气预报和预设的阈值规则,决定是否触发灌溉。规则可以很灵活,比如“土壤湿度低于30%且未来两小时无降雨”才开阀。

执行层:继电器HAT插在树莓派的40针GPIO上,通过GPIO引脚的高低电平控制继电器通断。继电器另一端接电磁阀的电源回路,电磁阀装在水管上,通电打开、断电关闭。

通信层:所有状态数据通过MQTT协议发布到本地MQTT Broker。我选的是Mosquitto,轻量、稳定、资源占用低。手机上的MQTT客户端可以订阅主题,随时查看土壤湿度、阀门状态、上次灌溉时间。Home Assistant也能通过MQTT自动发现这些实体,接入仪表盘。

供电:树莓派用5V/3A的USB-C电源,电磁阀一般是12V或24V直流,需要单独的电源适配器。继电器模块负责隔离这两个电压域,保护树莓派不被反向电动势打坏。

这个架构的好处是每一层都可以独立替换。传感器坏了换传感器,电磁阀升级换电磁阀,决策逻辑想改就改Python代码,通信协议不喜欢MQTT也可以换成HTTP或者WebSocket。没有厂商锁定,所有东西都在自己手里。

1.3 硬件选型:为什么是继电器HAT而不是普通继电器模块

一开始我用的是那种几块钱的蓝色继电器模块,四路的那种,直接杜邦线插在GPIO上。能用,但有两个问题:一是接线乱,杜邦线容易松,有次浇水浇到一半继电器接触不良,水阀一直开着,把花坛淹了;二是没有电平转换,树莓派GPIO是3.3V逻辑,有些继电器模块是5V触发的,虽然大多数情况下3.3V也能触发,但可靠性存疑。

后来换了继电器HAT,就是那种直接扣在树莓派40针排针上的扩展板。好处很明显:物理连接牢固,不会因为震动松脱;板子上自带电平转换和光耦隔离,3.3V信号能稳定驱动继电器;走线整洁,整个树莓派加HAT可以塞进一个标准外壳里。我用的是一款四路继电器HAT,每路支持250V/10A的交流或30V/10A的直流负载,控制电磁阀绰绰有余。

电磁阀我选的是12V直流常闭型,口径根据水管粗细选4分管。常闭的意思是断电时阀门关闭,通电才打开。这个选择很关键——万一树莓派死机或者断电,阀门会自动关闭,不会一直浇水。如果你选常开型,断电时阀门打开,那就等着水漫金山吧。

土壤湿度传感器我前后试过三种。第一种是电阻式,两个探针插在土里,靠电阻变化测湿度。便宜,但探针电解腐蚀很快,两个月就锈得不成样子。第二种是电容式,表面有阻焊层,不直接接触土壤,寿命长很多,精度也够用。第三种是I2C接口的数字传感器,精度最高但价格也最贵,而且需要校准。最后我选了电容式,性价比最平衡。

2. 核心细节解析与实操要点

2.1 继电器HAT的接线与GPIO引脚分配

继电器HAT扣上去之后,你需要知道哪个继电器对应哪个GPIO引脚。不同厂家的HAT引脚定义可能不一样,我手上这块是用的BCM编号17、27、22、23分别对应四路继电器。接线之前一定要查清楚你手上那块HAT的文档,接错了轻则不动作,重则烧GPIO。

电磁阀的接线分两部分:控制回路和电源回路。控制回路就是继电器输出端,一般标着COM和NO(常开)或NC(常闭)。我们用的是常闭型电磁阀,所以电磁阀的电源正极接继电器的COM,电磁阀的负极接电源负极,电源正极再接到继电器的NO。这样继电器吸合时,COM和NO导通,电磁阀通电打开;继电器释放时,COM和NO断开,电磁阀断电关闭。

注意:电磁阀属于感性负载,断电瞬间会产生反向电动势,可能干扰树莓派甚至损坏GPIO。建议在电磁阀两端并联一个续流二极管,比如1N4007,阴极接电源正极,阳极接电源负极。继电器HAT本身有光耦隔离,但加个二极管更保险。

电源方面,树莓派和电磁阀一定要分开供电。树莓派用5V/3A的USB-C电源,电磁阀用12V/2A的直流电源适配器。两个电源的负极可以共地,但正极绝对不能接在一起。我见过有人图省事用一个12V电源加降压模块给树莓派供电,结果电磁阀一开,树莓派就重启,就是电源功率不够加上干扰导致的。

2.2 土壤湿度传感器的校准与数据读取

电容式土壤湿度传感器输出的是模拟电压,树莓派没有模拟输入引脚,所以需要加一个ADC芯片,比如MCP3008。MCP3008是8通道10位ADC,SPI接口,接线简单,Python库也成熟。

接线方式:MCP3008的VDD和VREF接3.3V,AGND和DGND接地,CLK接GPIO11(SCLK),DOUT接GPIO9(MISO),DIN接GPIO10(MOSI),CS接GPIO8(CE0)。传感器的模拟输出接MCP3008的CH0通道。

校准是必须做的。传感器在空气中读到的值和在水中读到的值差别很大,你需要知道这两个极值,才能把原始读数映射成湿度百分比。我的做法是:先把传感器擦干,放在空气中读一个值,记为dry_value;然后插进一杯水里读一个值,记为wet_value。之后每次读数用这个公式换算:湿度百分比 = (dry_value - raw_value) / (dry_value - wet_value) * 100%。

实测下来,电容式传感器在空气中读数大概在520左右,水中大概在260左右,不同批次会有差异,所以每换一个传感器都要重新校准。校准之后,土壤湿度低于30%就触发灌溉,这个阈值可以根据你的植物类型调整。多肉植物可能20%就够了,叶菜类可能需要40%。

2.3 MQTT主题设计与消息格式约定

MQTT是整个系统的通信骨架,主题设计得好不好,直接影响到后续扩展和集成的便利性。我用的主题结构是这样的:

  • sprinqua/sensor/soil_moisture:发布土壤湿度百分比,payload是纯数字,比如35.2
  • sprinqua/sensor/temperature:发布温度,payload是纯数字
  • sprinqua/valve/state:发布阀门状态,payload是onoff
  • sprinqua/valve/control:订阅这个主题,收到on就开阀,收到off就关阀
  • sprinqua/system/status:发布系统状态,payload是JSON,包含uptime、last_irrigation、next_check等

消息格式我倾向于简单直接。传感器数据用纯数字,方便Home Assistant直接解析成数值实体。控制指令用简单字符串,方便手动测试。系统状态用JSON,因为字段多,JSON结构清晰。

提示:MQTT主题不要用中文,不要用空格,不要用特殊字符。用斜杠分层,层级不要太深,三层足够了。另外建议开启MQTT的保留消息功能,这样新订阅的客户端能立刻收到最后一条状态,不用等下一次发布。

Mosquitto的配置也很简单,默认监听1883端口,允许匿名访问。如果只在局域网内用,这样就行。如果想加认证,可以配置用户名密码,但会增加客户端配置的复杂度。我的建议是局域网内先跑通,有外网访问需求再考虑加认证和TLS。

2.4 天气预报数据的获取与解析

天气预报我用的是一个免费的天气API,具体名字就不说了,很多平台都提供类似服务。核心思路是:用树莓派的经纬度请求未来几小时的降雨概率,如果降雨概率超过60%,就跳过本次灌溉。

API返回的是JSON格式,Python用requests库请求,然后用json库解析。关键字段是hourly数组里的precip_probability。我一般取未来三小时的降雨概率最大值,如果超过阈值就不浇。

这里有个坑:免费API通常有调用频率限制,比如每天1000次。如果你每分钟都请求一次,很快就会用完。我的做法是每30分钟请求一次,把结果缓存起来,决策时用缓存数据。另外要处理网络异常,如果API请求失败,就降级为只根据土壤湿度决策,不能因为网络问题就不浇水了。

import requests import json from datetime import datetime, timedelta def get_rain_probability(lat, lon): try: url = f"https://api.example.com/forecast?lat={lat}&lon={lon}" resp = requests.get(url, timeout=10) data = resp.json() hourly = data.get("hourly", []) max_prob = 0 for hour in hourly[:3]: prob = hour.get("precip_probability", 0) if prob > max_prob: max_prob = prob return max_prob except Exception as e: print(f"天气API请求失败: {e}") return 0

这段代码的逻辑是:请求未来三小时的降雨概率,取最大值返回。如果请求失败,返回0,表示“没有降雨”,这样系统会继续根据土壤湿度决策,不会因为网络问题导致植物渴死。

3. 实操过程与核心环节实现

3.1 系统环境准备与依赖安装

树莓派系统我用的Raspberry Pi OS Lite,64位版本。Lite版没有桌面环境,资源占用少,适合这种后台服务。烧录系统、配置WiFi、开启SSH这些基础操作就不展开了,网上教程很多。

系统起来之后,第一件事是更新软件源和升级已安装的包:

sudo apt update sudo apt upgrade -y

然后安装必要的依赖:

sudo apt install -y python3-pip python3-dev mosquitto mosquitto-clients libgpiod2 pip3 install RPi.GPIO spidev requests paho-mqtt

这里解释一下每个包的作用。mosquitto是MQTT Broker,mosquitto-clients提供命令行工具用来测试发布订阅。libgpiod2是GPIO控制库的底层依赖。RPi.GPIO是Python操作GPIO的库,spidev是SPI通信库,用来读MCP3008。requests用来请求天气API,paho-mqtt是Python的MQTT客户端库。

安装完成后,启动Mosquitto并设置开机自启:

sudo systemctl enable mosquitto sudo systemctl start mosquitto

验证一下MQTT服务是否正常:

mosquitto_sub -t "test" -v

另开一个终端:

mosquitto_pub -t "test" -m "hello"

如果第一个终端收到了test hello,说明MQTT服务正常。

3.2 继电器控制代码的编写与测试

先写一个最简单的继电器控制脚本,验证硬件接线是否正确:

import RPi.GPIO as GPIO import time VALVE_PIN = 17 GPIO.setmode(GPIO.BCM) GPIO.setup(VALVE_PIN, GPIO.OUT) GPIO.output(VALVE_PIN, GPIO.HIGH) # 继电器释放,阀门关闭 def open_valve(): GPIO.output(VALVE_PIN, GPIO.LOW) # 继电器吸合,阀门打开 print("阀门已打开") def close_valve(): GPIO.output(VALVE_PIN, GPIO.HIGH) print("阀门已关闭") if __name__ == "__main__": try: open_valve() time.sleep(5) close_valve() except KeyboardInterrupt: pass finally: GPIO.cleanup()

注意这里的高低电平逻辑。大多数继电器HAT是低电平触发,也就是GPIO输出LOW时继电器吸合。但也有一些是高电平触发,具体要看你手上的HAT。如果不确定,先用万用表测一下,或者听继电器有没有“咔嗒”声。

注意:测试的时候电磁阀可以先不接,只测继电器动作。确认继电器能正常吸合释放之后,再接电磁阀。接电磁阀的时候,先关掉12V电源,接好线再上电,避免带电操作打火。

测试通过之后,把这段代码封装成一个类,方便主程序调用:

class ValveController: def __init__(self, pin=17): self.pin = pin GPIO.setmode(GPIO.BCM) GPIO.setup(self.pin, GPIO.OUT) GPIO.output(self.pin, GPIO.HIGH) self.state = "off" def open(self): GPIO.output(self.pin, GPIO.LOW) self.state = "on" def close(self): GPIO.output(self.pin, GPIO.HIGH) self.state = "off" def cleanup(self): self.close() GPIO.cleanup()

3.3 MQTT客户端集成与主循环逻辑

主程序的核心是一个循环:读取传感器、检查天气、决策、执行、发布状态。我用paho-mqttloop_start()方法在后台线程跑MQTT网络循环,主线程跑决策逻辑。

import paho.mqtt.client as mqtt import json import time from datetime import datetime MQTT_BROKER = "localhost" MQTT_PORT = 1883 TOPIC_SOIL = "sprinqua/sensor/soil_moisture" TOPIC_VALVE_STATE = "sprinqua/valve/state" TOPIC_VALVE_CONTROL = "sprinqua/valve/control" TOPIC_STATUS = "sprinqua/system/status" client = mqtt.Client() client.connect(MQTT_BROKER, MQTT_PORT, 60) client.loop_start() def on_message(client, userdata, msg): payload = msg.payload.decode() if msg.topic == TOPIC_VALVE_CONTROL: if payload == "on": valve.open() client.publish(TOPIC_VALVE_STATE, "on", retain=True) elif payload == "off": valve.close() client.publish(TOPIC_VALVE_STATE, "off", retain=True) client.on_message = on_message client.subscribe(TOPIC_VALVE_CONTROL) valve = ValveController(pin=17) SOIL_THRESHOLD = 30 RAIN_THRESHOLD = 60 CHECK_INTERVAL = 300 # 5分钟检查一次 MAX_IRRIGATION_TIME = 600 # 单次最长浇水10分钟 while True: soil = read_soil_moisture() rain_prob = get_rain_probability(LAT, LON) client.publish(TOPIC_SOIL, f"{soil:.1f}", retain=True) if soil < SOIL_THRESHOLD and rain_prob < RAIN_THRESHOLD: valve.open() client.publish(TOPIC_VALVE_STATE, "on", retain=True) start_time = time.time() while time.time() - start_time < MAX_IRRIGATION_TIME: time.sleep(10) soil = read_soil_moisture() if soil >= SOIL_THRESHOLD + 10: break valve.close() client.publish(TOPIC_VALVE_STATE, "off", retain=True) status = { "uptime": time.time() - start_time, "last_check": datetime.now().isoformat(), "soil_moisture": soil, "rain_probability": rain_prob, "valve_state": valve.state } client.publish(TOPIC_STATUS, json.dumps(status), retain=True) time.sleep(CHECK_INTERVAL)

这段代码有几个关键点。第一,retain=True让MQTT Broker保留最后一条消息,新订阅的客户端立刻能收到当前状态。第二,浇水过程中每10秒检查一次土壤湿度,如果湿度已经够了就提前关阀,避免过度浇水。第三,MAX_IRRIGATION_TIME是硬性保护,防止传感器故障导致一直浇水。

3.4 系统服务化与开机自启配置

代码跑通之后,需要把它做成systemd服务,这样开机自动启动,崩溃了也能自动重启。

创建服务文件:

sudo nano /etc/systemd/system/sprinqua.service

内容如下:

[Unit] Description=Sprinqua Smart Irrigation Controller After=network.target mosquitto.service [Service] Type=simple User=pi WorkingDirectory=/home/pi/sprinqua ExecStart=/usr/bin/python3 /home/pi/sprinqua/main.py Restart=always RestartSec=10 [Install] WantedBy=multi-user.target

然后启用并启动服务:

sudo systemctl daemon-reload sudo systemctl enable sprinqua sudo systemctl start sprinqua

检查状态:

sudo systemctl status sprinqua

如果看到active (running)就说明服务正常。查看日志:

journalctl -u sprinqua -f

提示:Restart=alwaysRestartSec=10意味着程序崩溃后10秒会自动重启。但如果程序有bug导致反复崩溃,会陷入重启循环。建议先用journalctl观察一段时间,确认稳定后再长期运行。

4. 常见问题与排查技巧实录

4.1 继电器不动作或阀门状态异常

这是最常见的问题,排查思路从软到硬。先确认GPIO引脚编号对不对,BCM编号和物理引脚编号是两回事。我见过有人把BCM17接到物理引脚17上,结果控制的是另一个GPIO。用gpio readall命令可以查看所有引脚的状态。

如果引脚没错,用万用表测继电器输入端电压。低电平触发时,GPIO输出LOW,继电器输入端应该有接近0V的电压。如果电压不对,可能是GPIO没有正确初始化,或者被其他程序占用了。树莓派上有些GPIO有特殊功能,比如I2C、SPI,如果启用了这些功能,对应的GPIO就不能当普通输出用了。

继电器有“咔嗒”声但阀门不动作,说明继电器本身工作正常,问题在电磁阀回路。检查电磁阀电源是否接通,用万用表测电磁阀两端有没有12V电压。如果没有,检查继电器COM和NO的接线是否正确。如果有电压但阀门不动作,可能是电磁阀坏了,或者水压不够。

还有一种情况是阀门状态在MQTT上显示不对。这通常是retain标志没设,或者发布主题和订阅主题不一致。用mosquitto_sub -t "sprinqua/#" -v订阅所有相关主题,看看实际发布的消息是什么。

4.2 土壤湿度读数漂移或不准确

电容式传感器虽然比电阻式耐用,但长时间埋在土里也会受潮气影响,导致读数漂移。我的做法是每两周把传感器拔出来擦干净,重新校准一次。如果发现读数明显异常,比如一直显示0%或100%,先检查接线是否松动,再检查MCP3008的SPI通信是否正常。

SPI通信问题可以用ls /dev/spidev*查看设备节点是否存在。如果没有,需要在raspi-config里启用SPI接口。另外MCP3008的VREF电压要稳定,如果VREF波动,读数也会波动。建议在VREF和GND之间加一个0.1uF的陶瓷电容滤波。

还有一个容易被忽略的问题:传感器插入土壤的深度。插得太浅,读的是表层干土;插得太深,可能碰到花盆底部的积水层。一般插入土面以下5到10厘米比较合适,具体看植物根系深度。

4.3 MQTT连接断开或消息丢失

MQTT连接断开通常有两个原因:网络不稳定或Broker配置问题。如果树莓派和Broker在同一台机器上,网络因素可以排除。检查Mosquitto的日志:

sudo tail -f /var/log/mosquitto/mosquitto.log

如果看到Client sprinqua disconnected,说明客户端主动断开了。paho-mqttloop_start()会在后台自动重连,但重连后需要重新订阅主题。可以在on_connect回调里统一处理订阅:

def on_connect(client, userdata, flags, rc): client.subscribe(TOPIC_VALVE_CONTROL) client.on_connect = on_connect

消息丢失的情况,如果QoS设为0,消息可能丢失。对于控制指令,建议用QoS 1,确保至少送达一次。对于传感器数据,QoS 0就够了,丢一两条无所谓。

注意:如果局域网内有多个MQTT客户端,主题命名要避免冲突。建议用项目名作为顶层主题,比如sprinqua/,这样不会和其他项目的主题混在一起。

4.4 系统运行一段时间后无响应

树莓派长时间运行后无响应,最常见的原因是内存泄漏或SD卡故障。Python程序如果有循环引用或者未关闭的文件句柄,内存会慢慢涨上去。用htop或者free -h查看内存占用,如果发现Python进程内存持续增长,就要检查代码里有没有未释放的资源。

SD卡故障是树莓派的通病。频繁写日志会加速SD卡磨损。建议把日志写到内存文件系统,或者限制日志大小。journalctl可以配置最大日志体积:

sudo journalctl --vacuum-size=100M

另外建议用高质量的SD卡,或者干脆用USB SSD启动,稳定性和寿命都好很多。我自己的树莓派跑了半年多,SD卡就出现了坏块,后来换了SSD再没出过问题。

问题现象可能原因排查方法解决方案
继电器不动作GPIO引脚错误gpio readall查看状态确认BCM编号
阀门不动作电磁阀电源故障万用表测电压检查12V电源和接线
湿度读数漂移传感器老化重新校准清洁或更换传感器
MQTT断连网络或Broker问题查看Mosquitto日志配置自动重连和订阅
系统无响应内存泄漏或SD卡故障htopdmesg修复代码或换SSD

4.5 冬季防冻与长期停用的处理

如果你所在地区冬天会结冰,灌溉系统必须做防冻处理。水管里的水结冰膨胀,会把电磁阀和管子撑裂。我的做法是入冬前把水管里的水排空,电磁阀拆下来存放在室内。树莓派可以继续跑,但把灌溉功能禁用,只保留传感器监测。

在代码里加一个季节判断:

import datetime def is_winter(): month = datetime.datetime.now().month return month in [11, 12, 1, 2, 3] if is_winter(): print("冬季模式,跳过灌溉") time.sleep(CHECK_INTERVAL) continue

这个逻辑很简单,但很实用。如果你在南方,冬天不结冰,可以忽略这段。如果在北方,这个判断能帮你省下换电磁阀的钱。

4.6 扩展思路:接入Home Assistant与语音控制

系统跑通之后,我把它接入了Home Assistant。HA有内置的MQTT集成,配置好Broker地址后,会自动发现sprinqua/下的实体。土壤湿度会显示成一个传感器卡片,阀门状态显示成开关。你可以在HA的仪表盘上手动控制阀门,也可以设置自动化:比如“如果土壤湿度低于25%且太阳下山后,开启灌溉10分钟”。

语音控制是通过HA的语音助手实现的。对着音箱说“打开花园浇水”,HA会向sprinqua/valve/control发布on,阀门就打开了。这个体验很爽,尤其是手上拿着东西不方便掏手机的时候。

再进一步,可以加一个流量传感器,统计每次灌溉用了多少水。或者加一个雨量传感器,直接测实际降雨量,比天气预报更准。这些扩展都不难,因为MQTT的发布订阅模型天生适合这种松耦合的架构。你加一个新传感器,只需要让它往对应的主题发消息,主程序订阅处理就行,不用改现有的代码结构。

我个人在实际操作中的体会是,这套系统最大的价值不在于省了多少水或者多少时间,而在于它让你对植物的生长环境有了量化的感知。以前浇水全凭感觉,现在看着土壤湿度曲线,什么时候该浇、浇了多少,一目了然。这种掌控感是成品设备给不了的。

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

arrylist怎么让他变得不可修改

在Java中&#xff0c;要将一个 ArrayList变得不可修改&#xff0c;你可以使用以下几种方法&#xff1a;###1. 使用 Collections.unmodifiableListJava 提供了 Collections.unmodifiableList 方法&#xff0c;可以生成一个不可修改的视图。这种方式返回的列表将不允许添加、删除…

作者头像 李华
网站建设 2026/9/24 13:53:14

【Dv2Admin】Django配置线上ws反向代理

在 Web 应用程序的部署过程中,安全性、稳定性和实时通信是开发者们普遍关注的重点。Django 是一个非常流行的 Web 框架,常与 Nginx 配合使用,以便实现反向代理、负载均衡以及 SSL 加密等功能。除此之外,实时功能(如 WebSocket)也是现代应用中经常使用的技术。 在项目中实…

作者头像 李华
网站建设 2026/9/24 13:52:32

gsd-core 中 bracket 阶段 ID 约定的统一显示与配置校验解析

【免费下载链接】gsd-core Git. Ship. Done - Core 项目地址&#xff1a; https://gitcode.com/gh_mirrors/ge/gsd-core 点击查看 免费下载 本文围绕 gsd-core 的 ADR-612「bracket 阶段 ID 约定」显示面落地&#xff08;issue #3638 / PR 4111&#xff09;展开&#xff1a;当…

作者头像 李华
网站建设 2026/9/24 13:47:54

【Coze】【视频】踏马爽文工作流

今天给大家演示一个 踏马爽文视频 Coze 工作流。该工作流结合了大语言模型、批处理、语音合成和剪映小助手等功能节点,能够从输入的爽文主题出发,自动生成符合爽文文风的文案,再将文案转化为音频、字幕并组合到视频草稿中,最终实现一键生成爽文短视频的效果。通过这个工作流…

作者头像 李华
网站建设 2026/9/24 13:46:49

Flask 即插视图高级应用

在使用 Flask 框架构建 Web 应用时,即插视图(Pluggable Views)是一种结构化管理视图函数的重要方式。通过将视图逻辑封装进类中,不仅提升了代码的可读性和复用性,也更容易与大型项目架构兼容。尤其在构建 RESTful 接口、模块化开发等场景中,即插视图能极大简化开发流程,…

作者头像 李华