4、上位机开发环境搭建:Python环境配置

好,咱们正式开始动手了。

这一章,我带你把开发环境搭起来。别小看这一步,我见过太多人卡在环境配置上,一卡就是半天。说白了,环境搭好了,后面写代码就是水到渠成的事。

4.1 Python环境管理:Anaconda vs Virtualenv

先聊Python环境。做多通道万用表采集,你可能会用到不同版本的库。比如某个库只支持Python 3.8,另一个库又要求3.10。这时候,环境管理工具就派上用场了。

我个人推荐Anaconda。为什么?因为它自带了很多科学计算库,比如numpy、pandas、matplotlib,这些在数据处理和可视化时都会用到。你装一个Anaconda,相当于把半个工具箱都搬回家了。

当然,如果你喜欢轻量级方案,Virtualenv也完全够用。我早期做嵌入式上位机时,用的就是Virtualenv。它更纯粹,只管理Python包,不附带其他东西。

我的建议:

  • 新手或需要做数据分析 → 用Anaconda
  • 老手或只想跑采集程序 → 用Virtualenv

安装Anaconda很简单,去官网下载对应版本,一路Next就行。装完后,打开命令行,输入:

conda --version

能看到版本号,就说明装好了。

然后创建一个新环境,专门给咱们这个项目用:

conda create -n multimeter python=3.9
conda activate multimeter

嗯,这里要注意:环境名我习惯用项目名,这样好记。你叫它multimeter或者dmm_project都行。

4.2 PyQt5 / PySide6 安装

接下来装GUI框架。做上位机,总得有个界面吧?PyQt5和PySide6是Python里最主流的两个选择。

它们俩其实是一家人——都是Qt的Python绑定。区别在于:PyQt5是Riverbank Computing维护的,PySide6是Qt官方维护的。API基本一样,代码迁移成本很低。

我个人偏向PySide6。为什么?因为它是官方亲儿子,更新更及时,而且LGPL协议更友好。不过如果你手头有现成的PyQt5代码,继续用PyQt5也没问题。

安装命令:

pip install PySide6
# 或者
pip install PyQt5

我在项目中遇到过一个问题:装PySide6时,因为网络原因下载很慢。后来我加了国内镜像源,速度就快多了:

pip install PySide6 -i https://pypi.tuna.tsinghua.edu.cn/simple

小技巧:装完后,可以写个简单测试,看看能不能弹出窗口:

from PySide6.QtWidgets import QApplication, QLabel
app = QApplication([])
label = QLabel("Hello, 万用表!")
label.show()
app.exec()

能弹出窗口,就说明装好了。

4.3 pyvisa / pyserial 库安装

这两个库是咱们和万用表通信的关键。

  • pyvisa:用于通过GPIB、USB、以太网等接口控制仪器。万用表一般支持SCPI命令,pyvisa就是发命令的工具。
  • pyserial:用于串口通信。如果你的万用表是RS-232接口,或者用USB转串口,那就得靠它。

安装命令:

pip install pyvisa pyserial

装完pyvisa后,还得装一个后端驱动。我推荐用NI-VISA或者pyvisa-py。NI-VISA功能全,但需要安装NI的驱动包。pyvisa-py是纯Python实现,轻量但功能有限。

我的习惯:先用pyvisa-py试试,不行再换NI-VISA。毕竟少装一个驱动,就少一个坑。

pip install pyvisa-py

注意:如果你用pyvisa-py,记得在代码里指定后端:

import pyvisa
rm = pyvisa.ResourceManager('@py')

不加@py的话,它会默认找NI-VISA,找不到就会报错。

4.4 开发工具选择:VS Code vs PyCharm

编辑器这块,我两个都用过,说说我的感受。

工具 优点 缺点
VS Code 轻量、插件丰富、免费、启动快 调试功能不如PyCharm强大
PyCharm 专业Python IDE、调试强、代码提示好 启动慢、社区版功能有限

我个人推荐VS Code。为什么?因为咱们做嵌入式上位机,经常要同时看代码、看串口日志、看波形。VS Code的终端集成和插件生态,用起来很顺手。

装好VS Code后,记得装这几个插件:

  • Python(微软官方)
  • Pylance(代码提示)
  • GitLens(版本管理)

当然,如果你习惯PyCharm,也完全没问题。工具这东西,顺手就好。

4.5 项目目录结构规划

最后,咱们聊聊项目结构。很多新手上来就写代码,写到后面自己都找不到文件在哪。我早期也吃过这个亏。

下面是我常用的结构,你可以直接拿来用:

multimeter_daq/
├── main.py                 # 主程序入口
├── requirements.txt        # 依赖库列表
├── config/
│   └── settings.py         # 配置文件(串口参数、采样率等)
├── ui/
│   ├── main_window.py      # 主窗口
│   └── widgets/            # 自定义控件
│       ├── channel_panel.py
│       └── data_display.py
├── drivers/
│   ├── dmm_driver.py       # 万用表驱动
│   └── visa_manager.py     # VISA资源管理
├── data/
│   ├── collector.py        # 数据采集逻辑
│   └── saver.py            # 数据保存(CSV/Excel)
├── utils/
│   ├── logger.py           # 日志模块
│   └── converter.py        # 单位转换等工具
└── docs/
    └── README.md           # 项目说明

解释一下每个目录的用途:

  • config/:放配置参数。比如串口号、波特率、采样间隔。这样改参数时不用翻代码。
  • ui/:放界面代码。把界面和业务逻辑分开,后期改界面时不会动到底层。
  • drivers/:放仪器驱动。换万用表型号时,只需要改这个目录下的文件。
  • data/:放数据采集和保存的逻辑。
  • utils/:放通用工具函数。

我的经验:一开始就规划好结构,后面写代码会顺畅很多。我曾经有个项目,因为没规划好,最后代码文件散落一地,改一个功能要找半天。从那以后,我每个项目都先搭好架子再写代码。

好了,环境搭好了,结构也规划好了。下一章,咱们就开始写真正的代码了——让万用表乖乖听话,把数据传上来。