Raspberry Piを使用してArduinoと通信します

Communicating with an Arduino Using a Raspberry Pi

Raspberry PiとArduinoは、さまざまなプロトコルを使用して互いに通信できます。 シリアル(UART)、I2C、およびSPI。このガイドでは、Raspberry PiとArduinoの間の通信をセットアップする方法を示します。 シリアルインターフェイス(UART)、これは最も一般的で簡単な方法です。


あなたが必要とするもの

  1. Raspberry Pi (GPIOサポートを備えたモデル、例えばPI 3、PI 4)
  2. Arduino (例:UNO、MEGA、NANO)
  3. USBケーブル (ArduinoをRaspberryPiに接続するため)
  4. ジャンパーワイヤ (GPIOシリアル通信を使用する場合)
  5. Pythonインストール Raspberry Piで
  6. Arduino ide Raspberry Piまたは別のコンピューターにインストールされています

ステップ1:ArduinoをRaspberry Piに接続します

RaspberryPiを使用してArduinoに接続できます USB または GPIOピン.

方法1:USB接続(推奨)

  1. 接続します Raspberry PiへのArduino USBケーブルを使用します。
  2. Raspberry Piは、Arduinoをシリアルデバイスとして検出します(例えば、 /dev/ttyUSB0 または /dev/ttyACM0).

方法2:GPIOピンの使用(ハードウェアシリアル)

  1. 接続します Arduino TX(ピン1)RaspberryPi RX(GPIO 15、ピン10).
  2. 接続します Arduino RX(ピン0)Raspberry Pi Tx(GPIO 14、ピン8).
  3. 接続する GNDからGNDへ.
  4. Raspberry Piの組み込みシリアルコンソールを無効にします。
    sudo raspi-config
    
    • に移動します インターフェイスオプション>シリアルポート.
    • シリアル上でログインシェルを無効にしますが、シリアルポートハードウェアを有効にします。
    • RaspberryPiを再起動します:
      sudo reboot
      

ステップ2:必要なライブラリをインストールします

Raspberry Piに必要なシリアルコミュニケーションツールがインストールされていることを確認してください。

sudo apt update
sudo apt install python3-serial

利用可能なシリアルポートを確認するには:

ls /dev/tty*

USB接続については、探してください /dev/ttyUSB0 または /dev/ttyACM0.


ステップ3:Arduinoスケッチをアップロードします

ArduinoからRaspberryPiにデータを送信するには、このシンプルなアップロード 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:RaspberryPiから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の場合)

    • Raspberry Piは次のように機能します マスター、Arduinoは次のように振る舞います 奴隷.
    • i2cを有効にする:
      sudo raspi-config
      
    • 必要なライブラリをインストールします:
      sudo apt install python3-smbus i2c-tools
      
    • 使用 Wire.h I2C通信のArduino側。
  2. SPI通信 (高速データ転送用)

    • 必要 spi対応のarduino そして SPI.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の間で、彼らがデータを交換できるように IoTプロジェクト、センサー統合、および自動化システム。実験します 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.