第二章 上位机开发环境搭建
说实话,很多初学者一上来就急着写代码,结果环境没配好,折腾半天连个Hello World都跑不出来。我见过太多这样的案例了。所以这一章,咱们老老实实把开发环境搭好。磨刀不误砍柴工嘛。
2.1 Python环境配置
Python版本怎么选?我个人习惯用Python 3.8或3.9。为什么?因为PyQt5和python-can这些库,对3.10以上版本的支持偶尔会出点小毛病。我在项目中就踩过这个坑——用Python 3.11装PyQt5,死活装不上,最后发现是版本兼容问题。
下载地址:python.org,别去其他地方乱下。安装时记得勾选「Add Python to PATH」,这个很重要。不勾的话,你后面在命令行敲python会提示找不到命令。
python --version,如果显示版本号,说明装好了。如果没显示,检查一下PATH。
2.2 PyCharm安装与调试
PyCharm分专业版和社区版。咱们做BMS上位机开发,社区版完全够用。别一上来就破解专业版,没必要。
安装过程很简单,一路Next就行。但有几个设置我建议你改一下:
- 字体大小:默认的12号字看着累,我一般调到16。Settings → Editor → Font
- 自动保存:PyCharm默认不会自动保存,记得勾上「Save files on frame deactivation」
- 代码提示:把「Case sensitive completion」改成None,这样你打小写也能提示大写开头的函数
调试功能怎么用?你想想看,写上位机最怕什么?最怕串口数据解析出错。这时候断点调试就派上用场了。在代码行号旁边点一下,出现红点就是断点。然后点右上角的小虫子图标(Debug),程序就会停在断点处。你可以一行一行地看变量值,特别直观。
2.3 虚拟环境管理
虚拟环境这东西,说白了就是给你的每个项目单独搞一个小房间。A项目用PyQt5 5.15,B项目用PyQt6,互不干扰。没有虚拟环境的话,你装一个库就会全局生效,时间长了版本冲突能把你搞疯。
PyCharm创建虚拟环境很简单:
- 新建项目时,选择「New environment using Virtualenv」
- Python解释器选你刚装的那个
- 勾上「Inherit global site-packages」——这个看情况,我一般不勾,保持干净
如果你喜欢用命令行,也可以这样:
# 创建虚拟环境
python -m venv bms_env
# 激活(Windows)
bms_env\Scripts\activate
# 激活(Mac/Linux)
source bms_env/bin/activate
# 退出
deactivate
嗯,这里要注意:激活后,命令行前面会出现 (bms_env) 字样,说明你已经在虚拟环境里了。这时候装的所有库,都只在这个环境里生效。
2.4 常用库安装
接下来装几个核心库。咱们做BMS上位机,主要用这四个:
| 库名 | 用途 | 安装命令 |
|---|---|---|
| PyQt5 | 图形界面开发 | pip install PyQt5 |
| pyserial | 串口通信 | pip install pyserial |
| python-can | CAN总线通信 | pip install python-can |
| matplotlib | 数据可视化(画曲线图) | pip install matplotlib |
安装命令很简单,在终端里敲 pip install 库名 就行。但有几个坑我得提醒你:
- PyQt5安装慢?换国内镜像源:
pip install PyQt5 -i https://pypi.tuna.tsinghua.edu.cn/simple - python-can装完后,记得装对应的驱动库。比如用PCAN硬件,要装
python-can[pcan] - matplotlib如果画图时中文乱码,是因为缺少中文字体。解决方案:下载SimHei字体放到matplotlib的字体目录下
装完后怎么验证?写个简单的测试代码:
import serial
import can
import matplotlib.pyplot as plt
from PyQt5 import QtWidgets
print("所有库导入成功!")
print(f"PySerial版本: {serial.__version__}")
print(f"python-can版本: {can.__version__}")
如果没报错,说明环境搭好了。如果报错,多半是库没装全或者版本不对。别慌,看看错误信息,一般都能解决。
pip install -r requirements.txt 一键安装。省心。
好了,环境搭完,咱们就可以正式开始写上位机代码了。下一章,我会带大家用PyQt5搭一个简单的界面,把串口数据读上来。到时候你就知道,前面这些准备工作有多重要了。