せとブログ

学んだことを忘れない

nRF24L01+を使ってArduinoで無線通信

とにかく安く無線通信したい

たかだか1バイト程度のデータを送信するのにBLEとかもったいなぁーでも赤外線でリモコンめいたもの作るのもめんどくさいなーなんかないかなー。と探していたら見つけたのがnRF24L01+でした。nRF24L01、でP/Nに+がないやつの情報が多いですが基本的には変わりません。

どこで買った?

Amazonです。昔と違ってなんでもネットで買えるってほんと便利。昔ならこの手の部品って買いに行ったら一日それで終わりだったのに。

使い方

このあたりを参考にしてArduinoと接続して使います。SPI以外はAssignを変えれば使えるのでどこでも問題ないです。ブレッドボードで接続するとうまくいかないという噂があるので最初から適当にハンダ付けしてやりましたが、Capacitorはなくても通信できるようでした。

ここまでできた

 1対nの通信はできないとかいう話もありますが、できます。というかBroadcastになりますが。Masterは1台のみでしか試していませんが、Slave側でReadingPipeを開く時のAddressを同じにしておけば、複数のSlaveでMasterからのデータを取ることができます。

ハマった所

考えてみたら当然なのですが、MasterとSlaveのアドレスは変えないと当然通信できません。いろんなブログでそのままスケッチの例を使えばできる、ということが書かれていましたがそんなことはない!MasterとSlaveでAddressを入れ替えないと通信できません。Masterは書き込み、SlaveはそのアドレスをListenするということです。

radio.begin();
if(IS_MASTER) {
  // Master
  radio.openWritingPipe(addresses[0]);
  radio.openReadingPipe(1, addresses[1]);
} else {
  // Slave
  radio.openWritingPipe(addresses[1]);
  radio.openReadingPipe(1, addresses[0]);

参考にさせていただいたサイト

nRF24L01無線モジュール

ブレッドボードではうまく使えないとあったので変換用のボードを作りました。

Optimized High Speed NRF24L01+ Driver Class Documenation: RF24 Class Reference

RF24のクラスリファレンス。

nRF24L01+ 無線実験 | 興味本位の Trial 安堵 Error

電源まわりは結構鬼門なんだろうなぁ。

nRF24L01モジュールで無線通信 | なんでも独り言

MirfというModuleを使ってらっしゃいますが、今回は使いませんでした。あと、1対nもできました。nRF24L01+だとできるのかな?未調査。

arduino-info - Nrf24L01-2.4GHz-HowTo

Capacityこそすべてという勢いで書かれています。

https://www.sparkfun.com/datasheets/Components/SMD/nRF24L01Pluss_Preliminary_Product_Specification_v1_0.pdf

nRF24L01+のデータシート。