2016-03-08 110 views
4

我試圖從我的樹莓派使用nrf24l01 +網絡接收器檢索我的傳感器數據。nrf24l01 +在NodeJS中的arduino和樹莓派之間

我從Arduino nano板發送它。這裏是我的Arduino的設置:

STATUS  = 0x0e RX_DR=0 TX_DS=0 MAX_RT=0 RX_P_NO=7 TX_FULL=0 
RX_ADDR_P0-1  = 0xcccccc3ccc 0xcccccc3c3c 
RX_ADDR_P2-5  = 0x33 0xce 0x3e 0xe3 
TX_ADDR  = 0xcccccccc3c 
RX_PW_P0-6 = 0x20 0x20 0x20 0x20 0x20 0x20 
EN_AA  = 0x3e 
EN_RXADDR = 0x3f 
RF_CH  = 0x5a 
RF_SETUP  = 0x07 
CONFIG  = 0x0f 
DYNPD/FEATURE = 0x3f 0x04 
Data Rate = 1MBPS 
Model  = nRF24L01+ 
CRC Length = 16 bits 
PA Power  = PA_MAX 

我的Raspberry Pi插入nrf24l01 +通過GPIO。我確信連接是通過使用https://github.com/TMRh20/RF24給出的C++例子OK:

RF24 radio(RPI_BPLUS_GPIO_J8_15,RPI_BPLUS_GPIO_J8_24, BCM2835_SPI_SPEED_8MHZ); 

的數據確定。現在我想用一個nodeJS程序來獲取這些數據。我使用這個庫:https://github.com/natevw/node-nrf

的代碼是很簡單的,但不知何故不工作(控制檯是沉默):

var spiDev = "/dev/spidev0.0"; 
var cePin = 15; //RPI_BPLUS_GPIO_J8_15 
var irqPin = null; 
var channel = 0x5a; //90 

var radio = require('nrf').connect(spiDev, cePin, irqPin); 

radio 
    .channel(channel) 
    .dataRate('1Mbps') 
    .crcBytes(1) 
// .autoRetransmit({count:15, delay:4000}) 
    ; 

radio.begin(function() { 
    var rx = radio.openPipe('rx', 0xcccccccc3c); 
    rx.pipe(process.stdout); 
}); 

我不知道我在做什麼錯。硬件是好的,設置看起來不錯,你覺得怎麼樣?

感謝

回答

0

平時要搞清楚什麼是錯NRF你應該從基礎做起:

  1. 嘗試簡單NRF CONFIGS測試是否其工作,特別是沒有CRC字節等
  2. 嘗試不帶動態有效載荷,並嘗試在兩端固定有效載荷大小爲的
  3. 自動應答也可以是一個問題(請注意當啓用自動ACK時,CRC不能因爲它是用來保證在此模式下傳輸確認禁用)。
  4. 確保CRC長度爲兩端匹配。在你的Arduino例子中,你有CRC Length = 16 bits,不管是用radio.crcBytes(1)配置樹莓。
  5. 不要依賴默認值,始終在兩端提供相同的完整配置

這些步驟可以大大減少查找問題的時間,特別是在使用不同的庫和平臺時。