Raspberry Pi Arduino Serial Communication–あなたが知る必要があるすべて
このチュートリアルでは、シリアル通信を介してRaspberry PiとArduinoボードの間で通信する方法を紹介します。
まず、シリアル通信とは何かを簡単に説明します。 次に、ハードウェアとソフトウェアを設定する方法を見て、Pythonコード(ArduinoのCpp)に飛び込みます。 最初は基本的な例で、Raspberry Pi、Arduino、およびその他の電子デバイスを使用して、より完全なアプリケーションにつながります。
このチュートリアルでは、Raspberry Pi4(以前は3B、3B+)ボード、および任意のArduinoボードで動作します。 私は主にArduino Unoを使用しますが、シリアル通信に関してはArduinoボード間の違いについて詳しく説明します。
電子機器を操作するときは、通信が重要です。 各デバイスは、他のデバイスと明確に通信できる必要があります。 これは、非常に基本的なアプリケーションからより複雑なアプリケーションに切り替えるために作業する最も重要なことの一つです。
目次
シリアル通信とは何ですか(UART付き)
シリアル通信は、単にデータを転送する方法です。 データは、多くのビットが同時に送信される並列通信とは対照的に、一度に1ビットずつ(1バイト=8ビット)、順番に送信されます。具体的には、ArduinoとRaspberry PiでSerialを使用する場合は、UARTプロトコルを使用しています。 UARTは”普遍的な非同期受信および伝達”を意味する。
Raspberry Piを使用して独自のプロジェクトを構築する方法を学んでいますか?
初心者のためのRaspberry Piをチェックし、ステップバイステップを学びます。
基本的にはシリアル通信に基づく非同期マルチマスタプロトコルで、2つのボード間で通信することができます。 安心してください、あなたのためにすべての低い層を処理するライブラリがあります。
マルチマスターは、接続されたすべてのデバイスが必要なときに自由にデータを送信できることを意味します。 これは、マスタデバイスのみが通信を開始できるマスタスレーブプロトコルとの主な違いの1つです。 通常、マスタースレーブ構成が必要な場合、たとえばArduinoボードと複数のセンサーやアクチュエータがある場合など、I2CやSPIなどの他のプロトコルを使用します。
Arduino Unoボードには、USBケーブルまたはRX/TXピンから使用できるUARTが1つあります(同時に両方で使用しないでください)。 いくつかのボードは、より多くの利用可能なUartを持っています。 たとえば、Arduino Megaにはさまざまなシリアル(Serial、Serial1、Serial2、Serial3)があり、Arduino ZeroにはネイティブUSBポートのみがあります(Serialの代わりにSerialUSBを使用します)。
Raspberry Piでは、USBポートに多くのシリアルデバイスを接続できます。 それぞれが異なるデバイス名を持つことになります(このチュートリアルの後半でそれらを見つける方法を見ていきます)。 追加のUARTにGpio(RX0/TX0)を使用することもできます。
あなたはおそらくすでにシリアル通信を知っています
あなたは確かにすでにシリアル通信を何度も使用しています。 私はあなたがすでにあなたのコードで何が起こっているのかを記録し、ユーザー入力を得ることを可能にするArduinoシリアルライブラリを知っていると確信 シリアルモニタを使用すると、基本的にArduino IDEがArduinoとシリアル通信を開始します。 シリアルモニタから直接データを送受信できます。
ここでやることは、Arduino IDEの代わりに、シリアル通信の反対側がRaspberry Piボードになることを除いて、ほぼ同じです。 私たちはいくつかの設定を行い、それを動作させるためにいくつかのコードを書く必要があります。 その後、Raspberry PiとArduinoの両方がお互いにメッセージを送信できるようになります。
ここで、2つのボードを物理的に接続する方法を見てみましょう。
シリアル通信用のハードウェアセットアップ
シリアル通信用にRaspberry PiとArduinoを接続するには、2つの方法があります。
Usb経由でシリアル
最も簡単な方法は、両方のボードの間にUSBケーブルを使用することです。
Raspberry Pi側では、シンプルなUSBコネクタだけが必要です。 ボード上で利用可能な4つのUSBポートのいずれかを選択できます。
Arduinoの場合、(Arduino IDEを使用して)コンピュータからボードにコードをアップロードするために使用するUSBポートを使用します。 ここでは、USBコネクタは、あなたが持っているバージョンに依存します。 Arduino UnoやMegaのようなボードの場合、コネクタはArduino NanoやArduino Zeroとは異なります。
この例では、Arduino Unoボードを使用しました。
ご覧のとおり、Raspberry PiとArduinoの間で行うことができる最も簡単なハードウェア接続です。
注: 最初にArduinoをコンピュータに接続する必要があるので、コードをボードにアップロードすることができます。 その後、USBケーブルをRaspberry Piに接続します。 Raspberry Piはこのケーブルを介してArduinoに電力を供給します。
シリアルVia GPIOs
シリアル接続を行うには、Raspberry Pi GPIOsとArduinoピンの間にプレーンなワイヤを使用することもできます。
Arduinoボードによっては、電圧レベルシフタを使用する必要がある場合があります。 Raspberry Piは3.3Vで動作しています.Due、101のようなArduinoボードでは、3.3Vも使用しているため問題ありません。
しかし、Uno、Mega、Leonardo、Nanoなどの多くのArduinoでは、ボードは5Vで動作しているため、RXとTXを接続するときにRaspberry Piを保護するために3.3V/5Vレベルシフタが必要です(Raspberry PiピンとArduino Unoピンの詳細情報)。
このチュートリアルの残りの部分では、USBケーブルでのセットアップを使用します。 これは管理が容易になり、正当な理由がない限り、シリアル通信には単純なgpioの代わりにUSBケーブルを使用することをお勧めします。
Raspberry Piソフトウェアセットアップ
Arduinoのための特別なセットアップは必要ありません。 Arduino IDEをダウンロードしてインストールしたことを確認してください。
さて、あなたのRaspberry Piでは、通信を機能させるためにいくつかのことが必要です。
ssh経由で、または画面+マウス+キーボードをプラグインして、Raspberry Piに接続し、端末を開きます。 PiにOSをまだインストールしていない場合は、SDカードにRaspbianまたはUbuntuを非常に簡単にインストールできます。
Arduinoボードを検出する
ARDUINOをUSBケーブルで接続すると、/dev/ttyacm0または/dev/ttyUSB0と表示されるはずです(場合によっては、/dev/ttyacm1など、番号が異なる場合があ
単純にls /dev/tty*
を実行すると、それが表示されます。 この時点で、どのデバイスがArduinoボードであるかわからない場合は、ボードを外して(USBケーブルを取り外して)、もう一度ls /dev/tty*
を実行してください。 このようにして、Arduinoのシリアルデバイス名を簡単に見つけることができます。
シリアルのハードウェア権限
また、次のようなエラーを回避するために、ユーザーをダイヤルアウトグループに追加することもできます。serial。シリアルユティルSerialException:ポートを開けませんでした/dev/ttyacm0:許可が拒否されました:’/dev/ttyacm0′
$ sudo adduser your_username dialout
これにより、シリアルデバイス(/dev/ttyACMx、/dev/ttyUSBx、…)にアクセスできることが確認されます。
ダイヤルアウトグループに自分自身を追加した後、変更を適用するにはPiを再起動する必要があります(または少なくともログアウト/ログイン)。
Raspberry PiにPythonシリアルライブラリをインストール
Pythonでシリアルインタフェースを使用できるようにするには、ライブラリをインストールする必要があります。
このチュートリアルでは、pySerialライブラリ(Python3のドキュメント)を使用します。 それをインストールするには:
python3 -m pip install pyserial
このPythonライブラリはよく知られており、多くのアプリケーションで使用されています。
インストール時に、”/usr/bin/python3:no module named pip”のようなエラーが発生した場合は、最初にsudo apt install python3-pip
を使用してpipをインストールする必要があります。
ArduinoからRaspberry Piへの簡単なシリアル通信
非常に簡単なプログラムから始めましょう。
Arduinoコード
Arduino IDEを使用して、このコードをコンピュータからArduinoにアップロードします。
void setup() { Serial.begin(9600);}void loop() { Serial.println("Hello from Arduino!"); delay(1000);}
まず、シリアル通信を初期化し、ボーレート、ここでは9600を選択します。 9600は、一般的に使用されるボーレートであり、またかなり低いものです。 あなたの将来のアプリケーションでは、問題なく57600または115200のボーレートを使用することができます。 このチュートリアルでは、9600を続行します。
毎秒Arduinoにシリアル付きの文字列を送信させます。println(). println()関数は、文字列の最後に改行文字’\n’を追加します。
シリアルモニタを開いて、コンピュータ上の文字列を表示できます。
Raspberry Pi Pythonコード
#!/usr/bin/env python3import serialif __name__ == '__main__': ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1) ser.flush() while True: if ser.in_waiting > 0: line = ser.readline().decode('utf-8').rstrip() print(line)
では、このコードは何をしますか?
#!/usr/bin/env python3import serial
まず、以前にインストールしたシリアルライブラリをインポートします。
if __name__ == '__main__': ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1)
シリアル通信は、serialを呼び出すことによって初期化されます。いくつかのパラメータと一緒にSerial():
- Arduinoのシリアルデバイス名: 通常は’/dev/ttyacm0’、’/dev/ttyusb0’、または類似しています。
- ボーレート:このパラメータは非常に重要です。 あなたはArduinoで使用したものと同じボーレートを使用する必要があります、そうでなければあなたが読み書きするすべてがゴミになります。 そこで、Arduino sketchで行ったように9600を選択します。
- timeout:読み取り操作のタイムアウトです。 ここでは1秒に設定します。 これは、シリアルから読み取るときに、データが来ていない場合、プログラムが永遠にスタックされないことを意味します。 1秒または読み取りの後、すべてのバイトが受信されていない場合、関数はすでに受信したバイトを返します。
だから、シリアル。Serial()は、すべてのシリアル操作に使用できるオブジェクトを返します。 私たちはそれを’ser’変数に格納します。
ser.flush()
その後、flush()関数を使用します。 これは入力と出力バッファをフラッシュするので、通信の開始時に奇妙な/有用ではない/完全ではないデータを受信または送信することを避けます。無限ループ(Arduino sketchのloop()関数を考える)では、in_waiting属性でデータが利用可能かどうかを確認します(括弧を入れないでください、これは関数ではありません)。 はいの場合、データを読み取ることができます。
readline()関数は、改行文字が検出されるまですべてのバイトを読み込みます。
受け取ったものを印刷しただけなら、Arduinoからb’Helloが表示されます!\r\n’。 シリアルから読み取るときにバイトを受け取り、それらのバイトを適切なデータ型に変換(デコード)する必要があります。 したがって、decode(‘utf-8’)を使用します–decode(‘ascii’)を使用して、受信したデータを文字列にデコードすることもできます。
最後に、rstrip()関数は文字列に固有のものであり、末尾の文字(改行、キャリッジリターン)を削除することができます。 このようにして、’\r’と’\n’を削除して適切な文字列を取得できます。
注:ここでは毎回完全な行を読んでいます。 一定量のバイト(1つ以上)を読みたい場合は、read(size=1)関数を使用します。
シリアル通信のテスト
今、あなたのコンピュータからArduinoボードを抜いて、あなたのRaspberry Piボードに接続します。
Arduinoのコードは、電源を入れるとすぐにすでに実行されています。
Raspberry Piで、Pythonファイルを実行可能にして起動します。
$ chmod +x receive_serial_data_from_arduino.py$ ./receive_serial_data_from_arduino.py Hello from Arduino!Hello from Arduino!Hello from Arduino!
それは動作します! Arduinoによって毎秒送信された文字列は、Raspberry Pi端末に表示されます。
Raspberry PiとArduinoの間の双方向シリアル通信
もう少し面白くしましょう。 ArduinoからRaspberry Piにデータを送信する方法を見てきました。 この部分では、Raspberry PiからArduinoに話をする方法を見ていきます。 したがって、あなたはコミュニケーションの両側を持っているでしょうし、お互いの入力を待つプログラムを作成することができます。
Arduino code
void setup() { Serial.begin(9600);}void loop() { if (Serial.available() > 0) { String data = Serial.readStringUntil('\n'); Serial.print("You sent me: "); Serial.println(data); }}
ここでは、Arduinoがシリアルでデータを受信したかどうかを確認します。利用可能()。 これにより、受信バッファに既に到着して格納されているバイト数が表示されます。
一部のデータが到着した場合は、シリアルを使用します。次の行を取得するには、改行文字’\n’を使用してreadStringUntil()を実行します。 これはreadline()関数に似ています。 ‘\N’まで受信されたすべてのバイトは自動的に変換され、Arduino Stringオブジェクトに追加されます。
次に、受け取ったデータを追加のテキストとともに印刷します。
注:バイトを一つずつ読みたい場合は、シリアルで読むことができます。read()関数。 次に、必要に応じてこの(それらの)バイトを変換する必要があります:int、Stringなど。
Raspberry Pi Pythonコード
#!/usr/bin/env python3import serialimport timeif __name__ == '__main__': ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1) ser.flush() while True: ser.write(b"Hello from Raspberry Pi!\n") line = ser.readline().decode('utf-8').rstrip() print(line) time.sleep(1)
pySerial関数write()を使用してArduinoにデータを送信します。 ここでは、送信する文字列の前に’b’を追加したことがわかります。 これは、シリアル経由でのみバイトを送信できるため、文字列をバイトにエンコードします。 バイトまたはバイト配列ではないデータは、送信する前に変換する必要があります。 のばしてみを送信する文字列のように、このエラーは例外:unicode文字列をサポートしないてくださいエンコードをバイト数:’こんにちはからのRaspberry Pi!'”
注:ser.write(b"Hello from Raspberry Pi!\n")
の代わりにser.write("Hello from Raspberry Pi!\n".encode('utf-8'))
またはser.write("Hello from Raspberry Pi!\n".encode('ascii'))
と書くことができます。 これは同じことを行います。 Encode()関数は文字列を取得し、シリアル用にエンコードします。
また、ArduinoがSerialで読み取りを終了することが期待されているため、改行文字’\n’を追加します。readStringUntil(‘\n’).
次に、前と同じことを行います。行を読み取り、文字列にデコードし、末尾の文字を削除します。 Serは使ってないこの特定のアプリケーションでは、Arduinoが文字列を受信した直後にいくつかのデータを送り返すことがわかっているため、ここでin_waiting。 また、この行で立ち往生しないように1秒のタイムアウトがあります。
最後に、受信した文字列を印刷し、時間とともに1秒待ちます。次の文字列をシリアル経由で送信する前にsleep()。
双方向シリアル通信のテスト
Raspberry Piで、Pythonファイルを実行可能にして起動します。
$ chmod +x bidirectional_serial_communication.py $ ./bidirectional_serial_communication.py You sent me: Hello from Raspberry Pi!You sent me: Hello from Raspberry Pi!You sent me: Hello from Raspberry Pi!
成功! Arduinoは文字列を受け取り、さらにいくつかの単語でそれを送り返しました。 その後、Raspberry Piは最終的な文字列を受信して印刷しました。
Raspberry Pi Arduinoシリアル通信:アプリケーション例
ArduinoとRaspberry Piをシリアル通信用に設定し、各ボード間で通信するプログラムを書く方法を知ったので、より複雑なアプ
このアプリケーションでは、4つのLedとワンプッシュボタンがArduinoボードに接続されます。
Raspberry PiとArduinoはUSBケーブルで接続し、シリアル通信を使用して互いに通信します。
ここでは、我々が取得したい結果です:
- プッシュボタンを押すと、ArduinoはRaspberry Pi(単純なバイト)に通知を送信します。
- Raspberry Piは1から4の間のランダムな整数を計算し、それをArduinoに送信します。
- Arduinoはこの番号に関連するLEDの電源をオンにし、他のLedの電源をオフにします。
これにより、ArduinoとRaspberry Piの間のタスクの通信と同期に関する練習が行われます。
チュートリアルのこの時点に到着した場合(おめでとう!)以下で提供したコードを読む前に、自分でコードを書くことをお勧めします。 また、これらの要件を満たすためのコードは1つだけではないため、コードは私のものとは異なる可能性がありますが、完全に問題ありません。 Arduino Serial referenceとpySerial API referenceからヘルプを得ることができます。
この回路を作るために:
- 4個のLedをピン9-12に接続します。 長い脚とデジタルピンの間に、各LEDに220Ωの抵抗を追加します。 短い脚は地面に接続されています。
- グランドに10k Ωの抵抗(プルダウン抵抗)を接続したプッシュボタンを追加します。 ボタンの片側は5Vに接続され、もう一方は読み取り用のデジタルピン5に接続されています。
- Arduinoボード、4つのLed、プッシュボタンなど、すべてのコンポーネントの間に共通の基盤を作ることを忘れないでください。 あなたは、少なくとも正しく地面を接続していない場合は、任意の電源を追加しないでください。
- シリアル通信のために、ARDUINOとRaspberry PiをUSBケーブルで接続します(USBケーブルはすでに2つのボード間のグランド接続を管理しています)。
Arduino code
#define LED_1_PIN 9#define LED_2_PIN 10#define LED_3_PIN 11#define LED_4_PIN 12#define BUTTON_PIN 5byte lastButtonState = LOW;byte currentButtonState = LOW;unsigned long lastButtonDebounceTime = 0;unsigned long buttonDebounceDelay = 20;void powerOffAllLEDs(){ digitalWrite(LED_1_PIN, LOW); digitalWrite(LED_2_PIN, LOW); digitalWrite(LED_3_PIN, LOW); digitalWrite(LED_4_PIN, LOW);}void setup(){ Serial.begin(9600); pinMode(LED_1_PIN, OUTPUT); pinMode(LED_2_PIN, OUTPUT); pinMode(LED_3_PIN, OUTPUT); pinMode(LED_4_PIN, OUTPUT); pinMode(BUTTON_PIN, INPUT); powerOffAllLEDs();}void loop(){ byte readValue = digitalRead(BUTTON_PIN); if (readValue != lastButtonState) { lastButtonDebounceTime = millis(); } if (millis() - lastButtonDebounceTime > buttonDebounceDelay) { if (readValue != currentButtonState) { currentButtonState = readValue; if (currentButtonState == HIGH) { Serial.write(18); } } } lastButtonState = readValue; if (Serial.available() > 0) { int ledNumber = Serial.read() - '0'; powerOffAllLEDs(); switch (ledNumber) { case 1: digitalWrite(LED_1_PIN, HIGH); break; case 2: digitalWrite(LED_2_PIN, HIGH); break; case 3: digitalWrite(LED_3_PIN, HIGH); break; case 4: digitalWrite(LED_4_PIN, HIGH); break; default: // wrong pin number, do nothing // all LEDs will be powered off break; } }}
setup()関数では、4つのLedすべてとプッシュボタンのピンモードを初期化します。 また、すべてのLedの電源がオフになっていることを確認します。
その後、ループ()では、プッシュボタンの処理と4つのLedの管理の2つのことを行います。 両方のアクションは1つずつ実行されますが、非常に高速に処理されるため、同時に発生しているかのようになります。 これはArduinoプログラムをマルチタスクする場合です。
最初のアクション:押しボタンの処理。
byte readValue = digitalRead(BUTTON_PIN);if (readValue != lastButtonState) { lastButtonDebounceTime = millis();}if (millis() - lastButtonDebounceTime > buttonDebounceDelay) { if (readValue != currentButtonState) { currentButtonState = readValue; if (currentButtonState == HIGH) { Serial.write(18); } }}lastButtonState = readValue;
不要な値を避けるためにボタンをデバウンスする必要があります。 ボタンが押されていることがわかったら、シリアル経由でRaspberry Piにデータを送信できます。
ここで私はシリアルを使用しました。write()関数:バイトまたは一連のバイトを送信します。 これはシリアルとは異なります。print()は、シリアルモニターで出力を見やすくします。 人間ではなく別の機械と話しているので、それには問題ありません。
ここで送信する番号は18です。 これは「ボタンが押されました」という状態に関連付ける単なる乱数なので、Raspberry Piが番号を受け取ると、18に等しいかどうかがチェックされます。 あなたは、異なる番号を使用して、シリアルを介して異なるアクションやメッセージを送信することを想像することができます。
注:通常、Arduino割り込みを使用して、ボタンが押されたことを知ることもできます。 その場合は、割り込みでシリアルライブラリを使用しないでください。 割り込みを絶対に使用する必要がある場合は、割り込み(単純なブール変数)内にフラグを設定し、loop()関数内でSerialを使用します。
そして、第二のアクション:4つのLedを管理します。
if (Serial.available() > 0) { int ledNumber = Serial.read() - '0'; powerOffAllLEDs(); switch (ledNumber) { case 1: digitalWrite(LED_1_PIN, HIGH); break; case 2: digitalWrite(LED_2_PIN, HIGH); break; case 3: digitalWrite(LED_3_PIN, HIGH); break; case 4: digitalWrite(LED_4_PIN, HIGH); break; default: // wrong pin number, do nothing // all LEDs will be powered off break; } }
まず、Arduinoがシリアル通信を介してRaspberry Piからいくつかのデータを受信したかどうかを確認します。
はいの場合、次のバイトをシリアルで読み取ります。読み取り()。 ここでは、文字を表す数字に変換する’0’で減算する小さなトリックに気づくことができます–この場合は整数です。
その後は非常に簡単です。 すべてのLedの電源をオフにしてから、1、2、3、または4の番号に関連付けられたLEDのみの電源をオンにします。 間違った値が送信された場合、LEDは点灯しません。
Raspberry Pi Pythonコード
#!/usr/bin/env python3import serialimport randomif __name__ == '__main__': ser = serial.Serial('/dev/ttyACM0', 9600, timeout=1) ser.flush() while True: number = ser.read() if number != b'': if int.from_bytes(number, byteorder='big') == 18: led_number = random.randint(1,4) print("Button has been pressed.") print("Sending number " + str(led_number) + " to Arduino.") ser.write(str(led_number).encode('utf-8'))
まず、インポート行を1つ追加します:Python randomライブラリ。
無限ループ(“while True”)では、最初にSerialから1バイトを読み取ります。 タイムアウトは1秒に設定されます。 1秒後に何も受信されない場合、read()関数はb”を返します。
だから、受け取ったものが単に空であるかどうか(b”)、または本当に何かがあったかどうかを確認します。 後者の場合、受け取ったデータを整数に変換して、コードで使用できるようにします。 そのためには、関数intを使用します。from_bytes()は、b’0x12’(18の十六進表現は0x12)を18にデコードします。
あなたが見ることができるように、我々は行動を続けるために数が18であることを確認します。 処理するコマンドが異なる場合は、コマンドごとに異なる番号を使用することをお勧めします。
どちらが電源オンになったかを判断するために、1から4の間の乱数を選択します。 次に、pySerial write()関数で送信します。 シリアル経由でintを送信するには、最初にstr()を使用して文字列として変換し、次にencode(‘utf-8’)エンコードします。
アプリケーションのテスト
これで、Usbケーブルを使用してArduinoをRaspberry Piに接続できます。 Raspberry PiはArduinoと4つのLedの両方に電源を供給します。
Arduinoに多くのものが接続されている場合は、Arduinoの電源コネクタに外部電源を追加することをお勧めします。 たとえば、ステッピングモーターを使用する場合、Raspberry Piはそれ自体+Arduino+モーターに十分な電流を供給することはありません。 この場合、4つのLedでは問題ありません。
Pythonスクリプトを実行し、プッシュボタンを押します。 ログが表示され、ArduinoのLEDの1つの電源がオンになります。
$ chmod +x arduino_raspberry_pi_leds_button.py$ ./arduino_raspberry_pi_leds_button.py Button has been pressed.Sending number 3 to Arduino.Button has been pressed.Sending number 2 to Arduino.Button has been pressed.Sending number 4 to Arduino.Button has been pressed.Sending number 1 to Arduino.Button has been pressed.Sending number 3 to Arduino.Button has been pressed.Sending number 3 to Arduino.
ボタンを押すたびに:
- Arduinoはそれを検出し、18をRaspberry Piに送信します。
- Raspberry Piはシリアルからいくつかのデータを受け取ります。 数が18に等しいかどうかをチェックします。 はいの場合、乱数(1-4の間)が選択されます。 Raspberry Piはこの番号をArduinoに送信します。
- Arduinoはこの番号を受け取り、関連するLEDをオンにします。
注:このアプリケーションをより速く、より少ないコードで行うには、RaspberryのpyFirmataライブラリやArduinoのStandarfFirmataライブラリなど、Firmataプロトコルを使用することもできます。 詳細については、これらのチュートリアルをチェックしてください。
結論
このチュートリアルでは、シリアルを介してRaspberry PiとArduinoボードの間で通信する方法を学びました。
さて、実際の生活の中で、これはあなたにとって有用でしょうか? 答えはイエスであり、かなり頻繁に。
Raspberry Piは、アプリケーションに多くの計算能力を埋め込むのに最適です。 多くの言語、webサーバー、ロボット工学の適用、等の完全なソフトウェアを動かすことができます。 Raspberry Piには確かにあなたが使うかもしれないいくつかのGpioがありますが、Arduinoのものほど良くありません。 また、ハードウェアに問題がある場合は、Piを書き込む可能性が高くなります。
ARDUINOは、IMU、サーボモータ、ステッピングモータ、より多くの電力を必要とするものなど、ハードウェアセンサやアクチュエータを直接処理する方が適切です。 -Arduino vs Raspberry Piを使用するときの詳細情報。
全体として、2つのボードは完全に連携することができます:アプリケーションの”脳”としてのRaspberry Piと”筋肉”としてのArduinoは、お互いに話をさせるシリアル通信