nRF24 ManualAcknowledgement.ino 示例不起作用

问题描述 投票:0回答:1

背景:

我正在为个人项目测试 nRF24L01 模块,其中我有一个“控制器”模块,可与一个或多个“工作人员”模块进行通信。 “工作人员”应该使用自定义消息响应“控制器”发送的查询,该消息并不总是相同的。

由于需要最新的“worker”响应消息,取决于“controller”发送的查询,我选择了“ManualAcknowledgements.ino”示例。它专门使用 ACK 包来实现这一点,而不需要通过手动实现等待来实现更复杂的通信机制。

请注意,我“按原样”使用了上述代码,没有以任何方式修改它。甚至使用的 CE 和 CSN 都是相同的,因此我没有发布我的代码。

我当前的问题:

我在配置为“发射器”(0) 的模块上始终看到以下消息:

**Transmission failed or timed out** 

我也始终在配置为“接收器”的模块上接收消息 (1):

**Received 8 bytes on pipe 1: Hello 0 Response failed**

这告诉我消息已正确到达接收者,但发送响应时出现问题。我强烈怀疑 ACK 功能或其配置有问题。

有人在测试这个特定的官方示例时遇到过这个问题吗?

有关测试的其他详细信息:

  • 目前,我正在使用两个 Arduino UNO 执行测试(即使目标项目使用 Raspberry 作为“控制器”)。

  • 我还想指出,我使用的是优质材料(原装 Arduino、优质 nRF 模块等)和短电缆,两个模块之间的距离不到一米。

  • 我还在使用迄今为止最新版本的 nRF24 库(v1.4.7)。

  • 如果我修改代码以在串行监视器上返回“PrettyPrint”详细信息,我会收到每个模块的以下信息:

TX模块报告:

SPI Frequency = 10 Mhz
Channel = 76 (~ 2476 MHz)
Model = nRF24L01+
RF Data Rate = 1 MBPS
RF Power Amplifier = PA_LOW
RF Low Noise Amplifier = Enabled
CRC Length = 16 bits
Address Length = 5 bytes
Static Payload Length = 8 bytes
Auto Retry Delay = 1500 microseconds
Auto Retry Attempts = 15 maximum
Packets lost on
    current channel = 15
Retry attempts made for
    last transmission = 15
Multicast = Disabled
Custom ACK Payload = Disabled
Dynamic Payloads = Disabled
Auto Acknowledgment = Enabled
Primary Mode = TX
TX address = 0x65646f4e32
pipe 0 ( open ) bound = 0x65646f4e32
pipe 1 ( open ) bound = 0x65646f4e31
pipe 2 (closed) bound = 0xc3
pipe 3 (closed) bound = 0xc4
pipe 4 (closed) bound = 0xc5
pipe 5 (closed) bound = 0xc6
Transmission failed or timed out

RX模块报告:

SPI Frequency       = 10 Mhz
Channel         = 76 (~ 2476 MHz)
Model           = nRF24L01+
RF Data Rate        = 1 MBPS
RF Power Amplifier  = PA_LOW
RF Low Noise Amplifier  = Enabled
CRC Length      = 16 bits
Address Length      = 5 bytes
Static Payload Length   = 8 bytes
Auto Retry Delay    = 1500 microseconds
Auto Retry Attempts = 15 maximum
Packets lost on
    current channel = 15
Retry attempts made for
    last transmission   = 15
Multicast       = Disabled
Custom ACK Payload  = Disabled
Dynamic Payloads    = Disabled
Auto Acknowledgment = Enabled
Primary Mode        = RX
TX address      = 0x65646f4e32
pipe 0 (closed) bound   = 0x65646f4e32
pipe 1 ( open ) bound   = 0x65646f4e31
pipe 2 (closed) bound   = 0xc3
pipe 3 (closed) bound   = 0xc4
pipe 4 (closed) bound   = 0xc5
pipe 5 (closed) bound   = 0xc6
Received 8 bytes on pipe 1: Hello 0 Response failed. 
arduino-uno spi wireless
1个回答
0
投票

从给定的信息来看,问题似乎是接收器在收到数据包时没有将 ACK 数据包发送回发送器。这可能是由于多种原因造成的,例如:

  • 接收方未正确配置以发送 ACK 数据包。
  • 接收方未正确接收数据包。
  • 接收器正在发送 ACK 数据包,但发送器未正确接收。
  1. 检查接收方的配置,确保其配置为发送 ACK 数据包。
  2. 检查发射器和接收器之间的信号强度,确保接收器正确接收数据包。
  3. 使用逻辑分析仪捕获发送器和接收器之间的 SPI 流量,以查看接收器是否正在发送 ACK 数据包。
  • 确保您使用的发射器和接收器地址正确。
  • 确保您使用正确的渠道。
  • 尝试降低数据速率。
  • 尝试增加发射器的功率输出。
  • 尝试将发射器和接收器移得更近。
  • 尝试使用不同的 nRF24L01 模块。

如果您仍然遇到问题,请发布您的代码和测试设置的更详细描述。

补充说明:

  • 发送器上出现“传输失败或超时”消息表示发送器在指定的超时时间内没有收到接收器的 ACK 数据包。
  • 接收器上的“Received 8 bytes on pipeline 1: Hello 0 Response failed”消息表示接收器在管道 1 上接收到 8 字节数据,但无法将 ACK 数据包发送回发送器。

我希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.