Raspberry Pi和Arduino可以使用不同的协议,包括 串行(UART),I2C和SPI。本指南将向您展示如何使用Raspberry Pi和Arduino之间建立通信 串行接口(UART),这是最常见,最直接的方法。
你需要什么
- 覆盆子pi (任何具有GPIO支持的模型,例如PI 3,PI 4)
- Arduino (例如,UNO,Mega,Nano)
- USB电缆 (将Arduino连接到Raspberry Pi)
- 跳线 (如果使用GPIO串行通信)
- 安装了Python 在覆盆子pi上
- Arduino IDE 安装在覆盆子Pi或单独的计算机上
步骤1:将Arduino连接到Raspberry Pi
您可以使用Raspberry Pi将Raspberry Pi连接到Arduino USB 或 GPIO引脚.
方法1:USB连接(推荐)
- 连接 Arduino到Raspberry Pi 使用USB电缆。
- Raspberry Pi将检测到Arduino作为串行设备(例如,
/dev/ttyUSB0
或者/dev/ttyACM0
).
方法2:使用GPIO引脚(硬件串行)
- 连接 Arduino TX(引脚1) 到 Raspberry Pi rx(GPIO 15,引脚10).
- 连接 Arduino RX(引脚0) 到 覆盆子Pi TX(GPIO 14,引脚8).
- 连接 GND到GND.
- 禁用Raspberry Pi的内置串行控制台:
sudo raspi-config
- 导航到 接口选项>串行端口.
- 通过串行禁用登录外壳,但启用串行端口硬件。
- 重新启动覆盆子Pi:
sudo reboot
步骤2:安装所需库
确保您的Raspberry Pi已安装了必要的串行通信工具。
sudo apt update
sudo apt install python3-serial
要检查可用的串行端口:
ls /dev/tty*
对于USB连接,请寻找 /dev/ttyUSB0
或者 /dev/ttyACM0
.
步骤3:上传Arduino草图
要将数据从Arduino发送到Raspberry Pi,请上传此简单 Arduino素描 使用 Arduino IDE.
void setup() {
Serial.begin(9600); // Start serial communication
}
void loop() {
Serial.println("Hello from Arduino!"); // Send message
delay(1000);
}
步骤4:阅读Raspberry Pi的序列数据
在Raspberry Pi上创建一个Python脚本,以读取Arduino的数据。
Python代码示例
import serial
import time
# Open the serial port (Change ttyUSB0 if necessary)
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2) # Wait for connection
try:
while True:
if ser.in_waiting > 0:
data = ser.readline().decode('utf-8').strip()
print(f"Received: {data}")
except KeyboardInterrupt:
print("Exiting...")
ser.close()
- 确保这一点
/dev/ttyUSB0
匹配您检测到的串行端口。 - 运行脚本:
python3 serial_read.py
- 你应该看 “来自Arduino的您好!” 每秒打印一次。
步骤5:将Raspberry Pi的数据发送到Arduino
修改 Arduino代码 从Raspberry Pi接收数据:
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
String received = Serial.readStringUntil('\\n');
Serial.print("Raspberry Pi Sent: ");
Serial.println(received);
}
}
修改 Python代码 将数据发送到Arduino:
ser.write(b"Hello from Raspberry Pi!\\n")
- 现在,Arduino将收到Raspberry Pi发送的消息。
替代通信方法
-
I2C通信 (对于多个arduinos)
- 覆盆子Pi充当 掌握,Arduino充当 奴隶.
- 启用I2C:
sudo raspi-config
- 安装所需库:
sudo apt install python3-smbus i2c-tools
- 使用
Wire.h
在Arduino方面进行I2C通信。
-
SPI通信 (用于高速数据传输)
- 需要 Spi-nable Arduino 和
SPI.h
图书馆。 - 比UART和I2C快,但需要 更多接线.
- 需要 Spi-nable Arduino 和
故障排除
-
Arduino在Raspberry Pi上未检测到
- 跑步
ls /dev/tty*
检查可用的串行设备。 - 确保在Python脚本中指定正确的串行端口。
- 跑步
-
权限拒绝错误
- 将您的用户添加到
dialout
团体:sudo usermod -aG dialout $USER sudo reboot
- 将您的用户添加到
-
输出中的垃圾字符
- 确保 两种设备都使用相同的波特率 (例如。,
9600
). - 添加一个小延迟(
time.sleep(2)
)阅读Python中的数据之前。
- 确保 两种设备都使用相同的波特率 (例如。,
结论
通过遵循本指南,您可以建立 连续交流 在Arduino和Raspberry Pi之间,使他们可以将数据交换 物联网项目,传感器集成和自动化系统。实验 I2C和SPI 对于更高级的应用程序!