首先我也不是什么大神,也只是一个刚毕业不久的菜鸟而已,有那里说的不对,大神们可以指出。
一次无意的发现了这个有趣的东西,应为之前我也使用过nrf24l01开发过一款遥控主要产品,所以我对这个东西特别感兴趣,特别想了解其中的原理,因为在我使用的过程中没有发现nrf24l01这款无线模块有RSSI(信号强度)这个功能,这就让我更加好奇了。它是怎么检测频道的占用和信号的强度。我疯狂的寻找nrf24l01频谱仪的源程序,找了好久发现有挺多这样的帖子,都是arduino的程序,而且我一直没有找到源程序,有一些找到打不开。
后来通过( http://www.moz8.com/forum.php?mo ... 2871&highlight=2.4G)
这个帖子找到了(http://singlechannellersreunited.co.uk/phpbb3/viewtopic.php?f=9&t=721)
歪国朋友的帖子,下载到源程序,可惜是LCD 1602显示的,不是网上大部分的OLED屏幕,后面再经过一番折腾,终于找到了OLED版本的NRF24L01的频谱仪了。首先先上传我找到的两份源程序,稍微修改了一下,可以正常编译通过。
分析源程序之前我觉得很有必要先,再次看一下nrf24l01+的文档,可是找了好久都没找到中文版的nrf24l01+的文档,一般中文版都是nrf24l01的文档。哎,只能怪自己英文没学好。最终还是让我找到一个大神的博客是分析nrf24l01+的,写的挺不错的
这里分享给大家:http://gashero.iteye.com/blog/2333336 我认认真真的看来一遍。
发现只有一个寄存器是有关的 Received Power Detector=RPD,地址是0x09,其bit0指出接收功率是否低于-64dBm。如果接收功率低于-64dBm,RDP=0。再去分析程序,发现程序也就是通过这个寄存器来判断的。而通过使用发现,OLED屏幕显示条状的高度,其实只是该频道的占用量而已,而不是信号强度。当打开这个频谱仪,在通过大量使用路由器wifi的数据,会发现一部分频道的占用量会爆满。所以这个只能粗略的检测改频道的占用量。而不是检测信号强度。
程序的分析:通过配置nrf24l01模块为接收模式,然后按顺序切换频道,延时一段时间后读取RDP这个寄存器的值为1还是0,当为1的时候增加数组对应频道的占用量的值,当为0时减小数组对应频道的占用量的值,然后扫描一段时间后,再通过这个数组的值,来显示OLED对应频道的条状高度。通过直至循环。实现初略观察到该频道的占用情况。
后来通过我以前使用的nrf24l01的程序稍微修改,在stm32 平台上实现了和arduino平台一样的频谱仪功能,只是我没有把OLED显示也移植过来,只是通过串口检测了。
暂时不打算移植OLED显示,不打算折腾下去了。因为自己还有其他小东西需要制作。所以留着以后有空再折腾吧。
一次无意的发现了这个有趣的东西,应为之前我也使用过nrf24l01开发过一款遥控主要产品,所以我对这个东西特别感兴趣,特别想了解其中的原理,因为在我使用的过程中没有发现nrf24l01这款无线模块有RSSI(信号强度)这个功能,这就让我更加好奇了。它是怎么检测频道的占用和信号的强度。我疯狂的寻找nrf24l01频谱仪的源程序,找了好久发现有挺多这样的帖子,都是arduino的程序,而且我一直没有找到源程序,有一些找到打不开。
后来通过( http://www.moz8.com/forum.php?mo ... 2871&highlight=2.4G)
这个帖子找到了(http://singlechannellersreunited.co.uk/phpbb3/viewtopic.php?f=9&t=721)
歪国朋友的帖子,下载到源程序,可惜是LCD 1602显示的,不是网上大部分的OLED屏幕,后面再经过一番折腾,终于找到了OLED版本的NRF24L01的频谱仪了。首先先上传我找到的两份源程序,稍微修改了一下,可以正常编译通过。
分析源程序之前我觉得很有必要先,再次看一下nrf24l01+的文档,可是找了好久都没找到中文版的nrf24l01+的文档,一般中文版都是nrf24l01的文档。哎,只能怪自己英文没学好。最终还是让我找到一个大神的博客是分析nrf24l01+的,写的挺不错的
这里分享给大家:http://gashero.iteye.com/blog/2333336 我认认真真的看来一遍。
发现只有一个寄存器是有关的 Received Power Detector=RPD,地址是0x09,其bit0指出接收功率是否低于-64dBm。如果接收功率低于-64dBm,RDP=0。再去分析程序,发现程序也就是通过这个寄存器来判断的。而通过使用发现,OLED屏幕显示条状的高度,其实只是该频道的占用量而已,而不是信号强度。当打开这个频谱仪,在通过大量使用路由器wifi的数据,会发现一部分频道的占用量会爆满。所以这个只能粗略的检测改频道的占用量。而不是检测信号强度。
程序的分析:通过配置nrf24l01模块为接收模式,然后按顺序切换频道,延时一段时间后读取RDP这个寄存器的值为1还是0,当为1的时候增加数组对应频道的占用量的值,当为0时减小数组对应频道的占用量的值,然后扫描一段时间后,再通过这个数组的值,来显示OLED对应频道的条状高度。通过直至循环。实现初略观察到该频道的占用情况。
后来通过我以前使用的nrf24l01的程序稍微修改,在stm32 平台上实现了和arduino平台一样的频谱仪功能,只是我没有把OLED显示也移植过来,只是通过串口检测了。
暂时不打算移植OLED显示,不打算折腾下去了。因为自己还有其他小东西需要制作。所以留着以后有空再折腾吧。
在这里把我折腾心德记录一下,因为刚发现这个东西的时候,那个心情是无比的激动,通过深入的了解,也学习到了一些东西。还是不枉折腾的,生命在于折腾嘛!
附件下载地址:http://download.csdn.net/download/jgagdwp/10231933