このチュートリアルでは、Bluetoothモジュール(HC-06)とのインターフェイスを使用してPICプロジェクトをワイヤレスで作成する方法を学習します。以前のチュートリアルでは、PICマイクロコントローラーでUSARTモジュールを使用する方法をすでに学び、PICとコンピューター間の通信を確立しました。まったくの初心者の方は、MPLABとXC8の学習、LED、LCDのインターフェース、タイマー、ADC、PWMなどの使用など、最初から始めたすべてのPICチュートリアルをここで確認してください。
ここでは、人気のある BluetoothモジュールHC-06を使用しました。このモジュールを使用すると、PICMCUからモバイルアプリケーションまたはコンピューターにワイヤレスで情報を送受信できます。 PICとHC-06の間の通信は、PICマイクロコントローラにあるUSARTモジュールを使用して確立されます。 HC-05も使用できます。再び同じ非同期8ビットモードで動作しますが、今回は、Bluetoothモジュールで動作するようにコードを少し変更します。したがって、UARTチュートリアルを事前に学習することは、このプロジェクトの追加の利点です。
このチュートリアルでは、スマートフォンからオンまたはオフのコマンドを送信してLEDを切り替えます。Bluetooth経由でデータを送受信できるBluetoothターミナルと呼ばれるAndroidアプリケーションを使用します。アプリから文字「1」を送信すると、PICボードのライトがオンになり、ライトがオンになったことを示す確認応答が電話に返されます。同様に、電話から「0」を送信してオフにすることができます。このようにして、UARTチュートリアルと同様に、PICボード上のLEDライトをワイヤレスで制御できます。完全なプログラムと詳細なビデオは、このチュートリアルの最後にあります。
セットアップの基本的なブロック図を以下に示します。
要件:
ハードウェア:
- PIC16F877Aパフォーマンスボード
- HC-05またはHC-06Bluetoothモジュール
- コンピューター(プログラミング用)
- 携帯電話
- PICkit3プログラマー
ソフトウェア:
- MPLABX
- Bluetooth端末(モバイルアプリケーション)
BluetoothモジュールHC-06:
Bluetoothは、次の2つのモードで動作できます。
- コマンドモード
- 動作モード
では コマンドモード 我々はBluetooth信号の名前のようなBluetoothのプロパティを設定することができるようになります、そのパスワード、オペレーティングボーレートなどザ・ 動作モードは、 私たちはPICマイクロコントローラとの間でデータを送受信することができるようになりますものですおよびBluetoothモジュール。したがって、このチュートリアルでは、動作モードのみを試してみます。コマンドモードはデフォルト設定のままになります。デバイス名はHC-05(私はHC-06を使用しています)で、パスワードは0000または1234で、最も重要なのは、すべてのBluetoothモジュールのデフォルトのボーレートが9600です。
モジュールは5V電源で動作し、信号ピンは3.3Vで動作するため、3.3Vレギュレータがモジュール自体に存在します。したがって、それについて心配する必要はありません。6つのピンのうち、4つだけが動作モードで使用されます。ピン接続表を以下に示します。
S.No |
HC-05 / HC-06のピン |
MCUのピン名 |
PICのピン番号 |
1 |
Vcc |
Vdd |
31番目のピン |
2 |
Vcc |
Gnd |
32番目のピン |
3 |
Tx |
RC6 / Tx / CK |
25番目のピン |
4 |
処方箋 |
RC7 / Rx / DT |
26番目のピン |
5 |
状態 |
NC |
NC |
6 |
EN(有効) |
NC |
NC |
他のマイクロコントローラーを備えたBluetoothモジュールHC-05の詳細については、他のプロジェクトを確認してください。
- Arduinoを使用したBluetooth制御のおもちゃの車
- 8051を使用したBluetooth制御のホームオートメーションシステム
- RaspberryPiを使用した音声制御ライト
- ArduinoとProcessingを使用したスマートフォン制御のFMラジオ
- GセンサーとArduinoを使用した携帯電話制御のロボットカー
Bluetooth通信用のPICマイクロコントローラーのプログラミング:
すべてのモジュール(ADC、タイマー、PWM)と同様に、Bluetoothモジュールも初期化する必要があります。初期化はUARTの初期化と似ていますが、BluetoothがPIC16F877AMCUで問題なく動作するようにいくつかの変更を加える必要があります。構成ビットを定義して、Bluetooth初期化機能から始めましょう。
Bluetoothの初期化:
市場に出回っているほとんどすべてのBluetoothモジュールは9600のボーレートで動作します。ボーレートを動作するBluetoothモジュールと同じに設定することが非常に重要です。ここでは、20Mhzのクロック周波数で動作しているため、SPBRG = 129に設定します。ボーレートとして9600。したがって、上記の初期化は、9600ボーレートで動作するBluetoothモジュールに対してのみ機能します。また、高速ボーレートビットBRGHを有効にすることも必須です。これは、正確なボーレートを設定するのに役立ちます。
// ****** USARTを使用してBluetoothを初期化します******** // void Initialize_Bluetooth(){// RXとTXのピンを設定します// TRISC6 = 1; TRISC7 = 1; //データシート(pg114)のルックアップテーブルを使用してボーレートを設定します// BRGH = 1; // Bluetoothでは常に高速ボーレートを使用してください。そうしないと動作しませんSPBRG = 129; // Asycをオンにします。シリアルポート// SYNC = 0; SPEN = 1; // 8ビットの受信と送信を設定RX9 = 0; TX9 = 0; //送信と受信を有効にします// TXEN = 1; CREN = 1; //グローバルとphを有効にします。割り込み// GIE = 1; PEIE = 1; // Txの割り込みを有効にします。およびRx.//RCIE = 1; TXIE = 1; } // ___________BT初期化_____________ //
異なるボーレートで動作するBTモジュールを使用している場合は、以下のルックアップテーブルを参照して、SPBRGの値を確認できます。
Bluetoothへのデータのロード:
関数が初期化されると、Bluetoothからデータを送受信するための3つの関数がプログラムに含まれます。UARTとは異なり、データを送受信する前に、ここで考慮すべきことがいくつかあります。Bluetoothモジュールには、送信バッファと受信バッファがあり、送信されたデータはTxバッファに保存されます。このデータは、キャリッジリターンがモジュールに送信されない限り、ブロードキャスト(オンエア)されません。したがって、データを送信するには、BTのRxバッファをロードしてから、キャリッジリターンを使用してブロードキャストする必要があります。
上記の作業は、以下の機能を使用することで簡単に実行できます。以下の関数は、Rxバッファに1文字だけをロードする必要がある場合に使用できます。データをTXREGレジスタにロードし、whileループを使用してフラグTXIFおよびTRMTをチェックすることにより、データが処理されるまで待機します。
// BluetoothRxをロードする機能。1文字のバッファ// void BT_load_char(char byte){TXREG = byte; while(!TXIF); while(!TRMT); } //関数の終わり//
以下の関数は、BluetoothモジュールのRxバッファに文字列をロードするために使用されます。文字列は文字に分割され、各文字は BT_load_char() 関数に送信されます。
// BluetoothRxをロードする関数。string // void BT_load_string(char * string){while(* string)BT_load_char(* string ++);を含むバッファー } //関数の終わり/
Bluetoothを介したデータのブロードキャスト:
これまで、HC-05モジュールのRxバッファに情報を送信しました。次に、この関数を使用してデータを無線でブロードキャストするように指示する必要があります。
// RXからデータをブロードキャストする関数。buffer // void Broadcast_BT(){TXREG = 13; __delay_ms(500); } //関数の終わり//
この関数では、値13をTXREGレジスタに送信します。この値13は、キャリッジに相当する10進数にすぎません(ASCIIチャートを参照)。次に、放送局が開始するための小さな遅延が作成されます。
Bluetoothからのデータの読み取り:
UARTと同様に、以下の関数はBluetoothからデータを読み取るために使用されます
// BTのRx.bufferからcharを取得する関数// char BT_get_char(void){if(OERR)//オーバーランエラーをチェック{CREN = 0; CREN = 1; // CRENをリセット} if(RCIF == 1)//ユーザーがcharを送信した場合、char(ASCII値)を返す{while(!RCIF); RCREGを返します。} else //ユーザーがメッセージを送信していない場合return0 return 0; } //関数の終わり/
ユーザーがデータを送信した場合、この関数は、変数に保存して処理できる特定のデータを返します。ユーザーが何も送信していない場合、関数はゼロを返します。
メイン機能:
上記で説明したすべての関数を内部関数またはメイン関数で使用しました。紹介メッセージを送信してから、ユーザーが値を送信するのを待ちます。これに基づいて、パフォーマンスボードのRB3ピンに接続されている赤いLEDライトを切り替えます。
void main(void){//スコープ変数宣言// int get_value; //変数宣言の終了//// I / O宣言// TRISB3 = 0; // I / O宣言の終了// Initialize_Bluetooth(); // Bluetoothをアクションの準備をします//電源投入時に紹介メッセージを1回表示します// BT_load_string( "Bluetooth Initialized and Ready"); Broadcast_BT(); BT_load_string( "1を押してLEDをオンにします"); Broadcast_BT(); BT_load_string( "0を押してLEDをオフにします"); Broadcast_BT(); //メッセージの終わり// while(1)//無限のlop {get_value = BT_get_char(); //文字を読み取ります。 BT経由で受信//「0」を受信した場合// if(get_value == '0'){RB3 = 0; BT_load_string( "LEDがオフになりました"); Broadcast_BT(); } //「1」を受け取った場合// if(get_value == '1'){RB3 = 1; BT_load_string( "LEDがオンになりました"); Broadcast_BT();}}}
以下のコードセクションでプログラム全体を確認してください。
回路図とハードウェアのセットアップ:
このプロジェクトの回路接続は非常に簡単です。次の回路図に示すように、Bluetoothモジュールの電源を入れ、TxをPICの26番目のピンに接続し、RxをPICの25番目のピンに接続するだけです。
それでは、ハードウェアに進みましょう。接続が完了すると、次のようになります。
Bluetoothモバイルアプリケーションを使用したLEDの制御:
それでは、Androidアプリケーションを準備しましょう。Bluetoothターミナルと呼ばれるアプリケーションをAppStoreからダウンロードするか、このリンクを使用してください。アプリケーションをダウンロードしてインストールしたら、最初から使用しているPICパフォーマンスボードの電源を入れます。Bluetoothモジュールの小さなLEDライトが点滅して、電源がオンになっていて、接続を確立するための電話を積極的に探していることを示します。
次に、携帯電話のBluetooth設定に入り、新しいBluetoothデバイスを検索すると、モジュールに基づいてHC-05またはHC-06という名前が表示されるはずです。HC-06を使用しているので、電話に次のような表示があります。次に、それとペアリングしてみると、パスワードが要求されます。パスワードを1234(一部の場合は0000)として入力し、以下に示すように[OK]をクリックします。
ペアリングが成功したら、インストールしたBluetoothターミナルアプリケーションを開きます。以下に示すように、設定オプションに入り、 「デバイスの接続-セキュア」 を選択します。これにより、ペアリングされたすべてのデバイスが次のように一覧表示されるポップボックスが開きます。HC-05またはHC-06モジュールを選択します。
接続が確立されると、これまで点滅していたBluetoothモジュールのライトが一定になり、モバイルに正常に接続されたことを示す必要があります。そして、以下に示すように、プログラムから紹介メッセージを受け取る必要があります。
次に、「1」を押してLEDライトをオンにし、「0」を押してライトをオフにします。完全な動作はビデオに表示されます。モバイル画面は次のようになります。
これで、BluetoothモジュールをPICマイクロコントローラーに接続する方法を学びました。これを利用して、ワイヤレスプロジェクトを試すことができます。Bluetoothを使用するプロジェクトはたくさんあります。それらを試すか、独自のアイデアを考え出し、コメントセクションで共有することができます。また、Bluetooth端末アプリとHC-05を使用した以前のプロジェクト(Arduinoを使用したスマートフォン制御のホームオートメーションやArduinoを使用したスマートフォン制御のデジタルコードロックなど)も確認してください。
このチュートリアルがお役に立てば幸いです。どこかで行き詰まった場合は、コメントセクションをご利用ください。