4. Python环境准备:安装pyserial库、检查Python版本、虚拟环境搭建
好,咱们正式开始动手。前面聊了那么多UART的理论和树莓派的硬件引脚,现在终于要回到软件层面了。我个人习惯是,不管项目大小,先把Python环境收拾利索。这一步看似基础,但我在项目中见过太多因为环境混乱导致的诡异问题——明明代码逻辑没问题,就是跑不起来,最后发现是Python版本不对,或者库装到了全局环境里,跟项目冲突。
这一章,咱们就踏踏实实把三件事搞定:检查Python版本、搭建虚拟环境、安装pyserial库。这三步走完,你的树莓派才算真正准备好迎接串口编程。
4.1 检查Python版本
树莓派官方系统(Raspberry Pi OS)默认带了Python,但版本可能不是你想要的。我建议用Python 3.7以上版本,因为pyserial在3.7+上表现最稳定,而且很多新特性(比如f-string)写起来也顺手。
打开终端,敲下面这条命令:
python3 --version
你会看到类似这样的输出:
Python 3.9.2
嗯,3.9.2,完全够用。如果你看到的是Python 2.7.x,那就要注意了——树莓派系统里可能同时存在Python 2和Python 3,python命令默认指向的是Python 2,而python3才是Python 3。我建议你始终用python3和pip3来操作,避免混淆。
如果你发现Python版本低于3.7,比如3.5或3.6,那就需要升级了。升级方法很简单:
sudo apt update
sudo apt install python3.9
安装完成后,用python3 --version确认一下。我记得有一次帮朋友调试,他的树莓派上Python 3.5死活装不上pyserial的最新版,最后升级到3.7就一切正常了。所以,版本这事别凑合。
4.2 虚拟环境搭建
为什么要用虚拟环境?说白了,就是为了隔离。你想想看,一个树莓派上可能跑好几个项目:这个项目用pyserial 3.4,那个项目用pyserial 3.5,还有的项目可能根本不用pyserial。如果全装到全局环境里,迟早会出冲突。
我自己的习惯是:每个项目一个虚拟环境,互不干扰。这样就算某个环境搞坏了,删掉重来就是,不影响系统。
Python 3.3以上版本自带venv模块,不需要额外安装。咱们就在当前项目目录下创建一个虚拟环境:
python3 -m venv uart_env
这条命令会创建一个名为uart_env的文件夹,里面就是独立的Python环境。激活它:
source uart_env/bin/activate
激活后,你会看到终端提示符前面多了(uart_env)字样,像这样:
(uart_env) pi@raspberrypi:~ $
这就说明你现在处于虚拟环境中了。在这个环境里安装的任何Python库,都不会影响到系统全局环境。
deactivate 命令。下次再进项目目录,记得先 source uart_env/bin/activate 激活。
我曾经犯过一个错误:在虚拟环境里装好了所有依赖,结果第二天打开终端忘了激活环境,直接跑代码,报了一堆"模块未找到"的错误。当时还以为是代码坏了,折腾了半天才发现是环境没激活。嗯,这种低级错误,犯过一次就不会再犯了。
4.3 安装pyserial库
pyserial是Python操作串口的标配库。它封装了底层的系统调用,让你可以用几行代码就完成串口的打开、读写、关闭操作。咱们这次课程的所有串口通信代码,都基于pyserial。
安装命令很简单,在虚拟环境激活的状态下执行:
pip install pyserial
如果你用的是Python 3,也可以用pip3:
pip3 install pyserial
安装完成后,验证一下:
python3 -c "import serial; print(serial.__version__)"
如果输出了版本号,比如3.5,那就说明安装成功了。
serial.Serial。你只需要创建这个类的实例,指定端口、波特率等参数,就可以开始通信了。后面几章我们会详细讲它的用法。
这里有个细节要注意:pyserial在Linux系统上依赖python3-serial系统包。如果你用pip安装失败,可以试试用系统包管理器安装:
sudo apt install python3-serial
不过我个人更推荐用pip,因为能拿到最新版本。系统包管理器里的版本通常比较旧。
4.4 本章知识结构
下面这张图把咱们这一章的核心逻辑串起来了。你可以把它当作一个检查清单,看看自己有没有遗漏哪一步。
4.5 常见问题与避坑
这一节我把自己踩过的坑整理一下,你遇到了可以直接翻到这里查。
| 问题 | 原因 | 解决方法 |
|---|---|---|
pip: command not found |
系统没装pip,或者pip指向Python 2 | 用 pip3 代替,或者 sudo apt install python3-pip |
ModuleNotFoundError: No module named 'serial' |
pyserial没安装,或者没在虚拟环境里安装 | 确认虚拟环境已激活,重新 pip install pyserial |
Permission denied: '/dev/ttyAMA0' |
当前用户没有串口权限 | 将用户加入dialout组:sudo usermod -a -G dialout $USER |
| 虚拟环境激活后pip仍指向全局 | PATH环境变量没更新 | 重新 source uart_env/bin/activate,或者检查shell配置文件 |
/dev/ttyAMA0 或 /dev/ttyS0。如果你用的是USB转串口模块,设备文件可能是 /dev/ttyUSB0。后面几章我们会详细讲如何确认串口设备。