ArduinoとHC-05Bluetoothモジュールの完全なチュートリアル
このArduinoBluetoothチュートリアルでは、HC-05モジュールを使用してBluetooth通信を介してArduinoを制御する方法を学習します。詳細については、次のビデオを見るか、以下のチュートリアルを読むことができます。
このチュートリアルでは、スマートフォンを使用してArduinoを制御する方法と、ラップトップまたはPCを使用してArduinoを制御する方法の2つの例を作成しました。このチュートリアルを過負荷にしないために、次のチュートリアルでは、HC-05 Bluetoothモジュールを構成し、マスターデバイスとスレーブデバイスとして2つの別々のArduinoボード間でBluetooth通信を行う方法を学習します。
最初の例であるスマートフォンを使用してArduinoを制御する前に、HC-05Bluetoothモジュールを詳しく見てみましょう。スレーブとしてのみ設定できるHC-06モジュールと比較すると、HC-05はマスターとしても設定できるため、2つの別々のArduinoボード間で通信を行うことができます。このモジュールにはいくつかの異なるバージョンがありますが、接続がはるかに簡単なため、ブレークアウトボードに付属しているものをお勧めします。 HC-05モジュールはBluetoothSPP(シリアルポートプロトコル)モジュールです。つまり、シリアル通信を介してArduinoと通信します。
このArduinoチュートリアルに必要なコンポーネントは、以下のいずれかのサイトから入手できます。
モジュールをArduinoボードに接続する方法は次のとおりです。
私が持っている特定のモジュールは、電圧レギュレーターを含むブレークアウトボード上にあるため、3.6〜6ボルトで電力を供給できます。ただし、データピンの論理電圧レベルは3.3Vです。そのため、Arduino TX(5V出力の送信ピン)とBluetoothモジュールRX(3.3Vのみをサポートする受信ピン)の間のラインは、モジュールを焼き付けないように分圧器を介して接続する必要があります。一方、Bluetoothモジュールからの3.3V信号は、Arduinoボードでハイロジックとして受け入れられるのに十分であるため、BluetoothモジュールのTXピンとArduinoRXピンの間のラインを直接接続できます。
これで、Arduinoボードとスマートフォン間の通信を可能にするArduinoコードを作成する準備が整いました。 LEDをオン/オフするだけの簡単な例を示しますが、通信を理解するには十分です。
説明: まず、LEDが接続されるピンと、スマートフォンからのデータを保存する変数を定義する必要があります。セットアップセクションでは、LEDピンを出力として定義し、すぐにローに設定する必要があります。前述のように、シリアル通信を使用するため、Bluetoothモジュールのデフォルトのボーレートである38400ボーレートでシリアル通信を開始する必要があります。 Serial.available()関数を使用したループセクションでは、読み取ることができるシリアルポートに使用可能なデータがあるかどうかを確認します。これは、Bluetoothモジュールにデータを送信するときに、このステートメントがtrueになることを意味します。したがって、Serial.read()関数を使用して、そのデータを読み取り、「state」変数に入れます。したがって、Arduinoが文字「0」を受信すると、LEDがオフになり、Serial.println()関数を使用して、シリアルポートを介して文字列「LED:OFF」をスマートフォンに送り返します。さらに、「状態」変数を0にリセットして、上記の2行が1回だけ実行されるようにします。ここで、「状態」変数は整数であるため、スマートフォンから文字「0」を受け取った場合、整数の「状態」変数の実際の値は48であり、ASCIIによると文字「0」に対応します。 table ..そのため、「if」ステートメントでは、「state」変数を文字「0」と比較しています。一方、受信した文字が「1」の場合は、LEDが点灯し、「LED:ON」の文字列が返送されます。
これでコードをアップロードする準備が整いましたが、アップロードするときはArduinoがシリアル通信を使用するため、RX(デジタルピン0)ピンとTX(デジタルピン1)ピンがビジーであるため、TXラインとRXラインを抜く必要があります。 Arduinoボードの他のTXピンとRXピンを使用すると、この手順を回避できますが、その場合は、シリアル通信にSoftwareSerial.hライブラリを使用する必要があります。
関連:2つのHC-05Bluetoothモジュールをマスターとスレーブとして構成してペアリングする方法| ATコマンド
これで、スマートフォンをBluetoothモジュールとArduinoに接続する準備が整いました。ここで行う必要があるのはBluetoothをアクティブ化することで、スマートフォンはHC-05Bluetoothモジュールを検出します。
次に、デバイスをペアリングする必要があります。HC-05モジュールのデフォルトのパスワードは1234です。デバイスをペアリングした後、Arduinoを制御するためのアプリケーションが必要です。 Playストアには、この目的のために、私たちが作成したArduinoコードで動作する多くのアプリケーションがあります。ただし、MIT App Inventorオンラインアプリケーションを使用して、このチュートリアル用に独自のカスタムアプリケーションを作成しました。これは、Androidアプリケーションを構築するための優れた使いやすいアプリケーションです。次のチュートリアルでは、Arduinoプロジェクト用に独自のカスタムAndroidアプリケーションを構築する方法の詳細なステップバイステップガイドを見つけることができます。
この例のために作成したアプリは、次の場所からダウンロードできます:
接続ボタンを使用してスマートフォンをBluetoothモジュールに接続し、ボタンの下のステータステキストに接続が成功したかどうかが示されます。 「TurnON」ボタンと「TurnOFF」ボタンを使用して、LEDのオンとオフを切り替えることができます。ボタンの上のテキストは、特定のボタンが押されたときにArduinoがスマートフォンに送り返すテキストです。
ラップトップまたはPCを使用してBluetooth経由でArduinoを制御する方法を見てみましょう。したがって、最初にラップトップをHC-05 Bluetoothモジュールにペアリングする必要があり、ラップトップのBluetooth設定からそれを行うことができます。ラップトップはHC-05モジュールを検出し、「1234」パスワードを使用してデバイスをペアリングします。
ラップトップデバイスマネージャーのポート(COMとLPT)でデバイスをペアリングすると、「Standard SerialoverBluetoothlink」という名前の2つの新しいエンティティが表示されます。ここから、デバイスが通信するシリアルポートのCOMポート番号を確認できます。
前と同じ例を使用して、LEDのオンとオフを切り替え、文字列をラップトップに送り返すので、前に説明したのと同じArduinoコードを使用します。
次に、Processing IDEを使用して、Arduinoを制御するためのプログラムを作成します。これがソースコードです。
説明: シリアル通信を有効にするために、シリアルライブラリを含め、シリアルオブジェクトを作成する必要があります。また、LEDステータスの文字列変数を定義する必要があります。セットアップセクションでは、プログラムのウィンドウサイズを設定し、シリアル通信を開始する必要があります。ここでのCOMポート番号については、デバイスマネージャで以前に気付いた2つのCOMポート番号のいずれかを試す必要があります。次の行はシリアルポートのバッファリングを定義します。この場合、新しい行があり、実際には、println(のためにArduinoが文字列「LED:OFF」または「LEDON」を送信するたびに新しい行があります。 ) 関数。次に、serialEvent()関数を使用して、読み取ることができるシリアルポートに使用可能なデータがあるかどうかを確認します。その場合、readStringUntil()関数を使用して、Arduinoから送信されたシリアルポートからそのデータを読み取ります。この場合は、文字列「LED:OFF」または「LED:ON」です。
常に繰り返されるメインのdraw()関数では、プログラムのすべてのグラフィックと関数を作成します。したがって、最初に背景色、塗りつぶしの色、ストロークのサイズ、色を設定し、rect()関数を使用して2つのボタンを描画する必要があります。 text()関数を使用して、ArduinoからのledStatus文字列を含むすべてのテキストを出力します。今残っているのは、ボタンを機能させることです。したがって、最初の「if」ステートメントを使用して、「Turn ON」ボタンの領域を制限します。ボタンを押すと、文字「1」がシリアルポートを介してArduinoに送信され、LEDがオンになります。次の行は、ボタンが押されたときにボタンを強調表示するために使用されます。 「オフにする」ボタンについても同じ手順が適用されます。
これでプログラムの準備ができたので、実行ボタンをクリックすると、プログラムはラップトップとArduino間のBluetooth通信を自動的にアクティブにします。 HC-05 Bluetoothモジュールは2秒ごとに点滅を開始します。これは、モジュールが接続されており、ラップトップを使用してLEDを制御できることを示しています。
このチュートリアルはこれですべてですが、HC-05 Bluetoothモジュールを構成し、マスターデバイスとスレーブデバイスとして2つの別々のArduinoボード間でBluetooth通信を行う方法を学ぶ次のチュートリアルを確認することを忘れないでください。
また、下のコメントセクションでお気軽に質問してください。また、Arduinoプロジェクトのコレクションをチェックすることを忘れないでください。
ArduinoBluetooth通信のサンプルソースコード
#define ledPin 7
int state = 0;
void setup() {
pinMode(ledPin, OUTPUT);
digitalWrite(ledPin, LOW);
Serial.begin(38400); // Default communication rate of the Bluetooth module
}
void loop() {
if(Serial.available() > 0){ // Checks whether data is comming from the serial port
state = Serial.read(); // Reads the data from the serial port
}
if (state == '0') {
digitalWrite(ledPin, LOW); // Turn LED OFF
Serial.println("LED: OFF"); // Send back, to the phone, the String "LED: ON"
state = 0;
}
else if (state == '1') {
digitalWrite(ledPin, HIGH);
Serial.println("LED: ON");;
state = 0;
}
}
Code language: Arduino (arduino)スマートフォンをHC-05BluetoothモジュールとArduinoに接続する
ArduinoBluetoothチュートリアルのAndroidアプリの例
1ファイルBluetooth通信を介したラップトップまたはPCを使用したArduinoの制御
import processing.serial.*;
Serial myPort;
String ledStatus="LED: OFF";
void setup(){
size(450, 500);
myPort = new Serial(this, "COM5", 38400); // Starts the serial communication
myPort.bufferUntil('\n'); // Defines up to which character the data from the serial port will be read. The character '\n' or 'New Line'
}
void serialEvent (Serial myPort){ // Checks for available data in the Serial Port
ledStatus = myPort.readStringUntil('\n'); //Reads the data sent from the Arduino (the String "LED: OFF/ON) and it puts into the "ledStatus" variable
}
void draw(){
background(237, 240, 241);
fill(20, 160, 133); // Green Color
stroke(33);
strokeWeight(1);
rect(50, 100, 150, 50, 10); // Turn ON Button
rect(250, 100, 150, 50, 10); // Turn OFF Button
fill(255);
textSize(32);
text("Turn ON",60, 135);
text("Turn OFF", 255, 135);
textSize(24);
fill(33);
text("Status:", 180, 200);
textSize(30);
textSize(16);
text("Program made by Dejan Nedelkovski,\n www.HowToMechatronics.com", 80, 320);
text(ledStatus, 155, 240); // Prints the string comming from the Arduino
// If the button "Turn ON" is pressed
if(mousePressed && mouseX>50 && mouseX<200 && mouseY>100 && mouseY<150){
myPort.write('1'); // Sends the character '1' and that will turn on the LED
// Highlighs the buttons in red color when pressed
stroke(255,0,0);
strokeWeight(2);
noFill();
rect(50, 100, 150, 50, 10);
}
// If the button "Turn OFF" is pressed
if(mousePressed && mouseX>250 && mouseX<400 && mouseY>100 && mouseY<150){
myPort.write('0'); // Sends the character '0' and that will turn on the LED
stroke(255,0,0);
strokeWeight(2);
noFill();
rect(250, 100, 150, 50, 10);
}
}
Code language: Arduino (arduino)
製造プロセス