NRF24L01 測試 再整理

用 Nano 連接
MISO(D12) IRQ(D2)
SCK (D13) MOSI(D11)
CE (D7) CSN(D8)
GND (GND) VCC(3.3V)
***********************
CE (D7) CSN(D8) 一定要跟程式一樣
接線一定要用rf24_hardware_test 確認過

程式重點:

#include <SPI.h>
#include "RF24.h"
RF24 radio(7, 8);//設定 腳位 CE (D7) CSN(D8)
//設定兩個無線模組節點的位址,用來傳輸訊息用
const uint8_t pipes[][6] = {"1Node","2Node"};
兩塊卡一定要顛倒
一片是
radio.openWritingPipe(pipes[1]);//開啟寫入通道
radio.openReadingPipe(1, pipes[0]);//開啟讀取通道
另一片
radio.openWritingPipe(pipes[0]);//開啟寫入通道
radio.openReadingPipe(1, pipes[1]);//開啟讀取通道
主要是一片寫 一
如果確定是一個讀一個寫 那用一個通道也行
這邊主要是 兩邊能互相溝通
1對多應該是 主端 不停改變 節點通道去讀 各個子端資料 因沒多餘的卡無法試

  嘗試用struct 傳
struct SdataObj{
char id[12];
char pass[12];
int count;
};
送端:
radio.stopListening(); // First, stop listening so we can talk. 先停止監聽
Serial.println(F("Now sending"));
Dataobj.count++;
Serial.println(Dataobj.count);
int ll = sizeof(Dataobj);
Serial.println(ll);
if (!radio.write(&Dataobj, sizeof(Dataobj))) {
Serial.println(F("failed"));
}
else
{
Serial.println(F("OK"));
}
radio.startListening();
收端:
if (radio.available())
{
digitalWrite(Led, HIGH);
Serial.println(F("Now Recv"));
while (radio.available()) {                                   // While there is data ready
radio.read(&Dataobj, sizeof(Dataobj));             // Get the payload
}
Serial.print(F("Recv :"));
Serial.println(Dataobj.count);
Serial.println(Dataobj.id);
Serial.println(Dataobj.pass);
Serial.println("end");
}
------------------------------------------------
本來是用 
struct SdataObj{
char id[32];
char pass[32];
int count;
};
長度:66 但是收端不行 後面會不見了
所以減半 26 才成功
查資料
每次最多可發28字元
所以要小心不要超過

測一下距離 :
送端是 號稱 1100M 有天線
收端是 號稱 功率加強版 
跟我拿手機測我家 wifi 基地台 差不多 距離
一般應該是夠用了
下次再買幾個不同的來交叉測 距離

PS:測試發送時 有天線那片在筆電上常常發送失敗
移到一般PC也偶爾失敗
天線沒接就一定失敗
 天線鎖緊後失敗率就沒那麼高
單片式的倒是沒這問題


留言

熱門文章