- Bluetooth Low Energy(BLE)はどのように異なりますか?
- NRF24L01モジュールのBLE機能
- 必要なコンポーネント
- nRF24L01モジュール以降
- Arduino
- BLE通信のためのArduinoとのnRF24L01のインターフェース
Bluetooth Low Energy(BLE)はBluetoothのバージョンであり、従来のBluetoothのより小さく高度に最適化されたバージョンとして存在します。スマートBluetoothとも呼ばれます。BLEは、特に低コスト、低帯域幅、低電力、低複雑性のために、可能な限り低い消費電力を念頭に置いて設計されました。ESP32にはBLE機能が組み込まれていますが、Arduinoなどの他のマイクロコントローラーにはnRF24L01を使用できます。このRFモジュールは、スマートフォンやコンピューターなどの他のBluetoothデバイスにデータを送信するためのBLEモジュールとしても使用できます。
このチュートリアルでは、nRF24L01を使用してBLE経由でデータを送信する方法を示します。ArduinoとnRFモジュールをBLE経由で使用して、DHT11からスマートフォンに温度測定値を送信します。
Bluetooth Low Energy(BLE)はどのように異なりますか?
BLEは、コイン電池だけで長時間使用できるため、消費電力機能を考慮して採用されました。他のワイヤレス規格と比較して、BLEの急速な成長は、スマートフォン、タブレット、およびモバイルコンピューティングでの驚異的なアプリケーションのためにさらに速く進んでいます。
NRF24L01モジュールのBLE機能
BLEは、ボーレートが250Kbpsから2Mbpsの同じ2.4 GHz ISM帯域を使用します。これは、多くの国で許可されており、産業および医療アプリケーションに適用できます。帯域は2400MHzから2483.5MHzで始まり、40チャネルに分割されます。これらのチャネルのうち3つは 「アドバタイジング」 と呼ばれ、デバイスがそれらに関する情報を含むアドバタイズパケットを送信して、他のBLEデバイスが接続できるようにするために使用されます。これらのチャネルは、最初はバンドの上部下部とバンドの中央で選択され、多くのチャネルに干渉する可能性のある干渉を回避しました。 BLEの詳細については、このチュートリアルに従ってください。
このチュートリアルでは、NRF24L01モジュールをBLEトランシーバーとして使用する方法について説明します。RFモジュールとしてのNRF24L01に関するチュートリアルは、nRF24L01とArduinoチュートリアルとのインターフェースですでに説明されています。今日、このモジュールのBLE機能は、センサーデータをスマートフォンに送信することによって説明されます。ここで、このnRF24L01モジュールはArduinoマイクロコントローラーとインターフェースされ、DHT11センサーの温度データは公式のNordic BLEandroidアプリケーションに送信されます。
必要なコンポーネント
ハードウェア:
- Arduino UNO
- nRF24L01BLEモジュール
- DHT11温度および湿度センサー
- ジャンパー
ソフトウェア:
- Arduino IDE
- Nordic BLE Androidアプリケーション(BLEの場合はnRF Temp 2.0、モバイルの場合はnRF Connect)
nRF24L01モジュール以降
nRF24L01モジュールはトランシーバーモジュールです。つまり、各モジュールはデータの送信と受信の両方が可能ですが、半二重であるため、一度にデータを送信または受信できます。このモジュールには、データの送受信を担当する北欧の半導体製の汎用nRF24L01ICが搭載されています。ICはSPIプロトコルを使用して通信するため、任意のマイクロコントローラーと簡単にインターフェースできます。ライブラリはすぐに利用できるので、Arduinoを使用するとはるかに簡単になります。チャットルームを作成し、サーボモーターをワイヤレスで制御するために、ArduinoでnRF24L01モジュールをすでに使用しました。
標準のnRF24L01モジュールのピン配列を以下に示します。
モジュールの動作電圧は1.9V〜3.6V(通常は3.3V)で、通常の動作中の消費電流はわずか12mAと非常に少ないため、バッテリー効率が高く、コイン電池でも動作します。動作電圧は3.3Vですが、ほとんどのピンは5Vトレラントであるため、Arduinoなどの5Vマイクロコントローラーと直接接続できます。これらのモジュールを使用するもう1つの利点は、各モジュールに6つのパイプラインがあることです。つまり、各モジュールは他の6つのモジュールと通信して、データを送受信できます。これにより、モジュールはIoTアプリケーションでスターネットワークまたはメッシュネットワークを作成するのに適したものになります。また、125の一意のIDの広いアドレス範囲を持っているため、閉じた領域では、これらのモジュールのうち125を互いに干渉することなく使用できます。
Arduino
BLE通信のためのArduinoとのnRF24L01のインターフェース
nRF24L01はSPIで動作するため、インターフェイスはSPIプロトコルを使用します。 完全なコードやビデオは、このチュートリアルの最後に添付されます。Androidアプリガイドもビデオで説明されています。ここでは、nRF24L01モジュールを使用して北欧のスマートフォンアプリと通信し ます。まず、必要なライブラリを含めます。ライブラリには、nRF24L01コマンドにアクセスするためのRF24、DHT11コマンドにアクセスするためのDHT11ライブラリ、およびBLE機能を使用するためのBTLEライブラリが含まれています。
#include
DHT11およびBLEモジュールのピンと機能を定義して初期化します。DHT11を使用しているため、DHTタイプはDHT11として初期化されます。DHTはGPIOピン4に接続され、nRFモジュールのCEピンとCSNピンはそれぞれピン9と10に接続されます。
#define DHTPIN #define DHTTYPE DHT11 DHT22 DHT dht(DHTPIN、DHTTYPE); RF24無線(9、10); BTLE btle(&radio);
9600でシリアルポートを開始します。任意のポートを選択できます。次に、DHTセンサーを開始し、最大8文字のBluetoothローカル名でBTLEを開始します。
Serial.begin(9600); dht.begin(); btle.begin( "CD Temp");
ループ全体の温度を読み取り、float変数 tempに 保存します。DHTの電源が切れた場合、または予期しないことが発生した場合にエラーメッセージを表示するためのデバッグ行を追加します。
float temp = dht.readTemperature(); //温度データを読み取る if(isnan(h)-isnan(t)){ Serial.println(F( "DHTセンサーからの読み取りに失敗しました!")); 戻る; }
値をBufferに保存し、BLEモジュールに解析します。また、温度値をBLEモジュールに送信します。BLEモジュールは温度データをアドバタイズします。Androidアプリは、BLEモジュールを検索し、センサーデータを受信できます。
nrf_service_data buf; buf.service_uuid = NRF_TEMPERATURE_SERVICE_UUID; buf.value = BTLE:: to_nRF_Float(temp); if(!btle.advertise(0x16、&buf、sizeof(buf))){ Serial.println( "BTLE failed..!"); }
完了したら、次のチャネルに移動します。
btle.hopChannel();
DHTセンサーのドキュメントでは、1回の読み取り後に最低2秒の遅延を維持することが推奨されているため、2秒の遅延を追加します。
delay(2000);
をアップロードしてスマートフォンをnRFモジュールとペアリングした後、以下に示すように、BLEAndroidアプリケーション用のnRFTemp2.0で値の取得を開始します。ペアリングしてAndroidアプリでデータを取得する完全な手順もビデオで説明されています:
これで、BLEnRF24L01を使用してセンサーデータをNordicAndroidアプリにアドバタイズするための完全なチュートリアルが終了します。何か問題があれば、以下にコメントするか、フォーラムに書き込んでください。nRF24L02の詳細については、Arduino、nRF24L01、および処理を使用してプライベートチャットルームを作成することもできます。