使用Raspberry Pi与Arduino进行通信

Communicating with an Arduino Using a Raspberry Pi

Raspberry Pi和Arduino可以使用不同的协议,包括 串行(UART),I2C和SPI。本指南将向您展示如何使用Raspberry Pi和Arduino之间建立通信 串行接口(UART),这是最常见,最直接的方法。


你需要什么

  1. 覆盆子pi (任何具有GPIO支持的模型,例如PI 3,PI 4)
  2. Arduino (例如,UNO,Mega,Nano)
  3. USB电缆 (将Arduino连接到Raspberry Pi)
  4. 跳线 (如果使用GPIO串行通信)
  5. 安装了Python 在覆盆子pi上
  6. Arduino IDE 安装在覆盆子Pi或单独的计算机上

步骤1:将Arduino连接到Raspberry Pi

您可以使用Raspberry Pi将Raspberry Pi连接到Arduino USBGPIO引脚.

方法1:USB连接(推荐)

  1. 连接 Arduino到Raspberry Pi 使用USB电缆。
  2. Raspberry Pi将检测到Arduino作为串行设备(例如, /dev/ttyUSB0 或者 /dev/ttyACM0).

方法2:使用GPIO引脚(硬件串行)

  1. 连接 Arduino TX(引脚1)Raspberry Pi rx(GPIO 15,引脚10).
  2. 连接 Arduino RX(引脚0)覆盆子Pi TX(GPIO 14,引脚8).
  3. 连接 GND到GND.
  4. 禁用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发送的消息。

替代通信方法

  1. I2C通信 (对于多个arduinos)

    • 覆盆子Pi充当 掌握,Arduino充当 奴隶.
    • 启用I2C:
      sudo raspi-config
      
    • 安装所需库:
      sudo apt install python3-smbus i2c-tools
      
    • 使用 Wire.h 在Arduino方面进行I2C通信。
  2. SPI通信 (用于高速数据传输)

    • 需要 Spi-nable ArduinoSPI.h 图书馆。
    • 比UART和I2C快,但需要 更多接线.

故障排除

  1. Arduino在Raspberry Pi上未检测到

    • 跑步 ls /dev/tty* 检查可用的串行设备。
    • 确保在Python脚本中指定正确的串行端口。
  2. 权限拒绝错误

    • 将您的用户添加到 dialout 团体:
      sudo usermod -aG dialout $USER
      sudo reboot
      
  3. 输出中的垃圾字符

    • 确保 两种设备都使用相同的波特率 (例如。, 9600).
    • 添加一个小延迟(time.sleep(2))阅读Python中的数据之前。

结论

通过遵循本指南,您可以建立 连续交流 在Arduino和Raspberry Pi之间,使他们可以将数据交换 物联网项目,传感器集成和自动化系统。实验 I2C和SPI 对于更高级的应用程序!

发表评论

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.