nrf24l01 +在NodeJS中的arduino和树莓派之间
问题描述:
我试图从我的树莓派使用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);
});
我不知道我在做什么错。硬件是好的,设置看起来不错,你觉得怎么样?
感谢
答
平时要搞清楚什么是错NRF你应该从基础做起:
- 尝试简单NRF CONFIGS测试是否其工作,特别是没有CRC字节等
- 尝试不带动态有效载荷,并尝试在两端固定有效载荷大小为的。
- 自动应答也可以是一个问题(请注意当启用自动ACK时,CRC不能因为它是用来保证在此模式下传输确认禁用)。
- 确保CRC长度为两端匹配。在你的Arduino例子中,你有
CRC Length = 16 bits
,不管是用radio.crcBytes(1)
配置树莓。 - 不要依赖默认值,始终在两端提供相同的完整配置。
这些步骤可以大大减少查找问题的时间,特别是在使用不同的库和平台时。