我正在查看在此處找到的示例代碼。我知道nRF24L01模塊可以使用6條管道,但是我一直在互聯網上搜索地址名稱,卻一無所獲。更具體地說,在第37行上,有關於作者在哪裡獲得0xF0F0F0F0E1LL,0xF0F0F0F0D2LL的參考嗎?
謝謝。
我正在查看在此處找到的示例代碼。我知道nRF24L01模塊可以使用6條管道,但是我一直在互聯網上搜索地址名稱,卻一無所獲。更具體地說,在第37行上,有關於作者在哪裡獲得0xF0F0F0F0E1LL,0xF0F0F0F0D2LL的參考嗎?
謝謝。
正如大多數人所張貼的那樣,管道的值是任意的,但必須遵循API的規則:
管道1-5應該共享前32位。只有最低有效字節應該是唯一的,例如
在回答您的問題之前,我認為需要對十六進制和十進制值進行解釋。
40位十六進制是以16為底的數字表示。十進制以10為底。因此,您可以將十六進制值轉換為十進制。由於這超出了該問題的範圍,因此您可以搜索如何從一種轉換為另一種。有一些在線轉換器:
當您將十六進制值轉換為十進制時,您會看到它只是一個數字表示形式。轉換時,您將放置 0x
和 LL
。如前所述, 0x
表示該值是十六進制值,而 LL
表示鍵入Long Long。
所以要回答您的問題問題,使用轉換器找到一個十六進制數字,例如: >
Pipe 1-5應該共享前32位。僅最低有效字節應該是唯一的,例如openReadingPipe(1,0xF0F0F0F0AA); openReadingPipe(2,0xF0F0F0F066);
添加 0x
和 LL
0xF0F0F0F0A1LL0xF0F0F0F0F0A2LL0xF0F0F0B0LL4代碼>
所有方法都可以正常工作。
在我學習時,我不是十六進制專家,所以如果我不正確,請有人糾正我。
最後,nRF24L01數據表指出以下幾點,即地址的選擇並非完全任意:
注:通常僅在噪聲中檢測到電平僅移動一次(即000FFFFFFF)的地址,並且會給出錯誤的檢測結果,這可能會提高包錯誤率。作為前同步碼(高低切換)的延續的地址也提高了分組錯誤率。
值 0xF0F0F0F0F0E1LL,0xF0F0F0F0D2LL
是任意值,並定義要與之交談的發送者和接收者的地址。
如果您使用Mirf庫
> Mirf.setRADDR((byte *)“ serv1”);
它們也可以是諸如 serv1
之類的字符串。
RF24
使用
write_register(RX_ADDR_P0,&value,5); write_register(TX_ADDR,&value,5);
有些事情每個人都會忘記告訴你:
在第一個接收器之後,接收器上的管道應該縮短
const uint64_t pipe01 = 0xE8E8F0F0A1LL; const uint64_t pipe02 = 0xA2LL; const uint64_t pipe03 = 0xA3LL; const uint64_t pipe04 = 0xA4LL; const uint64_t pipe05 = 0xA5LL; const uint64_t pipe06 = 0xA6LL; radio.openReadingPipe(1,pipe01); radio.openReadingPipe(2,pipe02); radio.openReadingPipe(3,pipe03); radio.openReadingPipe(4,pipe04); radio.openReadingPipe(5,pipe05);
發射器應為
const uint64_t pipe01 = 0xE8E8F0F0A1LL; const uint64_t pipe02 = 0xE8E8F0F0A2LL; const uint64_t pipe03 = 0xE8E8F0F0A3LL; const uint64_t pipe04 = 0xE8E8F0F0A4LL; const uint64_t pipe05 = 0xE8E8F0F0A5LL; const uint64_t pipe06 = 0xE8E8F0F0A6L; uint64_t //或pipe02或pipe03或pipe04或pipe05radio.openWritingPipe(setPipeToSend);
如果您想知道哪個管道消息來了,請使用
uint8_t一些變量;如果(radio.available(&someVariable)){Serial.print(“管道號”); Serial.printLn(someVariable); }
管道編號6 也用於接收確認消息。
此外,初始化代碼必須具有 radio.enableDynamicPayloads();
這個對我來說效果很好:
radio.begin() ; //radio.setChannel(0x57); //如果雙方的設置都相同radio.setPALevel(RF24_PA_LOW); //“ LOW”是更穩定的模式radio.enableAckPayload(); //對於自動應答radio.openWritingPipe(pipe01); //用於將鏈接管道號發送到管道地址//radio.openReadingPipe(1,pipe01); //我使用pipe01發送radio.openReadingPipe(2,pipe02); radio.openReadingPipe(3,pipe03); radio.openReadingPipe(4,pipe04); radio.openReadingPipe(5,pipe05);
radio.enableDynamicPayloads(); //多管道接收必須具有radio.startListening(); //開始收聽
祝你好運...