- nRF24L01RFモジュール
- 回路図
- nRF24l01を使用してメッセージを送信するようにRaspberryPiをプログラミングする
- nRF24l01を使用してメッセージを受信するようにArduinoUNOをプログラミングする
設計者は、Bluetooth Low Energy(BLE 4.0)、Zigbee、ESP8266 Wi-Fiモジュール、433MHz RFモジュール、Lora、nRFなどの多くのワイヤレス通信システムを使用します。メディアの選択は、使用されているアプリケーションのタイプによって異なります。全体として、ローカルネットワーク通信で人気のあるワイヤレスメディアの1つはnRF24L01です。これらのモジュールは、ボーレートが250Kbpsから2Mbpsの2.4GHz(ISM帯域)で動作します。これは多くの国で合法であり、産業および医療アプリケーションで使用できます。また、適切なアンテナを使用すると、これらのモジュールは、それらの間の100メートルの距離まで信号を送受信できると主張されています。以前は、ArduinoでnRF24L01を使用してサーボモーターを制御し、チャットルームを作成しました。
ここでは、nRF24L01 – 2.4GHzRFトランシーバーモジュールとArduinoUNOおよびRaspberryPiを使用して、それらの間のワイヤレス通信を確立します。Raspberry piは送信機として機能し、ArduinoUnoはRaspberryPiをリッスンし、nRF24L01を使用してRaspberryPiから送信されたメッセージを16x2LCDに出力します。nRF24L01にはBLE機能も組み込まれており、BLEを使用してワイヤレスで通信することもできます。
チュートリアルは2つのセクションに分かれています。最初のセクションには、受信機として機能するArduinoとのnRF24L01のインターフェイスが含まれ、2番目のセクションには、送信機として機能するRaspberryPiとのnRF24L01のインターフェイスが含まれます。作業ビデオを含む両方のセクションの完全なコードは、このチュートリアルの最後に添付されます。
nRF24L01RFモジュール
nRF24L01モジュールは、 ある トランシーバモジュールの両方の送信を各モジュールにできることを意味し、データを受信するが、それらがあるので、それらのいずれかの時間でデータを送信または受信することができる半二重。このモジュールには、データの送受信を担当する北欧の半導体製の汎用nRF24L01ICが搭載されています。 ICはSPIプロトコルを使用して通信するため、任意のマイクロコントローラーと簡単にインターフェースできます。ライブラリはすぐに利用できるので、Arduinoを使用するとはるかに簡単になります。標準のnRF24L01モジュールの ピン配列を 以下に示します。
モジュールからの動作電圧に有する3.6Vまで1.9Vそれ電池効率的ひいてはもコインセルで実行できるなり、通常動作時(典型的には3.3V)とのみ12ミリアンペアの非常に少ない電流を消費します。動作電圧は3.3Vですが、ほとんどのピンは5Vトレラントであるため、Arduinoなどの5Vマイクロコントローラーと直接接続できます。これらのモジュールを使用するもう1つの利点は、各モジュールに6つのパイプラインがあることです。つまり、各モジュールは他の6つのモジュールと通信して、データを送受信できます。これにより、モジュールはIoTアプリケーションでスターネットワークまたはメッシュネットワークを作成するのに適したものになります。また、125の一意のIDの広いアドレス範囲を持っているため、閉じた領域では、これらのモジュールのうち125を互いに干渉することなく使用できます。
回路図
Arduinoを搭載したnRF24L01:
nRF24L01をArduinoに接続するための回路図は簡単で、多くのコンポーネントがありません。nRF24L01は、SPIインタフェースによって接続されると、16×2のLCDは、2つのみのワイヤを使用するI2Cプロトコルとインターフェースされます。
nRF24L01とRaspberryPi:
nRF24L01をRaspberryPiに接続するための回路図も非常に単純であり、SPIインターフェイスのみを使用してRaspberryPiとnRF24l01を接続します。
nRF24l01を使用してメッセージを送信するようにRaspberryPiをプログラミングする
Raspberry Piのプログラミングは、Python3を使用して行われます。ArduinoとしてC / C ++を使用することもできます。ただし、PythonでnRF24l01に使用できるライブラリがすでにあり、githubページからダウンロードできます。Pythonプログラムとライブラリは同じフォルダにある必要があることに注意してください。そうしないと、Pythonプログラムはライブラリを見つけることができません。ライブラリをダウンロードした後、すべてのプログラムとライブラリファイルが保存されるフォルダを抽出して作成します。ライブラリのインストールが完了したら、プログラムの作成を開始します。プログラムは、Raspberry PiGPIOにアクセスするためのインポートGPIOライブラリや インポート時間 などのコードで使用されるライブラリを含めることから始まります。 時間関連の機能にアクセスするため。Raspberry Piを初めて使用する場合は、Raspberrypiの使用を開始してください。
RPi.GPIOをGPIOとして インポートインポート時間 lib_nrf24 からspidevをインポートインポートNRF24
「 BroadcomSOCチャネル」 でGPIOモードを設定します 。 これは、「Broadcom SOCチャネル」番号でピンを参照していることを意味します。これらは、「GPIO」の後の番号です(たとえば、GPIO01、GPIO02…)。これらはボード番号ではありません。
GPIO.setmode(GPIO.BCM)
次に、パイプアドレスを設定します。このアドレスは、Arduinoレシーバーと通信するために重要です。アドレスは16進コードになります。
パイプ=、]
GPIO08をCEとして、GPIO25をCSNピンとして使用して無線を開始します。
radio.begin(0、25)
ペイロードサイズを32ビット、チャネルアドレスを76、データレートを1 mbps、電力レベルを最小に設定します。
radio.setPayloadSize(32) radio.setChannel (0x76) radio.setDataRate(NRF24.BR_1MBPS)radio.setPALevel(NRF24.PA_MIN)
パイプを開いてデータの書き込みを開始し、nRF24l01の基本的な詳細を印刷します。
radio.openWritingPipe(pipes) radio.printDetails()
文字列形式でメッセージを準備します。このメッセージはArduinoUNOに送信されます。
sendMessage = list( "Hi..Arduino UNO") while len(sendMessage)<32: sendMessage.append(0)
ラジオへの書き込みを開始し、ラジオが使用可能になるまで完全な文字列を書き込み続けます。それと一緒に、時間を書き留めて、メッセージ配信のデバッグステートメントを印刷します。
Trueの場合: start = time.time() radio.write(sendMessage) print( "Sent the message:{}"。format(sendMessage)) send radio.startListening()
文字列が完了し、パイプが閉じている場合は、タイムアウトのデバッグメッセージを出力します。
無線が利用できない間(0): time.sleep(1/100) if time.time()-start> 2: print( "Timed out。")#無線が切断されているか機能しなくなった場合にエラーメッセージ を出力
ラジオの聞き取りを停止して通信を閉じ、3秒後に通信を再開して別のメッセージを送信します。
radio.stopListening()#ラジオを 閉じるtime.sleep(3)#3秒の遅延を与える
Raspberryプログラムは、Pythonの基本を知っていれば簡単に理解できます。完全なPythonプログラムは、チュートリアルの最後にあります。
Raspberry PiでPythonプログラムを実行する:
以下の手順に従うと、プログラムの実行は非常に簡単になります。
- Pythonプログラムファイルとライブラリファイルを同じフォルダーに保存します。
- Senderのプログラムファイル名は nrfsend.pyで 、すべてのファイルが同じフォルダーにあります。
- RaspberryPiのコマンドターミナルに移動します。そして、「cd」コマンドを使用して、Pythonプログラムファイルを見つけます。
- 次に、フォルダーを開き、コマンド「 sudo python3 your_program.py 」を 記述して、Enterキーを押し ます。nRf24の基本的な詳細を確認でき、無線は3秒ごとにメッセージの送信を開始します。送信されたすべての文字で送信が完了すると、メッセージデバッグが表示されます。
これで、ArduinoUNOのレシーバーと同じプログラムが表示されます。
nRF24l01を使用してメッセージを受信するようにArduinoUNOをプログラミングする
Arduino UNOのプログラミングは、RaspberryPiのプログラミングに似ています。同様の方法に従いますが、プログラミング言語と手順が異なります。この手順には、nRF24l01の読み取り部分が含まれます。Arduino用のnRF24l01のライブラリは、githubページからダウンロードできます。必要なライブラリを含めることから始めます。I2Cシールドを使用する16x2LCDを使用しているため、 Wire.h ライブラリを含め、nRF24l01はSPIとインターフェイスするため、SPIライブラリを含めます。
#include
RF24およびLCD機能にアクセスするためのRF24およびLCDライブラリが含まれています。
#include
I2CのLCDアドレスは27で、16x2 LCDなので、これを関数に書き込みます。
LiquidCrystal_I2C lcd(0x27、16、2);
RF24は、ピン9のCEおよびピン10のCSNとともに、標準のSPIピンに接続されています。
RF24無線(9、10);
無線を開始し、電力レベルを設定し、チャネルを76に設定します。また、パイプアドレスをRaspberry Piと同じに設定し、パイプを開いて読み取ります。
radio.begin(); radio.setPALevel(RF24_PA_MAX); radio.setChannel(0x76); const uint64_t pipe = 0xE0E0F1F1E0LL; radio.openReadingPipe(1、パイプ);
I2C通信を開始し、LCDディスプレイを初期化します。
Wire.begin(); lcd.begin(); lcd.home(); lcd.print( "受信準備完了");
着信メッセージのラジオを聞き始め、メッセージの長さを32バイトに設定します。
radio.startListening(); char receiveMessage = {0}
ラジオが接続されている場合は、メッセージの読み取りを開始して保存します。メッセージをシリアルモニターに印刷し、次のメッセージが到着するまでディスプレイにも印刷します。ラジオを停止して聞き取り、しばらくしてから再試行します。ここでは10マイクロ秒です。
if(radio.available()){ radio.read(receivedMessage、sizeof(receivedMessage)); Serial.println(receivedMessage); Serial.println( "ラジオをオフにします。"); radio.stopListening(); 文字列stringMessage(receivedMessage); lcd.clear(); delay(1000); lcd.print(stringMessage); }
最後に記載されている完全なコードをArduinoUNOにアップロードし、メッセージが受信されるのを待ちます。
これで、Raspberry PiとnRf24l01を使用してメッセージを送信し、ArduinoUNOとnRF24l01を使用してメッセージを受信するための完全なチュートリアルが終了しました。メッセージは16x2LCDに出力されます。パイプアドレスは、ArduinoUNOとRaspberryPiの両方で非常に重要です。このプロジェクトの実行中に問題が発生した場合は、以下にコメントするか、フォーラムに連絡して詳細な議論を行ってください。
以下のデモビデオも確認してください。