Qt串口电源控制工具:一键开关设备电源
简介这是一份基于Qt框架开发的RS232串口电源控制程序面向嵌入式初学者、电子工程实践者及自动化设备控制开发者解决实验室/测试场景中对程控电源的远程开关与状态交互需求。项目采用C与Qt构建跨平台GUI应用通过串口发送指令实现硬件级电源管理是学习串行通信协议、Qt信号槽机制、UI与底层I/O协同开发的典型实例。压缩包共9个文件含2个核心源码widget.cpp/h、1个UI界面设计文件widget.ui、1个Qt项目配置test_dome.pro、1个图标资源.ico及用户配置与版本控制文件整体仅23KB轻量易读结构清晰便于快速编译运行与二次修改。目前已有359人学习下载读者可直接获取完整可运行工程——包括带逻辑注释的主控界面、串口通信封装雏形、图标资源与标准Qt项目配置体系适合动手调试、理解设备控制软件架构或作为课程实验参考模板。1. 一个串口发指令就能开关设备电源的Qt小工具专治实验室里“拔线重启”的玄学故障你有没有在嵌入式调试现场经历过这种场景设备连着USB转RS232线烧写固件后没响应反复按复位键无效最后只能伸手去拔电源线——结果一拔串口日志突然刷出一行READY再插上又死寂无声。这不是玄学是电源时序没对齐。这个test-dome-control-power.zip就是为这类问题而生的它用纯Qt写的图形界面通过标准RS232串口如/dev/ttyUSB0或COM3向某类带串口控制引脚的电源模块常见于工业继电器板、定制电源盒或带MCU的智能插座底板发送AT指令或自定义协议指令实现软件一键上电/断电/循环重启。它不依赖网络、不装驱动、不改硬件只靠一根串口线和一个可配置的指令集。适合高校电子实验室、产线老化测试岗、嵌入式固件开发工程师——尤其当你第7次蹲在工控柜前摸黑找电源线时你会感谢这个不到200KB的Qt小工具。2. 架构与技术选型为什么是Qt而不是Python或C#这个项目不是“用Qt写了GUI”而是以Qt的串口抽象层为核心构建的轻量级控制中枢。它回避了Python串口库在Windows下权限不稳定、C#跨平台部署麻烦、纯C终端工具无交互反馈等现实痛点。整个程序结构极简UI层QMainWindow QSerialPortWidget→ 协议层ProtocolHandler类封装指令构造与校验→ 通信层QSerialPort异步读写超时重试→ 硬件层物理RS232线缆直连。没有数据库、不启HTTP服务、不调用系统API所有逻辑都在main.cpp、mainwindow.cpp和protocolhandler.h三个文件里闭环。Qt版本要求明确Qt 5.12含QSerialPort模块因为老版本QSerialPort存在Windows下waitForBytesWritten()假成功的问题——这点我在某高校实验室实测过5.9.9在Win10 21H2上会卡住指令发送升级到5.15.2后秒通。2.1 目录结构与核心文件职责解压后共6个文件结构干净得像刚擦过的示波器屏幕test-dome-control-power/ ├── main.cpp # Qt应用入口创建QApplication和MainWindow ├── mainwindow.h # 主窗口声明含UI控件指针serialPortComboBox等 ├── mainwindow.cpp # 核心业务逻辑串口打开/关闭、指令发送、状态回调 ├── protocolhandler.h # 指令协议抽象支持AT模式ATPOW1和HEX模式0x01 0x02 0x03 ├── protocolhandler.cpp # 具体指令生成、CRC校验若启用、发送缓冲区管理 └── resources/ # 图标和默认配置config.ini含波特率/数据位/停止位预设提示resources/下的config.ini是唯一外部配置文件内容只有4行例如baudrate9600 databits8 stopbits1 parityNone修改后无需重新编译程序启动时自动加载——这是给产线工人留的后悔药。2.2 QSerialPort通信链路的关键设计点Qt的QSerialPort类把串口操作封装得看似简单但实际落地时有3个必须处理的“暗坑”异步写入的完成确认不能只调用write()就认为指令已发出。test-dome-control-power在mainwindow.cpp中使用bytesWritten(qint64)信号做二次确认// mainwindow.cpp 片段 connect(serialPort, QSerialPort::bytesWritten, this, [](qint64 bytes) { if (bytes currentCommand.length()) { statusLabel-setText(QString(✅ 已发送 %1 字节: %2) .arg(bytes).arg(QString(currentCommand))); } else { statusLabel-setText(⚠️ 发送不完整尝试重发...); QTimer::singleShot(100, this, MainWindow::resendLastCommand); } });这段代码确保即使串口缓冲区满导致部分字节未写出也能被捕捉并触发重发。参数说明currentCommand是QByteArray类型由ProtocolHandler生成100ms重发间隔是经验阈值——太短可能撞上硬件响应延迟太长影响操作手感。读取响应的防粘包处理电源模块返回的响应如OK\r\n或ERROR:0x05可能分多次到达。项目采用readyRead()信号配合readAll()定界符解析// mainwindow.cpp connect(serialPort, QSerialPort::readyRead, this, []() { QByteArray response serialPort-readAll(); // 按\r\n切分取最新一条避免历史残留 QStringList lines QString(response).split(\r\n, Qt::SkipEmptyParts); if (!lines.isEmpty()) { QString lastLine lines.last().trimmed(); if (lastLine.contains(OK) || lastLine.contains(POWER ON)) { powerStatusLabel-setStyleSheet(color: green;); powerStatusLabel-setText(✅ 电源已开启); } else if (lastLine.contains(ERROR)) { powerStatusLabel-setStyleSheet(color: red;); powerStatusLabel-setText(❌ 指令错误: lastLine); } } });关键点Qt::SkipEmptyParts防止空行干扰lines.last()取末尾行因模块响应通常单行且无流式输出trimmed()去除回车换行符——这是和某款国产继电器板联调时踩出的血泪经验。串口资源独占与异常释放Windows下串口被占用时open()返回false但Qt不会自动抛异常。项目在on_openButton_clicked()中强制检查if (!serialPort-open(QIODevice::ReadWrite)) { QMessageBox::critical(this, 串口错误, QString(无法打开 %1\n错误码: %2\n请检查设备是否连接、驱动是否安装、其他程序是否占用) .arg(portName).arg(serialPort-error())); return; }参数说明portName来自下拉框选择serialPort-error()返回QSerialPort::SerialPortError枚举值如PermissionError权限不足或ResourceError端口不存在比单纯弹“打开失败”有用十倍。3. 编译与运行从零开始跑通的完整步骤含Windows/Linux双路径这个项目不依赖CMakeLists.txt的复杂配置而是用Qt Creator最朴素的.pro工程文件——这意味着你既可以用Qt Creator点几下编译也能用命令行手敲。重点在于环境准备必须一步到位否则会在串口权限或库链接上翻车。3.1 Windows环境避开驱动和权限雷区安装Qt 5.15.2 MinGW 64-bit官方离线安装包必须选MinGW而非MSVC——因为项目.pro文件里写死了QT serialport而MSVC版Qt某些精简包会漏装Qt5SerialPort.dll。安装时勾选“Developer and Designer Tools”和“Qt Serial Port”。安装CH340/CP2102等USB转串口驱动别信“Windows自动安装”去芯片官网下最新驱动。某次在Win11上用系统自带驱动QSerialPort::availablePorts()能列出COM3但open()始终返回PermissionError换官网驱动后秒解。用Qt Creator打开并编译打开test-dome-control-power.pro→ Qt Creator自动识别为Qt Widgets Application构建套件选Desktop Qt 5.15.2 MinGW 64-bit点击 ▶️ 运行首次会弹出Windows安全警告点“更多信息→仍要执行”程序启动后在串口列表选你的COM口如COM3波特率选9600点击“Open”注意如果点击Open后状态栏显示“串口打开失败”右键任务栏Qt Creator图标→“以管理员身份运行”再试一次。这是Windows对串口设备的硬性权限限制非项目Bug。3.2 Linux环境udev规则与权限的硬核配置Ubuntu/Debian系用户最容易卡在这步——不是代码问题是系统权限。/dev/ttyUSB0默认只允许root访问。添加用户到dialout组永久生效sudo usermod -a -G dialout $USER # 然后完全退出当前桌面会话关机重启或登出重进否则组权限不生效创建udev规则让设备插拔自动授权创建文件/etc/udev/rules.d/99-usb-serial.rules内容为SUBSYSTEMtty, ATTRS{idVendor}1a86, ATTRS{idProduct}7523, MODE0666, GROUPdialout SUBSYSTEMtty, ATTRS{idVendor}10c4, ATTRS{idProduct}ea60, MODE0666, GROUPdialout这两行覆盖了最常见的CH3401a86:7523和CP210210c4:ea60芯片。MODE0666赋予读写权限GROUPdialout确保组权限生效。保存后执行sudo udevadm control --reload-rules sudo udevadm trigger编译运行命令行方式更可控cd test-dome-control-power qmake -makefile # 生成Makefile make -j$(nproc) # 并行编译 ./test-dome-control-power # 直接运行如果提示error while loading shared libraries: libQt5SerialPort.so.5说明Qt库路径未配置export LD_LIBRARY_PATH/opt/Qt5.15.2/5.15.2/gcc_64/lib:$LD_LIBRARY_PATH ./test-dome-control-power3.3 首次运行验证三步确认链路通无论Windows还是Linux跑通后必须做这三步验证物理层确认用万用表测电源模块的控制引脚电压。发送“ON”指令时引脚应从0V跳变至3.3V或5V依模块而定发送“OFF”时回落。这是最硬的证据——别信UI上的✅图标。协议层确认用串口调试助手如XShell、Tera Term手动发相同指令看模块是否响应。例如某模块协议是ATPOW1\r\n就在调试助手中输入并回车观察返回OK。如果调试助手能通而本程序不通问题一定在ProtocolHandler的指令构造逻辑。应用层确认在程序UI中点击“Power ON”按钮观察状态栏是否显示✅ 已发送 X 字节: ATPOW1\r\n同时电源模块指示灯亮起。若状态栏显示发送成功但设备无反应大概率是config.ini里的波特率与模块实际波特率不匹配常见于模块出厂设为115200而ini里写9600。4. 常见问题排查那些让你怀疑人生却只需改一行代码的坑这个项目代码量小但串口通信的不可见性会让问题显得玄乎。以下是我在3个不同实验室现场记录的真实踩坑案例每条都附带复现方法和根治方案。4.1 现象点击“Open”后状态栏显示“串口打开成功”但发送任何指令状态栏始终静默设备无反应原因QSerialPort的setDataTerminalReady(true)未调用导致某些老式RS232设备尤其是带DTR控制的继电器板认为PC未就绪拒绝响应。解决在mainwindow.cpp的on_openButton_clicked()函数中serialPort-open()成功后立即添加serialPort-setDataTerminalReady(true); // 关键必须在open()之后、write()之前血泪经验某高校用的国产“DOME-RELAY-V2”板说明书里根本没提DTR要求靠示波器抓DTR引脚电平才定位到此问题。4.2 现象Windows下程序能发指令但接收响应时readyRead()信号不触发或只触发一次后失效原因QSerialPort在Windows下对setReadBufferSize()敏感缓冲区过小会导致数据截断readyRead()因无新数据不再触发。解决在mainwindow.cpp的串口初始化部分on_openButton_clicked()中open()前添加serialPort-setReadBufferSize(1024); // 将默认4096字节改为1024适配多数电源模块响应长度注意不要设太大如8192某些USB转串口芯片固件有缺陷大缓冲区会引发内核级丢包。4.3 现象Linux下编译通过运行时报错QMetaObject::connectSlotsByName: No matching signal for on_serialPort_error(QSerialPort::SerialPortError)原因UI文件.ui中定义了on_serialPort_error槽函数但mainwindow.h里未声明该函数或声明了但mainwindow.cpp里未实现。Qt的自动连接机制找不到对应函数。解决检查mainwindow.h是否有这一行声明private slots: void on_serialPort_error(QSerialPort::SerialPortError error);再检查mainwindow.cpp是否有对应实现哪怕只是空函数void MainWindow::on_serialPort_error(QSerialPort::SerialPortError error) { // 可在此添加错误日志 qDebug() Serial port error: error; }提示Qt Creator有时会因UI文件修改未同步导致此问题右键UI文件→“重新载入”可快速修复。4.4 现象发送“ON”指令后设备上电但10秒后自动断电UI状态栏无任何提示原因电源模块启用了看门狗Watchdog功能要求PC端每隔固定时间如5秒发送心跳指令如ATWDG1否则自动断电。而本程序未实现心跳机制。解决在mainwindow.cpp中添加定时器在on_powerOnButton_clicked()后启动// 启动5秒心跳 watchdogTimer new QTimer(this); connect(watchdogTimer, QTimer::timeout, this, []() { QByteArray heartbeat ATWDG1\r\n; serialPort-write(heartbeat); }); watchdogTimer-start(5000); // 5秒一次并在on_powerOffButton_clicked()中停止if (watchdogTimer watchdogTimer-isActive()) { watchdogTimer-stop(); delete watchdogTimer; watchdogTimer nullptr; }5. 协议扩展实战如何为自家电源模块添加新指令集以HEX模式为例项目默认支持两种协议模式AT指令文本和HEX指令二进制。如果你手头的电源模块用的是私有二进制协议比如某国产“SmartPSU-3A”模块手册里写着“上电指令0x55 0xAA 0x01 0x01 0xFF”就需要修改ProtocolHandler类。这不是改配置而是加代码——但非常轻量。5.1 理解ProtocolHandler的扩展接口protocolhandler.h定义了统一的协议抽象class ProtocolHandler { public: enum ProtocolType { AT_MODE, HEX_MODE }; explicit ProtocolHandler(ProtocolType type AT_MODE); QByteArray buildPowerOnCommand(); // 构造上电指令 QByteArray buildPowerOffCommand(); // 构造断电指令 QByteArray buildResetCommand(); // 构造重启指令 private: ProtocolType m_type; };所有具体协议逻辑都封装在buildXXXCommand()的实现里。扩展新协议只需在protocolhandler.cpp中新增case HEX_MODE:分支。5.2 为SmartPSU-3A模块添加HEX指令完整代码假设模块协议文档规定上电0x55 0xAA 0x01 0x01 0xFF5字节断电0x55 0xAA 0x01 0x00 0xFE5字节重启0x55 0xAA 0x02 0x01 0xFD5字节所有指令需加简单异或校验前4字节异或结果放第5字节在protocolhandler.cpp中修改buildPowerOnCommand()QByteArray ProtocolHandler::buildPowerOnCommand() { switch (m_type) { case AT_MODE: return ATPOW1\r\n; case HEX_MODE: { // SmartPSU-3A 上电指令0x55 0xAA 0x01 0x01 XOR校验 QByteArray cmd; cmd.append(0x55); cmd.append(0xAA); cmd.append(0x01); // command ID: power control cmd.append(0x01); // param: ON // 计算XOR校验0x55 ^ 0xAA ^ 0x01 ^ 0x01 0xFF quint8 checksum 0x55 ^ 0xAA ^ 0x01 ^ 0x01; cmd.append(checksum); return cmd; } default: return ATPOW1\r\n; } }同理修改buildPowerOffCommand()和buildResetCommand()只需替换中间两个字节和校验值。5.3 UI层联动让用户能切换协议模式在mainwindow.ui中于串口设置区域添加一个QComboBox命名为protocolModeComboBox选项设为[AT Mode, HEX Mode]。然后在mainwindow.cpp的构造函数中绑定// 初始化协议模式下拉框 protocolModeComboBox-addItem(AT Mode, ProtocolHandler::AT_MODE); protocolModeComboBox-addItem(HEX Mode, ProtocolHandler::HEX_MODE); // 默认选AT Mode protocolModeComboBox-setCurrentIndex(0); // 在发送指令前根据选择创建对应ProtocolHandler void MainWindow::sendPowerCommand(bool isOn) { int modeIndex protocolModeComboBox-currentIndex(); ProtocolHandler::ProtocolType selectedMode static_castProtocolHandler::ProtocolType( protocolModeComboBox-itemData(modeIndex).toInt()); ProtocolHandler handler(selectedMode); QByteArray cmd isOn ? handler.buildPowerOnCommand() : handler.buildPowerOffCommand(); serialPort-write(cmd); }关键细节itemData()存储的是枚举值比用字符串判断更安全static_cast强转避免编译警告。这样改完用户在UI里选“HEX Mode”程序就自动走二进制路径——不用改一行配置文件也不用重新编译。6. 二次开发技巧如何把单机工具变成产线自动化节点这个程序的终极价值不是当个手动开关而是作为产线自动化流水线的一个可嵌入节点。我曾在某公司老化测试产线上把它改造成“上电-等待-检测-断电”全自动循环关键不在加功能而在暴露可控接口、降低集成门槛。以下是我实践验证过的三条改造路径按实施难度升序排列。6.1 方案一命令行参数启动最低成本集成让程序支持--port COM3 --baud 115200 --on参数即可被Python脚本或Shell直接调用。修改main.cpp#include QApplication #include QCommandLineParser #include QCommandLineOption int main(int argc, char *argv[]) { QApplication a(argc, argv); QCommandLineParser parser; parser.setApplicationDescription(DOME Power Control CLI); parser.addHelpOption(); parser.addOptions({ {port, Serial port name (e.g. COM3 or /dev/ttyUSB0), port}, {baud, Baud rate, baud, 9600}, {on, Power ON}, {off, Power OFF}, {reset, Power RESET} }); parser.process(a); MainWindow w; // 若传入参数则跳过UI直接执行 if (parser.isSet(port)) { w.setSerialPort(parser.value(port), parser.value(baud).toInt()); if (parser.isSet(on)) w.powerOn(); else if (parser.isSet(off)) w.powerOff(); else if (parser.isSet(reset)) w.powerReset(); return 0; // 不显示UI执行完退出 } w.show(); return a.exec(); }然后在Python产线脚本中调用import subprocess subprocess.run([./test-dome-control-power, --port, /dev/ttyUSB0, --baud, 115200, --on]) time.sleep(2) # 等待上电稳定 # 接着运行固件烧写命令...这招让我把原来需要人工值守的10台设备老化测试压缩成一个无人值守的Shell循环脚本。从那以后我每次写工具都强制走一遍“能否用命令行调用”的验证。6.2 方案二添加TCP监听端口跨语言集成让程序监听本地TCP端口如127.0.0.1:8080接收JSON指令。这样Java/C#/.NET程序都能用Socket直连控制。在mainwindow.h中添加#include QTcpServer #include QTcpSocket private: QTcpServer *tcpServer; QTcpSocket *clientSocket; private slots: void handleNewConnection(); void handleClientData();在mainwindow.cpp构造函数中启动服务器tcpServer new QTcpServer(this); if (!tcpServer-listen(QHostAddress::LocalHost, 8080)) { qWarning() TCP server failed to start: tcpServer-errorString(); } connect(tcpServer, QTcpServer::newConnection, this, MainWindow::handleNewConnection);handleNewConnection()中接收JSONvoid MainWindow::handleNewConnection() { clientSocket tcpServer-nextPendingConnection(); connect(clientSocket, QTcpSocket::readyRead, this, MainWindow::handleClientData); } void MainWindow::handleClientData() { QByteArray data clientSocket-readAll(); QJsonParseError jsonError; QJsonDocument doc QJsonDocument::fromJson(data, jsonError); if (jsonError.error ! QJsonParseError::NoError) { clientSocket-write({\status\:\error\,\msg\:\invalid json\}\n); return; } QJsonObject obj doc.object(); if (obj[command] power_on) { powerOn(); clientSocket-write({\status\:\ok\,\action\:\power_on\}\n); } else if (obj[command] power_off) { powerOff(); clientSocket-write({\status\:\ok\,\action\:\power_off\}\n); } }这样产线MES系统只要发个HTTP POST到http://127.0.0.1:8080用curl或Requests库就能触发电源动作。JSON协议比自定义二进制更易调试也方便日志审计。6.3 方案三导出为Qt Quick Controls 2组件未来演进虽然当前是Widgets程序但Qt 6已全面转向Quick。我把ProtocolHandler彻底解耦为独立QML类型供未来Qt Quick项目直接导入// 在main.cpp中注册 #include QQmlApplicationEngine #include qqml.h #include protocolhandler.h int main(int argc, char *argv[]) { // ... QGuiApplication setup qmlRegisterTypeProtocolHandler(Dome.Power, 1, 0, ProtocolHandler); QQmlApplicationEngine engine; engine.load(QUrl(QStringLiteral(qrc:/main.qml))); // ... }然后在QML中import Dome.Power 1.0 ProtocolHandler { id: powerCtrl protocolType: ProtocolHandler.HEX_MODE } Button { text: Power ON onClicked: powerCtrl.powerOn() }这种架构让UI和协议逻辑完全分离前端设计师改界面、后端工程师调协议互不干扰。从那以后我每次重构旧项目都强制走一遍“能否拆成QML组件”的评估——不是为了炫技而是让维护成本指数级下降。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

基于观测器的事件触发跟踪共识:多智能体协同控制设计与仿真

基于观测器的事件触发跟踪共识:多智能体协同控制设计与仿真

最近在做一个分布式协同控制的验证项目,卡在了一个听起来很“教科书”的问题上:一群动态特性不完全一致、通信链路还不太靠谱的智能体,怎么才能整体跟着一个虚拟领导者走。查了一圈文献,这个问题有一个很长很拗口的名字——基于观…

2026/10/17 14:35:20 阅读更多 →
LLM辅助木工CAD:从自然语言到切割清单的自动化设计实践

LLM辅助木工CAD:从自然语言到切割清单的自动化设计实践

我最近在技术社区看到不少木匠和爱好者在找同一个东西:能跟大模型对话的CAD。有人问:能不能我直接说“想做一张榫卯书桌”,软件就把三维模型、尺寸标注和切割清单一起扔过来?这个诉求听上去很容易被归为“想太多”,但把…

2026/10/17 14:35:20 阅读更多 →
MambaCD v0 代码评审:状态空间模型如何落地遥感变化检测的六大关键问题

MambaCD v0 代码评审:状态空间模型如何落地遥感变化检测的六大关键问题

一份名为MambaCD_light_v0的代码包摆在我面前时,第一反应是"终于有人把 Mamba 这类状态空间模型塞进变化检测(Change Detection,CD)任务里做轻量版了"。v0 嘛,必然带着一堆值得商榷的设计决策。我花了两天时…

2026/10/17 14:35:20 阅读更多 →

最新新闻

从零到一:路飞学城项目上线部署全流程与排坑实战

从零到一:路飞学城项目上线部署全流程与排坑实战

“路飞学城”这个名字,最早是我参与的一个模拟在线教育平台项目的代号。表面上它就是一个典型的网课系统:学员能注册登录、选课下单、看视频、记录学习进度,管理员能维护课程分类、处理订单、看用户数据。开发阶段大家写代码写得很嗨&#xf…

2026/10/17 15:34:03 阅读更多 →
FANUC电路板图纸解析:伺服驱动维修的信号链定位与电源树诊断

FANUC电路板图纸解析:伺服驱动维修的信号链定位与电源树诊断

简介:本资源为发那科(FANUC)数控系统核心电路板的全套技术图纸,专为工业自动化维修工程师、设备维护技术人员及FANUC系统深度学习者设计,解决驱动异常、电源故障、信号失稳等现场维修中缺乏原始参考依据的痛点。压缩包…

2026/10/17 15:34:03 阅读更多 →
Qt绘制Smith圆图实战:从坐标系到S参数轨迹

Qt绘制Smith圆图实战:从坐标系到S参数轨迹

简介:面向射频和微波电路设计者,这份资源提供了一个基于Qt 5.11.3与QPainter的史密斯圆图绘制小程序源码。程序能够读取txt文件中一连串复阻抗数据,经过字符串拆分、浮点转换与坐标变换后,在圆图上标出对应阻抗点,辅助…

2026/10/17 15:34:03 阅读更多 →
DNS解析优化实战:本地服务+hosts兜底加速域名解析

DNS解析优化实战:本地服务+hosts兜底加速域名解析

1. 项目缘起与核心思路拆解1.1 这个项目到底在解决什么问题很多人第一次看到“DnsSpeeder”这个名字,会下意识觉得它是个“加速器”类工具,其实更准确的理解是:它是一套围绕域名解析链路做优化的本地服务方案,核心工作对象是 DNS …

2026/10/17 15:34:03 阅读更多 →
C#轻量线性拟合方案:不依赖Python,用最小二乘法求解直线方程

C#轻量线性拟合方案:不依赖Python,用最小二乘法求解直线方程

简介:线性拟合公式求解.zip是一份基于C#的线性拟合算法实现包,面向数据分析、机器学习及工程计算开发者,解决通过最小二乘法快速求取直线方程ymxb的问题,拟合结果与Excel线性趋势线一致。压缩包内共45个文件,约87KB&am…

2026/10/17 15:34:03 阅读更多 →
STM32上跑二维码识别:OV5642+DCMI+DMA全链路实战

STM32上跑二维码识别:OV5642+DCMI+DMA全链路实战

简介:这份资源面向嵌入式开发初学者与参加电子设计竞赛的学生,提供基于STM32单片机与OV5642摄像头模块的二维码识别完整工程。包内共316个文件,以C源码与头文件为核心,包含67个.c与80个.h文件,另有编译中间产物如38个.…

2026/10/17 15:33:03 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 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/16 21:54:38 阅读更多 →
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/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →