资讯动态

SerialTest 技术指南:跨平台串口/蓝牙/网络调试助手的完整功能解析与编译实战

发布时间:2026/10/14 23:18:40 来源:尧图企业网站定制
开发工具测试通信【免费下载链接】SerialTestData transceiver(monitor)/realtime plotter/shortcut/file transceiver over serial port/Bluetooth/network on Windows/Linux/Android/macOS | 跨平台串口/蓝牙/网络调试助手带数据收发/实时绘图/快捷发送/文件收发面板可在PC和Android设备上使用项目地址https://gitcode.com/gh_mirrors/se/SerialTest点击查看免费下载SerialTest 是一个基于 Qt5 的跨平台数据调试助手可在 Windows / Linux / macOS / Android 上运行核心能力覆盖数据收发、实时绘图、快捷发送控制、文件收发四大功能面板并支持串口、蓝牙 SPP 客户端/服务器、蓝牙 BLE、TCP 客户端/服务器、UDP六种通信通道。读完本篇你将掌握 SerialTest 各功能面板的具体能力与参数如 DTR/RTS 控制、转义字符、重复发送、绘图曲线数等、源码中各面板与通信层的对应关系以及在 Linux 下完整编译并安装的步骤含 QCustomPlot 依赖的两种处理方式。一、运行平台要求官方 READMEdoc/README/README_zh_CN.md声明的平台支持范围如下平台最低版本要求WindowsWindows 7 及更高版本Linux大多数主流发行版可通过 Flathub 等渠道安装macOS10.13 (High Sierra) 及更高版本Android5.0 (Lollipop) 及更高版本Android 端有一个明确的限制只支持形如/dev/ttyXXX的硬件串口若需在 Android 端使用 USB 串口设备README 指向了项目讨论区中的解决方案需自行检索项目 discussions。从 src/SerialTest.pro 可以看到项目使用的 Qt 模块与版本QT core gui serialport bluetooth network printsupport android { QT androidextras }同时该文件还揭示了两个平台差异点Windows MSVC额外编译 winrtbluetooth.cpp 并链接-lwindowsapp用于通过 WinRT 接口支持蓝牙 LE且要求 C17其他平台使用 C11。QCustomPlot 依赖若src/目录中存在qcustomplot.cpp则按源码方式编译Android 等平台无预编译库时使用否则定义QCUSTOMPLOT_USE_LIBRARY并链接 QCustomPlot 动态库qcustomplot2/qcustomplotdebug 版对应qcustomplotd2/qcustomplotd。二、通信通道总览源码中的类型定义从 src/connection.h 看整个应用的通信能力由统一的Connection抽象层提供支持的模式枚举为enum Type { SerialPort 0, // 串口 BT_Client, // 蓝牙 SPP 客户端主机 BT_Server, // 蓝牙 SPP 服务器从机 BLE_Central, // 蓝牙 BLE 中心设备 BLE_Peripheral, // 蓝牙 BLE 外围设备 TCP_Client, // TCP 客户端 TCP_Server, // TCP 服务器 UDP // UDP };各通道下又定义了三组参数结构体SerialPortArgument含baudRate、dataBits、stopBits、parity、flowControl及id、BTArgument含设备地址、服务器名、本地适配器地址与收发服务/特征值 UUID、NetworkArgument含remoteName、remotePort、localAddress、localPort及alias别名。这套统一抽象使得上文的数据收发/绘图/文件收发面板可以无缝切换任意通道无需改动面板代码。2.1 串口调试功能点来自 README显示系统所有可用串口及参数无需打开设备管理器或查看 dmesg可设置波特率、数据位、停止位、校验方式、流控方式并可在串口打开时实时更改可控制 DTR、RTS 信号显示 CTS、DSR、DCD、RI(RNG) 信号保存上一次连接的参数按照端口名或设备 ID 保存连接时参数快速重设连接参数。源码印证参数结构体 Connection::SerialPortArgument 中id字段注释为name or VID-PID[-serialNumber]即按端口名或设备 ID 保存参数在实现上支持以VID-PID-序列号形式区分同一端口的不同设备src/connection.h 暴露了SP_setDataTerminalReady()、SP_setRequestToSend()、SP_setBaudRate()、SP_setDataBits()、SP_setStopBits()、SP_setParity()、SP_setFlowControl()等接口以及SP_pinoutSignals()用于显示 CTS/DSR/DCD/RI 状态主窗口持有SerialPinout*成员见 src/mainwindow.h对应数据面板中的 DTR/RTS 勾选控件src/datatab.cpp 中on_data_flowDTRBox_clicked/on_data_flowRTSBox_clicked槽函数勾选状态会被写入配置项Flow_DTR/Flow_RTS。2.2 蓝牙 SPP 调试支持常见的串口透传模块HC-05、HC-06、JDY-34 等支持 PC 到手机、PC 到 PC、手机到手机之间的通信支持客户端主机模式/服务端从机模式可主动连接设备或被设备连接服务端模式可被多个设备连接可配置每个设备的收发状态可断开任意设备支持多个蓝牙适配器实验性功能客户端支持指定服务 UUID。源码印证src/connection.h 提供了BTServer_clientList()、BTServer_clientCount()与BTServer_setClientMode(QBluetoothSocket* clientSocket, bool RxEnabled, bool TxEnabled)接口——后者正是服务端为每个客户端单独配置收发状态的实现入口BTArgument中的RxServiceUUID注释标明for BLE(RxServiceUUID) and Bluetooth classic(serviceUUID)即经典蓝牙客户端可指定服务 UUID。2.3 蓝牙 BLE 调试支持显示已连接设备的所有服务Service、特征值Characteristic和描述符Descriptor支持嵌套服务接收和发送可使用不同的服务。从 src/connection.h 的私有枚举可以看到 BLE 收发模式的三种实现enum BLE_RxTxMode { BLE_1S1C 0, // Tx 和 Rx 使用同一个 service 与 characteristic BLE_1S2C, // 同一个 service不同 characteristic BLE_2S2C, // 不同 service };即接收和发送可使用不同的服务在实现上通过m_BLERxTxService/m_BLETxService两个QLowEnergyService指针区分。此外源码中还有一处值得一提的细节对于没有 notify 属性的 BLE 特征值Connection内部用一个m_pollTimer轮询读取数据见 src/connection.h 注释 for characteristics without notify property in BLE这解释了为何 UI 上提供轮询开关相关行为。2.4 TCP支持 IPv4/IPv6客户端支持指定出站 IP 和端口号客户端远端地址可以是 IP 或者域名客户端支持保存连接时参数并取名快速重设连接参数服务端支持在全部网卡或指定网卡上监听服务端可被多个设备连接可配置每个设备的收发状态可断开任意设备。源码印证NetworkArgument 中remoteName注释明确 connectToHost() supports hostName and hostAddress, writeDatagram() only supports hostAddress说明 UDP 发送路径要求已解析的地址alias字段useless for connection即保存连接参数并取名的别名机制。服务端的多客户端管理接口为TCPServer_clientList()/TCPServer_setClientMode()src/connection.h。2.5 UDP支持 IPv4/IPv6支持在全部网卡或指定网卡上监听支持保存连接时参数并取名快速重设连接参数可在运行时直接改变目标远端地址和端口号。最后一条对应 src/connection.h 的UDP_setRemote(const QString addr, quint16 port)接口。三、高性能设计为什么大数据量下界面不卡README 声明了三点性能特征快速响应数据接收与 UI 更新分离可通过关闭接收框实时显示进一步提速快速响应耗时较长操作在独立线程当中完成不阻塞 UI低内存占用关闭实时显示和绘图功能后接收字节数与内存消耗约为 1:1。从源码结构看第一点的实现位于 src/mainwindow.cpp第 102–106 行updateUITimer以20ms 间隔触发updateRxUI()Connection::readyRead通过Qt::QueuedConnection跨线程连接到readData()readData()第 494 行起只负责把新数据追加进RxUIBuf与元数据缓冲区不触碰任何控件updateRxUI()第 544–552 行在定时器回调里批量把RxUIBuf分发给dataTab-appendReceivedData()、plotTab-newData()、fileTab-fileXceiver()-newData()然后清空缓冲。也就是说数据流为通道字节 → 后台缓冲每帧 20ms 汇总一次→ 面板UI 刷新频率被定时器钳制这就是数据接收与 UI 更新分离的具体形态。第三点的依据则是MainWindow中rawReceivedData以QByteArray逐字节累积src/mainwindow.h关闭实时显示与绘图后没有额外复制结构故内存占用接近原始字节数的 1:1此比例为 README 声明值未在本仓库做基准测试。四、数据收发面板参数、编码与转义字符README 中该面板的功能清单支持 16 进制显示切换过程中不改变原始数据如\0支持显示接收数据时间戳支持根据超时分包显示时间戳支持导出已选中文本/原始数据每次发送后可添加任意后缀\n、\r\n、文本、Hex 数据重复发送多种编码支持UTF-8/16/32、GB2312/GB18030、BIG5、KOI8-R、Shift_JIS、EUC-KR 等即 QtQTextCodec支持的全部编码支持转义字符\r、\n、\t、\0、\123八进制、\xFF十六进制、\uABCDUnicode等可记录/忽略已发送数据可单独显示已发送数据/已接收数据。从 src/datatab.cpp 的saveDataPreference()可以看到这些开关如何持久化到配置文件键名可直接在preference.ini中检索settings-setValue(Recv_Hex, ui-receivedHexBox-isChecked()); // 接收 Hex 显示 settings-setValue(Recv_Latest, ui-receivedLatestBox-isChecked()); settings-setValue(Recv_Timestamp, ui-receivedTimestampBox-isChecked()); // 接收时间戳 settings-setValue(Recv_Realtime, ui-receivedRealtimeBox-isChecked()); // 实时刷新 settings-setValue(Send_Hex, ui-sendedHexBox-isChecked()); // 发送 Hex settings-setValue(Send_Enabled, ui-sendedEnableBox-isChecked()); settings-setValue(Send_Unescape, ui-data_unescapeBox-isChecked()); // 转义字符解析 settings-setValue(Suffix_Enabled, ui-data_suffixBox-isChecked()); // 发送后缀 settings-setValue(Suffix_Type, ui-data_suffixTypeBox-currentIndex()); settings-setValue(Suffix_Context, ui-data_suffixEdit-text()); settings-setValue(Repeat_Enabled, ui-data_repeatCheckBox-isChecked()); // 重复发送 settings-setValue(Repeat_Delay, ui-repeatDelayEdit-text());切换 Hex 显示不改变原始数据在实现上由DataTab构造时直接引用rawReceivedData/rawSendedData指针见 src/datatab.h 的构造函数参数显示层syncReceivedEditWithData()/syncSendedEditWithData()基于原始QByteArray重建文本因此 Hex/文本切换、以及\0等不可打印字符都不会污染底层数据。时间戳方面src/mainwindow.h 中m_mergeTimestamp合并时间戳与m_timestampInterval默认 10ms对应根据超时分包显示时间戳相邻两次到达间隔超过该阈值的包会分开打时间戳。五、实时绘图面板文本协议直接出图功能清单README对文本数据进行绘图保持人类可读性即 MCU 端只需printf字符串即可无需二进制协议可任意拖动画面用滚轮自由缩放画面支持触摸屏缩放/拖动手势可跟随最新数据可同时绘制最多 99 条曲线多种 X 轴模式带图例可改变曲线的名字和颜色可显示/隐藏曲线可以在收到指定数据后清空绘图区也可手动清空提供 STM32 / Arduino / STC8 例程以及数据转文本函数见 demo/README.md。源码印证src/plottab.cpp曲线数量由plot_dataNumBox定义于 src/ui/plottab.ui驱动changeGraphNum()src/plottab.cpp每增加一条曲线调用 QCustomPlot 的addGraph()并随机取色注意当 X 轴模式为首个数据作为 Xplot_XTypeBox索引 1时实际曲线数会减 1多种 X 轴模式、收到指定数据后清屏分别对应on_plot_XTypeBox_currentIndexChanged与on_plot_clearFlagTypeBox_currentIndexChanged/on_plot_clearFlagEdit_editingFinished槽图例交互双击重命名、单击显示/隐藏由 src/plottab.h 中onQCPLegendDoubleClick、onQCPLegendClick处理Android 端长按替代双击数据入口是PlotTab::newData(const QByteArray)src/plottab.h它接收的是原始字节并配合setDecoder(QTextDecoder*)完成文本解码后解析每行数值——这正是对文本数据绘图、保持人类可读性的实现路径。六、控制快捷方式面板一键发送指定数据快速发送数值用于调整参数支持发送 16 进制内容支持转义字符支持添加前缀后缀支持导入/导出。仓库中的 demo/Control/ 目录提供了现成的命令集合示例包含 HC-02、HC-05、JDY-34 三款蓝牙模块的 AT 指令配置脚本AT_HC02_zh_CN.json、AT_HC05_zh_CN.json、AT_JDY34_zh_CN.json可直接导入控制面板使用——demo/README.md 明确说明该文件夹有一些常见的命令集合可导入到控制面板中使用。单条快捷项的实现位于 src/controlitem.h /controlitem.ui整个面板由 src/ctrltab.h 管理。七、文件收发面板分块节流与独立线程功能清单README支持快速计算 CRC32 校验值发送可配置自动暂停每发送一定数量字节后暂停一段时间便于接收方处理接收可配置自动停止在接收到指定数量字节后自动停止接收CRC32 计算和文件读写流程在独立的线程中运行提高速度。源码印证src/filexceiver.hstruct ThrottleArgument { // -1: no throttle qint64 waitTime -1; qint64 batchByteNum -1; // 每发送多少字节暂停一次 }; Q_INVOKABLE void startTransmit(const QString filename); Q_INVOKABLE void startReceive(const QString filename); Q_INVOKABLE void setThrottleArgument(FileXceiver::ThrottleArgument arg); Q_INVOKABLE void setAutostop(qint64 num); // 接收指定字节数后自动停止独立线程对应FileXceiver持有的m_protocolChecksumThreadsrc/filexceiver.hCRC32 计算委托给 src/asynccrc.h 定义的AsyncCRC对象。发送进度通过dataTransmitted(qint64 num)信号上报数据本身经send(const QByteArray)信号交给主窗口的sendData()槽从而与 UI 线程解耦。八、人性化界面与绿色免安装特性界面相关特性README可在单个窗口上显示多个面板每个面板可拆分为子窗口PC 端支持窗口置顶、支持设置窗口不透明度PC 端程序可多开标题栏会显示当前工作模式可在状态栏查看当前连接参数并快速断开/重连支持改变字体、语言、主题含暗色主题。从 src/mainwindow.h 看每个功能面板PlotTab、CtrlTab、DataTab、DeviceTab、FileTab、SettingsTab都被封装进QListQDockWidget* dockList这就是单窗口多面板 拆分子窗口的实现基础Qt 的QDockWidget天然支持浮动与停靠且双击标题栏空白处可归位onTopBoxClicked()仅非 Android 编译、onOpacityChanged()、updateWindowTitle(Connection::Type)分别对应置顶、透明度、标题栏显示工作模式。暗色/亮色主题资源位于 src/qdarkstyle/dark/ 与 src/qdarkstyle/light/由darkstyle.qrc/lightstyle.qrc打包进资源见 src/SerialTest.pro。绿色免安装特性README仅产生单个配置文件Windows 版本不改变注册表项配置文件默认位于运行目录下也可位于系统默认配置文件夹中支持导入/导出/清空配置文件支持清空连接历史记录、改变历史记录最大条数。主程序入口 精确实现了运行目录优先 系统配置目录兜底的策略// 命令行可显式指定配置文件--config-path file path QCommandLineParser parser; parser.addOption({config-path, Use specified file as config file, file path}); // PC 端查找顺序 // 1) 当前工作目录的 preference.ini // 2) QStandardPaths::AppConfigLocation 下的 preference.ini // 3) 都没有则在当前工作目录新建 preference.iniAndroid 端则固定使用QSettings::NativeFormatsrc/main.cpp。所有偏好读写统一经过 src/mysettings.h 中的MySettings单例封装因此导入/导出/清空配置文件只需针对这一个preference.ini文件操作。命令行支持--config-path与帮助选项addHelpOption()可用于多开实例间隔离配置。九、在 Linux 下从源码编译以下是 READMEdoc/README/README_zh_CN.md中的完整编译流程1. 安装依赖以 Ubuntu/Debian 为例# sudo add-apt-repository universe sudo apt-get update # sudo apt-get install git build-essential sudo apt-get install qtbase5-dev qt5-qmake libqt5serialport5-dev qtconnectivity5-dev其中libqt5serialport5-dev对应串口功能qtconnectivity5-dev对应蓝牙QtBluetooth功能与 src/SerialTest.pro 中QT ... serialport bluetooth ...的声明一一对应。2. 获取项目源码cd ~ git clone https://link.gitcode.com/i/b1853a2693cad490aaded2090b2ed1aa.git --depth1 cd SerialTest mkdir build cd build3. 选择如何使用 QCustomPlot方式 A使用 QCustomPlot 源代码推荐README 标注下载 QCustomPlot 2.1.1 压缩包把其中的qcustomplot.cpp和qcustomplot.h解压到src/目录下然后继续编译wget https://www.qcustomplot.com/release/2.1.1/QCustomPlot-source.tar.gz tar -xzf QCustomPlot-source.tar.gz cp qcustomplot-source/qcustomplot.* ../src方式 B使用 QCustomPlot 库如果src/目录中没有qcustomplot.cpp项目在编译时会尝试在生成文件夹和库文件默认文件夹当中寻找 QCustomPlot 的库文件xxx.so/xxx.dll。从 src/SerialTest.pro 看此时会链接qcustomplot2release或qcustomplotd2debugWindows搜索路径还包括/app/lib/供 Flatpak 环境使用。4. 编译并运行export QT_SELECTqt5 qmake ../src make -j4 make clean ./SerialTest适用前提上述步骤基于 Qt5 工具链QT_SELECTqt5。QCustomPlot 固定使用 2.1.1 版本的源码若系统已安装 QCustomPlot 开发库可采用方式 B 跳过拷贝源码的步骤。十、通过 Linux 软件仓库安装Flathubflatpak install flathub io.github.wh201906.serialtest # 运行此应用 flatpak run io.github.wh201906.serialtest对应仓库中 pack/aur/io.github.wh201906.serialtest.metainfo.xml 的包 ID。Arch LinuxAUR# 安装发行版 yay -S serialtest # 安装开发版 yay -S serialtest-gitWindows / Android / macOSrelease 页面 包含编译好的 Windows、macOS 程序和 Android 安装包可直接下载Windows 平台下的程序免安装解压后即可使用配合上文绿色免安装一节。十一、与 MCU 联调仓库内的示例程序demo/ 文件夹下提供了多种 MCU 例程用于编写与 SerialTest 交互的 MCU 程序目录结构如下摘自 demo/README.md平台示例用途Arduinocontrol_pwm/、plot_cls/、plot_performance/、plot_realtime/plot_前缀演示实时绘图control_前缀演示快捷发送STC8Gplot_realtime/含main.c、uart.c等实时绘图实现了itoa()数字转字符串函数STM32F103C8plot_realtime/CubeMX 与 StdPeriph 两套工程实时绘图实现了printf()重定向到 USARTSTM32G431KBplot_realtime/CubeMX 工程实时绘图Control/HC-02/HC-05/JDY-34 的 AT 指令 JSON可导入控制面板demo/README.md 给出了两条对移植很有用的提示STM32 平台的项目中实现了用printf()函数在 USART 串口上输出数值的功能可在其它平台参考其实现Arduino 文件夹下有全部示例其它平台仅提供plot_realtime项目便于移植。例如 demo/STC8G/plot_realtime/src/main.c 展示了如何用最小代码周期性地把测量值格式化为文本行发到串口从而直接驱动 SerialTest 的绘图面板——这印证了对文本数据绘图、保持人类可读性的协议设计MCU 端不需要任何二进制帧只需把数值写成可打印文本即可。十二、教程、翻译与许可证配套教程位于 doc/tutorials/1. 连接设备2. 数据收发3. 绘图更多界面预览见 doc/previews/previews_zh_CN.md更新日志见 doc/CHANGELOG/CHANGELOG_zh_CN.md翻译项目使用 Weblate 管理翻译翻译文件位于 src/i18n/SerialTest_zh_CN.ts、SerialTest_zh_TW.ts、SerialTest_nb_NO.ts见 src/SerialTest.prosrc/main.cpp 按配置项Lang_Name加载对应.qm未指定时回退到系统区域设置中文环境自动加载简体中文/繁体中文。许可证划分来自 README 与仓库根目录文件src/ 下源代码GPL 3.0src/qcustomplot.h 与 src/qdarkstyle/ 下文件使用各自上游项目的许可证demo/ 下源代码不含依赖库、项目所有翻译、文档及其余部分MIT。小结SerialTest 的设计特点是用一个统一的Connection抽象层承载 8 种通信模式把数据接收、缓冲、UI 刷新与耗时操作CRC32、文件读写分层到独立线程再在其上叠加数据收发、实时绘图、快捷控制、文件收发四个可拆分停靠的面板。对使用者而言核心操作路径是选通道 → 配参数或复用保存的参数→ 在四个面板间切换对开发者而言仓库内的 src/ 源码与 demo/ 例程提供了从 PC 应用到 MCU 端协议的完整参考。赞分享开发工具测试通信【免费下载链接】SerialTestData transceiver(monitor)/realtime plotter/shortcut/file transceiver over serial port/Bluetooth/network on Windows/Linux/Android/macOS | 跨平台串口/蓝牙/网络调试助手带数据收发/实时绘图/快捷发送/文件收发面板可在PC和Android设备上使用项目地址https://gitcode.com/gh_mirrors/se/SerialTest点击查看免费下载相关推荐SerialTest终极指南跨平台串口/蓝牙/网络调试助手完全解析SerialTest终极指南跨平台串口/蓝牙/网络调试助手完全解析 SerialTest是一款功能强大的开源调试助手专门为开发者提供跨平台的串口通信、蓝牙调开发工具测试通信【亲测免费】 跨平台串口/蓝牙/网络调试助手SerialTest跨平台串口/蓝牙/网络调试助手SerialTest SerialTest 是一个功能强大的开源调试助手支持跨平台操作可在 Windows、Linux、ma开发工具测试通信终极跨平台串口调试助手SerialTest完整使用指南终极跨平台串口调试助手SerialTest完整使用指南 还在为调试串口设备而烦恼吗SerialTest是一款功能强大的跨平台串口调试助手支持Windows开发工具测试通信创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑