Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arduino 如何使用nRF24L01(+;)2.4GHz无线收发器查找管道地址_Arduino_Radio_Wireless_Receiver_Radio Transmission - Fatal编程技术网

Arduino 如何使用nRF24L01(+;)2.4GHz无线收发器查找管道地址

Arduino 如何使用nRF24L01(+;)2.4GHz无线收发器查找管道地址,arduino,radio,wireless,receiver,radio-transmission,Arduino,Radio,Wireless,Receiver,Radio Transmission,我试图找出是否有一种有效的方法来计算rf24无线电的管道地址。为了使两个无线电通信,它们必须位于同一个通道上,并且具有相同的读写管道地址 我现在能想到的唯一方法是使用暴力,消除搜索次数的最简单方法是至少知道广播频道——我认为这是最简单的部分。理论上(我猜),我可以将我的“搜索”收音机设置为正确的频道,然后将其设置为“只听”,然后尝试一个接一个的地址。但这是低效的,因为地址可以是任何40位十六进制值。所以有2^40个可能的键——我不想一次花两周的时间去寻找“监听”地址 有更好的办法吗?是否有可能向

我试图找出是否有一种有效的方法来计算rf24无线电的管道地址。为了使两个无线电通信,它们必须位于同一个通道上,并且具有相同的读写管道地址

我现在能想到的唯一方法是使用暴力,消除搜索次数的最简单方法是至少知道广播频道——我认为这是最简单的部分。理论上(我猜),我可以将我的“搜索”收音机设置为正确的频道,然后将其设置为“只听”,然后尝试一个接一个的地址。但这是低效的,因为地址可以是任何40位十六进制值。所以有2^40个可能的键——我不想一次花两周的时间去寻找“监听”地址

有更好的办法吗?是否有可能向通道发送信号并获取该通道上所有可用的管道地址?基本上,除了我的方法

编辑1:


我想知道是否有一种方法可以像这样修改扫描仪:这样它就可以捕获给定通道的所有“可见”数据包,然后找到地址。根据nRF24L01(+)规范,“数据包包含前导码、地址、数据包控制、有效载荷和CRC字段”。这将把可能的地址数量缩小到很少。

大警告,我从未使用过nRF24L01,只是刚刚浏览了一下数据表,所以我说的可能是胡说八道


似乎您希望能够为项目使用“任意”管道地址,但希望能够简单地将设备“委托”到您的网络中。我看到您正试图同时解决三个方面的问题:

  • 管道地址解析(以及可能的选择)
  • 渠道选择
  • 查找和加入网络
  • 我将要假设的事情:

    • 为管道地址选择实际值超出范围
    建议

    我建议你:

    • 选择用于公布网络信息的特殊(或一组特殊)管道地址(例如,可能为0xCAFE00D类型)
    • 以只读方式定期公布(即信标)在单个通道上连接所需的信息。例如,这将公布信标节点正在读取的管道地址
    • 让您的“加入”节点侦听此信息,以找出它们应该写入的地址
    • 当一个节点加入时,它应该包含写回它所需的信息。也许这里还应该有另一个协商,其中信标和连接节点协商一组要使用的替代管道地址
    • 扩展实施以利用多个通道(可能仅用于数据,也可能用于数据和网络管理)
    多频道


    明智的做法是使用多个渠道,主要是为了避免。然而,它通常伴随着必须多次执行网络管理的权衡(即,从上面开始的整个“搜索网络、协商连接等”过程)。我建议先在一个频道上运行,但要记住多频道的问题。一旦您开始使用多频道功能,明智的做法是再次为网络管理提供频道子集(或仅一个),以简化搜索过程。

    我想我已经找到了答案

    • 为了查看来自不同来源的通道中的所有地址,我收到了所有可用的数据包,因为(如我的问题的编辑中所述),有效负载数据包包含管道地址。为了做到这一点,接收器必须被置于“混杂模式”。问题是nRF24L01不支持这一点

    • 这里介绍了一种使用nRF24L01进行“易出错”数据包嗅探的方法:

    • 支持“混杂模式”并因此允许包嗅探的接收器(或本例中的收发器)是esp8266


    或者您可以执行以下操作:

    尽管设备/节点地址被指定为5字节,即40位,但您可以只指定第一个字节。在这种情况下,剩余的4个字节成为有效负载的一部分


    然后,您只需听256个键(2^8),而不是2^40

    我相信我现在不知道如何正确地表达我的问题。我试图构建的是一个数据包嗅探器。我所需要的只是任何2.4ghz收发器的管道地址。到目前为止,我已经能够使用Node.js构建一个通道扫描器,这样我就可以在附近找到所有使用过的通道。但显然这是我能接受的nRF24L01的范围。我在下面贴了一个可能的答案。谢谢你的努力!基本上是好的,但是提到ESP8266有点误导——它不会接收这里讨论的那种传输,而是只接收更宽频带的wifi传输。