![]() |
發布時間: 2016-4-18 03:33
正文摘要:nRF24L01是一款工作在 2.4~2.5GHz 世界通用ISM頻段的單片無線收發器芯片,輸出功率、頻道選擇和協議的設置可以通過SPI接口進行設置。有極低的電流消耗,當工作在發射模式下發射功率為-6dBm時電流消耗為9.0mA,接收模 ... |
gdgzwqz 發表于 2017-8-1 22:53 下載好的能不能分享一下 |
樓主您好!我今天也碰巧搞這個模塊,不過好像存在些問題,接線沒有問題。C:\Users\Administrator\DesktopC:\Users\Administrator\Desktop |
下載一個看看 |
學習一下 |
我也點“后退”結果造成重復下載被重復扣了5分!!!![]() ![]() ![]() |
I'm Receiver... 沒有然后了 ![]() |
用的庫里帶的事例,一直這樣![]() ![]() Beginning ... Finished sending Timeout on response from server! Finished sending Timeout on response from server! Finished sending Timeout on response from server! Finished sending Timeout on response from server! Finished sending Timeout on response from server! Finished sending |
請問下怎樣實現兩個邊發送 邊接收 |
我下載了再次,扣了我再次5分!!!!!!冤枉啊!!!!!!!!! |
丟包多數是信號強度不夠,你看設置有問題沒,簡單辦法可以試試降低速率,如果可以就是這樣的問題 |
支持一個,我用RF24丟包好嚴重,不懂是什么問題 |
這個是別人寫的多通道發送端程序,更改地址,但是只有03號地址才能用為啥?
|
有一對多的代碼嗎? |
很不錯的教程,學習了 |
參照了您的寫法,一對一成功了,請問一對多如何改寫 |
1) 終于成功測試成功。 不過網上的MIRF 庫有多個版本的,我用上老的版本· https://github.com/aaronds/arduino-nrf24l01 2) 設置CE CSN引腳也很方便可以用以下指令 Mirf.cePin = 9; Mirf.csnPin = 10 3) 范例開始的這段漏了 #include #include #include #include , 后來查了一下應該是 #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> |
相當不錯的教程 |
教程真的不錯。 |
問題解答: 樓主你好,我想請教下,如果一次發送多個傳感器的數據該怎么改呢?我試著改了一下你的程序,但是只能接收到第一個傳感器的數據,第二個傳感器的數據一直不對,能幫我看下嗎?謝謝了 發送端程序 #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> void setup() { Serial.begin(9600); Mirf.cePin = 8; //設置CE引腳為D9 Mirf.csnPin = 7; //設置CE引腳為D10 Mirf.spi = &MirfHardwareSpi; Mirf.init(); //初始化nRF24L01 //設置接收標識符"Sen01" Mirf.setRADDR((byte *)"Sen01"); Mirf.payload = sizeof(unsigned int); Mirf.channel = 3; Mirf.config(); //注意一個Arduino寫Sender.ino,另一個寫Receiver.ino。 //這里標識寫入了Sender.ino Serial.println("I'm Sender..."); } unsigned int adata = 0; unsigned int bdata = 0; void loop() { //讀取A0值到adata adata = analogRead(A0); bdata = analogRead(A1); //由于nRF24L01只能以byte單字節數組形式發送Mirf.payload個數據, //所以必須將所有需要傳輸的數據拆成byte。 //下面定義byte數組,存放待發數據,因為Mirf.payload = sizeof(unsigned int); //實際下面等于byte data[2]; byte data[Mirf.payload]; //adata是unsigned int雙字節數據,必須拆開。 //將adata高低八位拆分: data[0] = adata & 0xFF; //低八位給data[0], data[1] = adata >> 8; //高八位給data[1]。 data[2] = bdata & 0xFF; //低八位給data[0], data[3] = bdata >> 8; //設置向"serv1"發送數據 Mirf.setTADDR((byte *)"Rec01"); Mirf.send(data); //while死循環等待發送完畢,才能進行下一步操作。 while(Mirf.isSending()) {} Serial.println(adata); Serial.print("*****"); Serial.println(bdata,DEC); delay(3000); } 接收端程序: #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> //定義一個變量adata存儲最終結果,oldadata存儲舊結果,防止相同結果刷屏。 unsigned int adata = 0, bdata = 0; void setup() { Serial.begin(9600); //---------初始化部分,不可隨時修改--------- Mirf.cePin = 8; //設置CE引腳為D9 Mirf.csnPin = 7; //設置CE引腳為D10 Mirf.spi = &MirfHardwareSpi; Mirf.init(); //初始化nRF24L01 //---------配置部分,可以隨時修改--------- //設置接收標識符"Rev01" Mirf.setRADDR((byte *)"Rec01"); //設置一次收發的字節數,這里發一個整數, //寫sizeof(unsigned int),實際等于2字節 Mirf.payload = sizeof(unsigned int); //發送通道,可以填0~128,收發必須一致。 Mirf.channel = 3; Mirf.config(); //注意一個Arduino寫Sender.ino,另一個寫Receiver.ino。 //這里用來辨別寫入了Receiver.ino程序 Serial.println("I'm Receiver..."); } void loop() { //定義一個暫存數組,大小為Mirf.payload。 byte data[Mirf.payload]; if(Mirf.dataReady()) //等待接收數據準備好 { Mirf.getData(data); //接收數據到data數組 //data[1]<左移8位與data[0]并,重組數據。 adata = (unsigned int)((data[1] << 8) | data[0]); bdata = (unsigned int)((data[3] << 8) | data[2]); Serial.println(adata); Serial.print("*****"); Serial.println(bdata,DEC); } } 求指教,十分感謝! ----------------------------------------------- 答: 你在可以這樣修改: 發送端程序 #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> void setup() { Serial.begin(9600); Mirf.cePin = 8; //設置CE引腳為D9 Mirf.csnPin = 7; //設置CE引腳為D10 Mirf.spi = &MirfHardwareSpi; Mirf.init(); //初始化nRF24L01 //設置接收標識符"Sen01" Mirf.setRADDR((byte *)"Sen01"); Mirf.payload = sizeof(unsigned int);//在這把2 修改成4 Mirf.channel = 3; Mirf.config(); //注意一個Arduino寫Sender.ino,另一個寫Receiver.ino。 //這里標識寫入了Sender.ino Serial.println("I'm Sender..."); } unsigned int adata = 0,bdata = 0; void loop() { //讀取A0值到adata adata = analogRead(A0); bdata = analogRead(A1); //由于nRF24L01只能以byte單字節數組形式發送Mirf.payload個數據, //所以必須將所有需要傳輸的數據拆成byte。 //下面定義byte數組,存放待發數據,因為Mirf.payload = sizeof(unsigned int); //實際下面等于byte data[2]; byte data[Mirf.payload]; //adata是unsigned int雙字節數據,必須拆開。 //將adata高低八位拆分: data[0] = adata & 0xFF; //低八位給data[0], data[1] = adata >> 8; //高八位給data[1]。 data[2] = bdata & 0xFF; //低八位給data[0], data[3] = bdata >> 8; //設置向"serv1"發送數據 Mirf.setTADDR((byte *)"Rec01"); Mirf.send(data); //while死循環等待發送完畢,才能進行下一步操作。 while(Mirf.isSending()) {} Serial.println(adata); Serial.print("*****"); Serial.println(bdata,DEC); delay(3000); } 接收端程序: #include <SPI.h> #include <Mirf.h> #include <nRF24L01.h> #include <MirfHardwareSpiDriver.h> //定義一個變量adata存儲最終結果,oldadata存儲舊結果,防止相同結果刷屏。 unsigned int adata = 0, bdata = 0; void setup() { Serial.begin(9600); //---------初始化部分,不可隨時修改--------- Mirf.cePin = 8; //設置CE引腳為D9 Mirf.csnPin = 7; //設置CE引腳為D10 Mirf.spi = &MirfHardwareSpi; Mirf.init(); //初始化nRF24L01 //---------配置部分,可以隨時修改--------- //設置接收標識符"Rev01" Mirf.setRADDR((byte *)"Rec01"); //設置一次收發的字節數,這里發一個整數, //寫sizeof(unsigned int),實際等于2字節 Mirf.payload = sizeof(unsigned int);//在這把2 修改成4 //發送通道,可以填0~128,收發必須一致。 Mirf.channel = 3; Mirf.config(); //注意一個Arduino寫Sender.ino,另一個寫Receiver.ino。 //這里用來辨別寫入了Receiver.ino程序 Serial.println("I'm Receiver..."); } void loop() { //定義一個暫存數組,大小為Mirf.payload。 byte data[Mirf.payload]; if(Mirf.dataReady()) //等待接收數據準備好 { Mirf.getData(data); //接收數據到data數組 //data[1]<左移8位與data[0]并,重組數據。 adata = (unsigned int)((data[1] << 8) | data[0]); bdata = (unsigned int)((data[3] << 8) | data[2]); Serial.println(adata); Serial.print("*****"); Serial.println(bdata,DEC); } } |