Raspberry Pi可用于通过其GPIO与现实世界进行交互,例如,通过控制步进电机。 您也可以使用Raspberry Pi通过串行USB端口与某些设备(例如Arduino)对话。
在本指南中,我将向您展示如何将Raspberry Pi连接到串行USB端口,以及如何从终端(没有桌面环境)中使用Python读取其值。 为此,我们将使用Pyserial及其终端工具。
我们需要的
对于这个项目,我将使用Raspberry Pi Zero W和Arduino Uno R3。 步骤也应与较新的Raspberry Pi板一起使用。
- Raspberry Pi Zero W(包括适当的电源或至少3A的智能手机微型USB充电器)或更新的板
- 微型SD卡(至少16 GB,至少10类)
- Arduino Uno R3开发板或兼容开发板
分步指南
我们将从在Raspberry Pi Zero W中安装Raspbian Buster Lite开始。然后,我们将使用Python安装适当的库以从Arduino Uno R3读取数据。
树莓派环境准备
在Raspberry Pi文章中安装Raspbian Buster Lite,以安装Raspberry PI OS。
此外,Rasbpian Buster Lite预先安装了Python。
现在,我们必须使用第一个草图配置Arduino Uno。
安装Pyserial
在安装Pyserial之前,我们需要获得一点信息:
sudo apt install python-pip
sudo apt install python-pip
现在我们可以继续安装Pyserial:
python -m pip install pyserial
python -m pip install pyserial
测试安装和读取控制台
要阅读我们的控制台,我们需要将Raspberry Pi USB端口连接到Arduino一个。 为了进行测试,我将向您显示天气系统的结果:
必须将Arduino配置为在其运行草图中使用Serial.print命令通过COM端口发送数据。 请记住,在Arduino草图中的每个数据样本后面附加回车符(文本“ \ n”) ,以便每个读数具有不同的行。
在此配置中,您可以简单地使用Pyserial miniterm工具列出可用的端口及其输出。 使用命令python -m serial.tools.miniterm ,然后输入设备端口并在屏幕上接收端口数据。 使用CTRL +]关闭连接:
pi
@ raspberrypi:
~ $ python -m serial.
tools .
miniterm
--- Available ports:
---
1 : /dev/ttyACM0
'ttyACM0'
---
2 : /dev/ttyAMA0
'ttyAMA0'
--- Enter port index
or full name: /dev/ttyACM0
--- Miniterm on /dev/ttyACM0
9600
,
8
, N
,
1 ---
--- Quit: Ctrl+
] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
20.0
;
61.0
20.0
;
61.0
20.0
;
61.0
--- exit ---
如果您已经知道端口名称,也可以直接在端口读数上直接添加端口名称。 在我的示例中,正确的端口是/ dev / ttyACM0 (请参阅仅通过Raspbian Buster Lite的终端通过终端将Raspberry Pi连接到Arduino,以了解如何发现您的端口),因此直接命令将是:
pi
@ raspberrypi:
~ $ python -m serial.
tools .
miniterm /dev/ttyACM0
--- Miniterm on /dev/ttyACM0
9600
,
8
, N
,
1 ---
--- Quit: Ctrl+
] | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
20.0
;
61.0
20.0
;
61.0
20.0
;
61.0
--- exit ---
在Python程序中使用Pyserial
另外,此操作非常简单。 您需要导入一个串行库并打开端口。 创建一个名为“ test.py”的文件:
nano test . py
nano test . py
并包含以下代码:
import serial
ser
= serial.
Serial
( ’/dev/ttyACM0’
,
9600
)
readedText
= ser.
readline
(
)
print
( readedText
)
ser.
close
(
)
执行:
python test . py
python test . py
请享用!