- Bluetooth通信に必要なパッケージのインストール:
- Bluetoothを介したデバイスとRaspberryPiのペアリング:
- おもちゃの車の選択:
- 回路図と説明:
- AndroidアプリBlueTermを使用して車をリモートで制御する:
- Pythonプログラミング:
Raspberry Piは、インターネットを介したワイヤレス通信のシームレスな機能により、IoTプロジェクトで非常に人気があります。Raspberry Pi 3にはWi-FiとBluetoothが組み込まれており、Bluetoothは非常に人気のあるワイヤレス通信プロトコルです。今日は、Raspberry Pi 3とBluetoothを使用してリモートコントロールカーを作成します。ここでは、スマートフォンをリモートとして使用して車を制御します。私たちは以前、Arduinoを使用してこのRCカーを作成しました。
ここでは、Bluetoothが組み込まれているRaspberry Pi 3を使用しているため、外部USBBluetoothドングルを使用する必要はありません。ここでは、無線通信にRFCOMMBluetoothプロトコルを使用しています。
PythonでのBluetoothのプログラミングは 、ソケットプログラミングモデルに従い、Bluetoothデバイス間の通信はRFCOMMソケットを介して行われます。 RFCOMM (Radio Frequency Communication)は、エミュレートされたRS-232シリアルポートを提供するBluetoothプロトコルであり、シリアルポートエミュレーションとも呼ばれます。Bluetoothシリアルポートプロファイルは、このプロトコルに基づいています。RFCOMMは、幅広いサポートと公開されているAPIにより、Bluetoothアプリケーションで非常に人気があります。L2CAPプロトコルにバインドされています。
Raspberry Pi 2を使用している場合は、外部BluetoothドングルまたはBluetoothモジュールHC-06を使用する必要があります。これらの外部Bluetoothデバイスの使用については、以前のプロジェクトを確認してください。Bluetooth経由のAndroidアプリを使用したRaspberry PiGPIOの制御とRaspberryPiで制御される家電製品。
Bluetooth通信に必要なパッケージのインストール:
開始する前に、RaspberryPiでBluetooth通信をセットアップするためのソフトウェアをインストールする必要があります。RaspbianJessieがインストールされたメモリカードがRaspberryPiで準備されている必要があります。この記事をチェックして、Raspbian OSをインストールし、RaspberryPiの使用を開始してください。したがって、最初に以下のコマンドを使用してRaspbianを更新する必要があります。
sudo apt-get update sudo apt-get upgrade
次に、Bluetooth関連のパッケージをいくつかインストールする必要があります。
sudo apt-get install bluetooth blueman bluez
次に、RaspberryPiを再起動します。
sudoリブート
BlueZは、オープンソースプロジェクトであり、公式のLinuxBluetoothプロトコルスタックです。すべてのコアBluetoothプロトコルをサポートし、公式のLinuxカーネルの一部になりました。
Bluemanは、Bluetoothデバイスを管理および制御するためのデスクトップインターフェイスを提供します。
最後に、Python言語を使用してRFCOMMを介してデータを送受信できるように、Bluetooth通信用のPythonライブラリが必要です。
sudo apt-get install python-bluetooth
RaspberryPiのGPIOサポートライブラリもインストールします。
sudo apt-get install python-rpi.gpio
これで、RaspberryPiでのBluetooth通信に必要なパッケージのインストールが完了しました。
Bluetoothを介したデバイスとRaspberryPiのペアリング:
携帯電話などのBluetoothデバイスとRaspberryPiのペアリングは非常に簡単です。ここでは、AndroidスマートフォンをRaspberryPiとペアリングしました。以前、BlueZをPiにインストールしました。これは、Bluetoothデバイスを管理するための 「bluetoothctl」 と呼ばれるコマンドラインユーティリティを提供します。
次に、以下のコマンドで bluetoothctl ユーティリティを開きます。
sudo bluetoothctl
'help'と 入力すると、 bluetoothctl ユーティリティのすべてのコマンドを確認できます。今のところ、以下のコマンドを指定された順序で入力する必要があります。
#電源オン#エージェントオン#検出可能オン#ペアリング可能#スキャンオン
最後のコマンド 「スキャンオン」の 後、Bluetoothデバイス(携帯電話)がリストに表示されます。モバイルでBluetoothがオンになっていて、近くのデバイスから見えるようになっていることを確認してください。次に、デバイスのMACアドレスをコピーし、次のコマンドを使用してペアリングします。
ペア
次に、ターミナルコンソールでパスコードまたはPINの入力を求められ、そこにパスコードを入力してEnterキーを押します。次に、プロンプトが表示されたら携帯電話に同じパスコードを入力すると、RaspberryPiと正常にペアリングされます。また、このプロセス全体については、以前のGPIO制御チュートリアルで提供されたビデオで説明しました。こちらがYouTubeの直接リンクです。
前に述べたように、デスクトップインターフェイスを使用して携帯電話をペアリングすることもできます。Bluemanをインストールすると、以下に示すようにRaspberry Piデスクトップの右側にBluetoothアイコンが表示されます。これを使用すると、簡単にペアリングを行うことができます。
おもちゃの車の選択:
このRaspberryPi Controlled Carプロジェクトでは、デモンストレーションにおもちゃの車を使用しました。ここでは、左右のステアリング機能が動くRFおもちゃの車を選択しました。この車を購入した後、RF回路をラズベリー回路に交換しました。この車には2つのDCモーターがあり、1つは2つの前輪を回転させ、もう1つは2つの後輪を回転させます。フロントサイドモーターは、車に方向を与えるために使用されます(実際の車のステアリング機能のように)。また、リアサイドモーターは、車を前後方向に駆動するために使用されます。ラズベリーのBluetoothを使用して、Androidフォンからワイヤレスでコマンドを受信して車を制御します。
2つのDCモーターを備えたおもちゃの車を使用して、前輪と後輪を回転させることができます。
回路図と説明:
このラジコンカーでは、L293Dモジュールを使用してRaspberryPiを2つのモーターに接続するだけで済みます。Raspberry Piと車に電力を供給するために、モバイルパワーバンクを使用しました。モバイルパワーバンクは、ラズベリーパイと車のモーターに電力を供給するのに十分ですが、パワーバンクを車の上に置くと、モバイルパワーバンクの重量が重いため、車は適切に移動できません。そのため、システムへの電力供給には、軽量の電源装置またはリチウム電池を使用することをお勧めします。以下の回路図にすべての接続を示します。また、さまざまなテクノロジーでモーターを制御する方法の詳細については、ロボット工学のセクションを確認してください。
注:ラズベリーパイに5vを超えて入れないでください。
この回路は、このプロジェクトのためにパフォーマンスボード上に作成されているため、車の重量が軽減されます。
AndroidアプリBlueTermを使用して車をリモートで制御する:
すべてをセットアップし、Bluetooth経由でスマートフォンを正常にペアリングしてみたら、Bluetoothシリアルアダプターを使用してRaspberry Piと通信するためのAndroidアプリをインストールし、RaspberryPiのGPIOピンを制御できるようにする必要があり ます。前に述べたように、RFCOMM / SPPプロトコルはBluetoothを介したシリアル通信をエミュレートするため、このプロトコルをサポートするBlueTermアプリをここにインストールしました。
RFCOMMソケットを介した通信をサポートする他のBluetoothターミナルアプリを使用することもできます。
BlueTermアプリをダウンロードしてインストールした後、ターミナルから以下のPythonプログラムを実行し、BlueTermアプリからペアリングされた raspberrypi デバイスを同時に接続します。
接続が成功すると、以下に示すように、アプリの右上隅に connected:raspberrypi が表示 さ れます。
これで、BlueTermアプリから次のコマンドを入力するだけで、車を目的の方向に移動させることができ ます。'q'を押してプログラムを終了します。Google Voice Typing Keyboard を使用して、Voiceを使用してこの車を制御でき ます。 最後にあるビデオで完全なデモを確認してください 。
コマンド:
F –前進
B –後退
S –停止
L –左前方への移動
R –右前方への移動
A –左後方への移動
P –後方右移動
Q –終了します
Pythonプログラミング:
AndroidアプリでRaspberryPi GPIOを制御するためのPythonプログラム は、非常にシンプルで自明です。BluetoothRFCOMM通信に関連するコードについて少し学ぶ必要があるだけです。それ以外の点では、モーターのピンをハイまたはローにすることでロボットや車を制御するのと同じです。 完全なプログラムは、以下のコードセクションに記載されています。
まず、Python言語でBluetoothを制御できるようにするBluetoothソケットライブラリをインポートする必要があります。前のセクションで同じライブラリをインストールしました。
Bluetoothをインポートする
次に、さらにいくつかのヘッダーファイルをインクルードし、モーターのピンを定義してデフォルトでローにしました。
import bluetooth import time import RPi.GPIO as GPIO m11 = 18 m12 = 23 m21 = 24 m22 = 25 GPIO.setwarnings(False)GPIO.setmode(GPIO.BCM)GPIO.setup(m11、GPIO.OUT)GPIO.setup( m12、GPIO.OUT)GPIO.setup(m21、GPIO.OUT)GPIO.setup(m22、GPIO.OUT)GPIO.output(m11、0)GPIO.output(m12、0)GPIO.output(m21、0) GPIO.output(m22、0)
以下は、Bluetooth通信を担当するコードです。
server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM)port = 1 server_socket.bind(( ""、port))server_socket.listen(1)client_socket、address = server_socket.accept()print "Accepted connection from"、address
ここで、それらを1行ずつ理解できます。
server_socket = bluetooth.BluetoothSocket(bluetooth.RFCOMM): BluetoothRFCOMM通信用のソケットを作成します。
server_socket.bind(( ""、port):- サーバーはホスト ''上のスクリプトをポートにバインドします。
server_socket.listen(1): サーバーは一度に1つの接続を受け入れるようにリッスンします。
client_socket、address = server_socket.accept(): サーバーはクライアントの接続要求を受け入れ、Macアドレスを変数アドレスに割り当てます。client_socketはクライアントのソケットです。
この後、車を目的の方向に移動させる関数をいくつか作成しました 。defleft_side_forward()、def right_side_forward()、def forward()、def left_side_reverse()、def right_side_reverse()、def reverse()def stop( )。 これらの関数は、モバイルblueTermアプリからL、R、F、A、P、B、Sを押すとそれぞれ呼び出され、それに応じて車が移動します。
data = "" while 1:data = client_socket.recv(1024)print "Received:%s"%data if(data == "F"):forward()elif(data == "L"):left_side_forward() elif(data == "R"):right_side_forward()elif(data == "B"):reverse()elif(data == "A"):left_side_reverse()elif(data == "P"):right_side_reverse ()elif data == "S":stop()elif(data == "Q"):print( "Quit")break client_socket.close()server_socket.close()
data = client_socket.recv(1024): クライアントソケットclient_socketを介してデータを受信し、それを変数dataに割り当てます。一度に最大1024文字を受信できます。
最後に、すべてのプログラミングが終了したら、以下のコードを使用してクライアントとサーバーの接続を閉じます。
client_socket.close()server_socket.close()