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/:放通用工具函数。
我的经验:一开始就规划好结构,后面写代码会顺畅很多。我曾经有个项目,因为没规划好,最后代码文件散落一地,改一个功能要找半天。从那以后,我每个项目都先搭好架子再写代码。
好了,环境搭好了,结构也规划好了。下一章,咱们就开始写真正的代码了——让万用表乖乖听话,把数据传上来。