Raspberry PiとArduinoは、さまざまなプロトコルを使用して互いに通信できます。 シリアル(UART)、I2C、およびSPI。このガイドでは、Raspberry PiとArduinoの間の通信をセットアップする方法を示します。 シリアルインターフェイス(UART)、これは最も一般的で簡単な方法です。
あなたが必要とするもの
- Raspberry Pi (GPIOサポートを備えたモデル、例えばPI 3、PI 4)
- Arduino (例:UNO、MEGA、NANO)
- USBケーブル (ArduinoをRaspberryPiに接続するため)
- ジャンパーワイヤ (GPIOシリアル通信を使用する場合)
- Pythonインストール Raspberry Piで
- Arduino ide Raspberry Piまたは別のコンピューターにインストールされています
ステップ1:ArduinoをRaspberry Piに接続します
RaspberryPiを使用してArduinoに接続できます USB または GPIOピン.
方法1:USB接続(推奨)
- 接続します Raspberry PiへのArduino USBケーブルを使用します。
- Raspberry Piは、Arduinoをシリアルデバイスとして検出します(例えば、
/dev/ttyUSB0
または/dev/ttyACM0
).
方法2:GPIOピンの使用(ハードウェアシリアル)
- 接続します Arduino TX(ピン1) に RaspberryPi RX(GPIO 15、ピン10).
- 接続します Arduino RX(ピン0) に Raspberry Pi Tx(GPIO 14、ピン8).
- 接続する GNDからGNDへ.
- 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から送信されたメッセージを受信します。
代替通信方法
-
I2C通信 (複数のArduinosの場合)
- Raspberry Piは次のように機能します マスター、Arduinoは次のように振る舞います 奴隷.
- i2cを有効にする:
sudo raspi-config
- 必要なライブラリをインストールします:
sudo apt install python3-smbus i2c-tools
- 使用
Wire.h
I2C通信のArduino側。
-
SPI通信 (高速データ転送用)
- 必要 spi対応のarduino そして
SPI.h
図書館。 - UARTおよびI2Cよりも高速ですが、必要です より多くの配線.
- 必要 spi対応のarduino そして
トラブルシューティング
-
arduinoはraspberry piで検出されません
- 走る
ls /dev/tty*
利用可能なシリアルデバイスを確認します。 - 正しいシリアルポートがPythonスクリプトで指定されていることを確認してください。
- 走る
-
許可はエラーを拒否しました
- ユーザーをに追加します
dialout
グループ:sudo usermod -aG dialout $USER sudo reboot
- ユーザーをに追加します
-
出力のガベージ文字
- 確保する 両方のデバイスは同じボーレートを使用します (例えば。、
9600
). - 小さな遅延を追加します(
time.sleep(2)
)Pythonでデータを読む前。
- 確保する 両方のデバイスは同じボーレートを使用します (例えば。、
結論
このガイドに従うことで、確立できます シリアル通信 ArduinoとRaspberry Piの間で、彼らがデータを交換できるように IoTプロジェクト、センサー統合、および自動化システム。実験します I2CとSPI より高度なアプリケーションのために!