- Bluetooth通信に必要なパッケージのインストール:
- Bluetoothを介したデバイスとRaspberryPiのペアリング:
- 回路図:
- AndroidアプリBlueTermでLEDを制御する:
- プログラミングの説明:
Raspberry Piは、インターネットを介したワイヤレス通信のシームレスな機能により、IoTプロジェクトで非常に人気があります。Raspberry Pi 3にはWi-FiとBluetoothが組み込まれており、Bluetoothは非常に人気のあるワイヤレス通信プロトコルです。そこで本日は、Bluetoothを使用してAndroidアプリからRaspberry PiGPIOピンを制御します。
ここでは、Bluetoothが組み込まれていないRaspberry 2 PiモデルBを使用しているため、単純なUSBBluetoothドングルを使用しています。それとは別に、GPIO制御を示すために必要なのは抵抗(220R)とLEDだけです。ここでは、無線通信にRFCOMMBluetoothプロトコルを使用しています。
PythonでのBluetoothのプログラミングは、ソケットプログラミングモデルに従い、Bluetoothデバイス間の通信はRFCOMMソケットを介して行われます。RFCOMM(Radio Frequency Communication)は、エミュレートされたRS-232シリアルポートを提供するBluetoothプロトコルであり、シリアルポートエミュレーションとも呼ばれます。Bluetoothシリアルポートプロファイルは、このプロトコルに基づいています。RFCOMMは、幅広いサポートと公開されているAPIにより、Bluetoothアプリケーションで非常に人気があります。L2CAPプロトコルにバインドされています。
以前のプロジェクトでは、BluetoothモジュールHC-06も使用しました。RaspberryPiを使用した音声制御LEDです。また、以前のRaspberryPiプロジェクトといくつかの優れたIoTプロジェクトも確認してください。
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」 と呼ばれるコマンドラインユーティリティを提供します。ただし、その前に、USBBluetoothドングルをRaspberryPiに接続し、以下のコマンドを使用して、検出されたかどうかを確認します。
lsusb
次に、以下のコマンドで bluetoothctl ユーティリティを開きます。
sudo bluetoothctl
'help'と 入力すると、 bluetoothctl ユーティリティのすべてのコマンドを確認できます。今のところ、以下のコマンドを指定された順序で入力する必要があります。
#電源オン#エージェントオン#検出可能オン#ペアリング可能#スキャンオン
最後のコマンド 「スキャンオン」の 後、Bluetoothデバイス(携帯電話)がリストに表示されます。モバイルでBluetoothがオンになっていて、近くのデバイスから見えるようになっていることを確認してください。次に、デバイスのMACアドレスをコピーし、次のコマンドを使用してペアリングします。
ペア
次に、ターミナルコンソールでパスコードまたはPINの入力を求められ、そこにパスコードを入力してEnterキーを押します。次に、プロンプトが表示されたら携帯電話に同じパスコードを入力すると、RaspberryPiと正常にペアリングされます。このプロセス全体については、最後に提供するビデオでも説明しています。
前に述べたように、デスクトップインターフェイスを使用して携帯電話をペアリングすることもできます。Bluemanをインストールすると、以下に示すようにRaspberry Piデスクトップの右側にBluetoothアイコンが表示されます。これを使用すると、簡単にペアリングを行うことができます。
回路図:
回路図は非常に単純です。220オームの抵抗を使用してRaspberryPiのPIN40(GPIO 21)にLEDを接続しました。
AndroidアプリBlueTermでLEDを制御する:
携帯電話をペアリングした後、Bluetoothシリアルアダプターを使用してRaspberryPiと通信するためのAndroidアプリをインストールする必要があります。前に述べたように、RFCOMM / SPPプロトコルはBluetoothを介したシリアル通信をエミュレートするため、このプロトコルをサポートするBlueTermアプリをここにインストールしました。
RFCOMMソケットを介した通信をサポートする他のBluetoothターミナルアプリを使用することもできます。
BlueTermアプリをダウンロードしてインストールした後、ターミナルから以下のPythonプログラムを実行し、BlueTermアプリからペアリングされた raspberrypi デバイスを同時に接続します。
接続が成功すると、以下に示すように、アプリの右上隅に connected:raspberrypi が表示 さ れます。
これで、BlueTermアプリから「1」または「0」を入力して、GPIOピンをそれぞれHIGHおよびLOWにすることができます。これにより、このピンに接続されているLEDがオンとオフに切り替わります。'q'を押してプログラムを終了します。Google Voice Typing Keyboard を使用して、Voiceを使用してGPIOを制御でき ます。最後にあるビデオで完全なデモを確認してください。
つまり、これが、Bluetooth経由でAndroidアプリを使用してGPIOピンをワイヤレスで制御する方法です。ArduinoでBluetoothを使用する方法も確認してください。
プログラミングの説明:
AndroidアプリでRaspberryPi GPIOを制御するためのPythonプログラムは、非常にシンプルで自明です。BluetoothRFCOMM通信に関連するコードについて少し学ぶ必要があるだけです。まず、Python言語でBluetoothを制御できるようにするBluetoothソケットライブラリをインポートする必要があります。前のセクションで同じライブラリをインストールしました。
Bluetoothをインポートする
以下は、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 while 1:データ= client_socket.recv(1024)
ここで、それらを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 はクライアントのソケットです。
data = client_socket.recv(1024): クライアントソケット client_socket を介してデータを受信し、 それを変数 dataに 割り当て ます 。一度に最大1024文字を受信できます。
最後に、すべてのプログラミングが終了したら、以下のコードを使用してクライアントとサーバーの接続を閉じます。
client_socket.close()server_socket.close()
他のすべてのコードは簡単で自明です。以下の完全なコードを確認してください。このプロジェクトを変更してみてください。リレーを使用して家電製品を制御したり、Androidスマートフォンを介してロボットカーを制御したりするなど、他の多くのことをワイヤレスで制御できます。