树莓派与 Arduino 通过 USB 接口通信是一种方便且常用的方式,本质上还是基于串口通信原理。下面为你详细介绍实现步骤:
硬件连接
你只需使用一根 USB 线将 Arduino 连接到树莓派的 USB 接口上。在连接后,树莓派会将 Arduino 识别为一个串口设备。
软件准备
Arduino 端
- 安装 Arduino IDE:你可以从Arduino 官方网站下载并安装适合你操作系统的 Arduino IDE。
- 编写代码:以下是一个简单的示例代码,用于通过串口发送和接收数据。
cpp
void setup() {
// 初始化串口通信,波特率为9600
Serial.begin(9600);
}
void loop() {
// 向树莓派发送数据
Serial.println("Hello from Arduino!");
delay(1000);
// 检查是否有来自树莓派的数据
if (Serial.available() > 0) {
// 读取接收到的数据
char incomingChar = Serial.read();
// 打印接收到的数据
Serial.print("Received from Raspberry Pi: ");
Serial.println(incomingChar);
}
}
- 上传代码:将 Arduino 通过 USB 连接到电脑,打开 Arduino IDE,选择正确的开发板和端口,然后将上述代码上传到 Arduino。
树莓派端
- 启用串口通信:打开树莓派的终端,运行以下命令编辑配置文件:(也可以通过点击左上角树莓派标志,在首选项找到树莓派配置,把串口打开)
-
控制台方式如下:
bash
sudo nano /boot/config.txt
在文件末尾添加以下内容以启用串口:
plaintext
enable_uart=1
按下Ctrl + X
,然后按Y
保存并退出。接着运行以下命令重启树莓派:
bash
sudo reboot
- 安装 Python 串口库:在树莓派的终端中运行以下命令安装
pyserial
库:
bash
sudo pip3 install pyserial
- 编写 Python 代码:以下是一个简单的 Python 代码示例,用于与 Arduino 进行通信。
python
import serial
import time
# 初始化串口对象,根据实际情况修改串口号和波特率
ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)
try:
while True:
# 检查是否有来自Arduino的数据
if ser.in_waiting > 0:
# 读取接收到的数据
line = ser.readline().decode('utf-8').rstrip()
print(f"Received from Arduino: {line}")
# 向Arduino发送数据
ser.write('A'.encode('utf-8'))
time.sleep(1)
except KeyboardInterrupt:
print("Communication stopped by user.")
ser.close()
结果展示
树莓派接收到arduino的信号
代码解释
Arduino 代码
Serial.begin(9600)
:初始化串口通信,设置波特率为 9600。Serial.println("Hello from Arduino!")
:向树莓派发送一条消息。Serial.available()
:检查是否有数据从树莓派发送过来。Serial.read()
:读取接收到的数据。
树莓派 Python 代码
serial.Serial('/dev/ttyACM0', 9600, timeout=1)
:初始化串口对象,指定串口号为/dev/ttyACM0
,波特率为 9600,超时时间为 1 秒。ser.in_waiting
:检查是否有数据从 Arduino 发送过来。ser.readline().decode('utf-8').rstrip()
:读取接收到的数据并进行解码和去除换行符处理。ser.write('A'.encode('utf-8'))
:向 Arduino 发送一个字符A
。
注意事项
- 串口号:树莓派识别 Arduino 的串口号可能会有所不同,常见的有
/dev/ttyACM0
或/dev/ttyUSB0
,你可以通过ls /dev/tty*
命令查看连接的串口设备。 - 波特率:Arduino 和树莓派的串口通信波特率必须保持一致,否则会出现数据传输错误。
通过以上步骤,你就可以实现树莓派与 Arduino 通过 USB 接口进行通信了。