在这个Arduino教程中,我们将学习关于nRF24L01收发模块的一切,并使用两个nRF24L01收发模块在两个Arduino板之间进行无线通信。你可以观看下面的视频或阅读下面的书面教程。
概述
为了解释无线通信,我们将举两个例子,第一个例子是将一个简单的“Hello World”消息从一个Arduino发送到另一个,在第二个例子中,我们将有一个Arduino板之间的双向通信,使用第一个Arduino上的操纵杆控制第二个Arduino上的伺服电机,反之,使用第二个Arduino上的按钮控制第一个Arduino上的LED。
NRF24L01收发模块-如何工作betway
让我们仔细看看NRF24L01收发模块。它使用2.4 GHz频带,波特率从250kbps到2mbps。如果在开放空间使用,波特率较低,其范围可达100米。
该模块可以使用125个不同的通道,这使得在一个地方有125个独立工作的调制解调器网络成为可能。每个频道最多可以有6个地址,或者每个单元可以最多可同时与6台其他设备进行通信.
该模块在传输过程中功耗仅为12mA左右,甚至比单个LED还要低。这个模块的工作电压在1.9到3.6V之间,好在其他的引脚可以承受5V逻辑,所以不用任何逻辑电平转换器就可以轻松的连接到Arduino上。
其中三个引脚是用于SPI通信的,它们需要连接到Arduino的SPI引脚,但请注意,每个Arduino板有不同的SPI引脚。CSN和CE引脚可以连接到Arduino板上的任何数字引脚,用于设置模块处于待机模式或主动模式,以及传输模式和命令模式之间的切换。最后一个引脚是一个不需要使用的中断引脚。
NRF24L01模块有几个变体。最受欢迎的是带有机载天线的那种。这使模块更加紧凑,但另一方面,降低了传输距离约100米。
第二个变化,而不是车载天线,它有一个SMA连接器,我们可以连接一个鸭式天线,以获得更好的传输范围。
这里显示的第三种变体,除了duck天线外,它还有一个RFX2401C芯片,包括巴勒斯坦权力机构(功率放大器)和采用多次(低噪声放大器)。这放大了NRF24L01信号,使其在开阔空间的传输范围达到1000米。
NRF24L01模块引出线
这里详细介绍了NRF24L01引脚以及NRF24L01+PA/LNA模块。
这两个模块,NRF24L01和NRF24L01+ PA/LNA有相同的引脚,所以我们可以在我们的电路中以相同的方式连接它们。
线路图
下面是我们需要如何将NRF24L01模块连接到Arduino板。
正如我已经提到的,每个Arduino板有不同的SPI引脚,所以在连接模块到你的Arduino板时要记住这一点。
你可以从下面的链接获得这个Arduino教程所需的组件:
- NRF24L01收发器模块………亚马逊/Banggood/Aliexpress
- Arduino电路板 ....................................亚马逊/Banggood/Aliexpress
- 面包板和跳线............亚马逊/Banggood/Aliexpress
必威外围提钱披露:这些是附属链接。作为一个亚马逊助理,我从合格的购买中赚取。
Arduino和NRF24L01代码
一旦我们将NRF24L01模块连接到Arduino板,我们就可以为发射器和接收器制作代码了。
首先,我们需要下载并安装RF24图书馆这样编程就不那么困难了。
以下是无线通信的两个代码,下面是它们的说明。
发射机代码
/* * Arduino Wireless Communication Tutorial * Example 1 - Transmitter Code * * by Dejan Nedelkovski, www.bet188官方网站HowToMechatronics.com * * Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */ #include#include #include 接收代码
/**Arduino无线通信教程*示例1-接收器代码**,作者:Dejan Nedelkovski,www.HowToMechatronics.com**库:TMRh20/RF24,https://githbet188官方网站ub.com/tmrh20/RF24/ */#包括#包括 #包括 RF24无线电(7,8);//CE,CSN常量字节地址[6]=“00001”;void setup(){Serial.begin(9600);radio.begin();radio.openReadingPipe(0,地址);radio.setPALevel(RF24_PA_MIN);radio.startListening();}void loop(){if(radio.available()){char text[32]=“”;radio.read(&text,sizeof(text));Serial.println(text);} 说明:
因此,我们需要包含基本SPI和新安装的RF24库,并创建一个RF24对象。这里的两个参数是CSN和CE引脚。
RF24电台(7、8);/ / CE、CSN接下来,我们需要创建一个字节数组,它将表示地址,或所谓的管道,这两个模块将通过它进行通信。
Const字节地址[6]= "00001";我们可以将这个地址的值更改为任何5个字母的字符串,这样就可以选择要与哪个接收器对话,所以在我们的例子中,接收端和发送端都有相同的地址。
在设置部分中,我们需要初始化radio对象,并使用radio. openwritingpipe()函数设置我们将发送数据的接收器地址,即我们之前设置的5个字母字符串。
radio.openWritingPipe(地址);在另一端,在接收端,我们使用radio.setReadingPipe()函数设置相同的地址,通过这种方式,我们启用了两个模块之间的通信。
radio.openReadingPipe(0,地址);然后使用radio.setPALevel()函数设置功率放大器的电平,在本例中,我会将其设置为最小值,因为我的模块彼此非常接近。
radio.setPALevel (RF24_PA_MIN);注意,如果使用更高的电平,则建议在模块的GND和3.3V之间使用旁路电容,以便在运行时具有更稳定的电压。
接下来是radio.stopListening()函数,它将模块设置为发送器,另一方面是radio.startListening()函数,它将模块设置为接收器。
//在发射机radio.stopListening();//在Receiver radio.startListening();在传送器的循环部分,我们创建了一个字符数组,并将消息“Hello World”分配给该数组。我们将使用radio.write()函数将该消息发送给接收器。这里的第一个参数是我们想要发送的变量。
void loop(){const char text[]=“Hello World”;radio.write(&text,sizeof(text));delay(1000);}通过在变量名前使用" & ",我们实际上设置了一个变量的指示,该变量存储我们想要发送的数据,并使用第二个参数,我们设置了想要从该变量获取的字节数。在这种情况下,sizeof()函数获取字符串" text "的所有字节。在节目的最后,我们会增加1秒的延迟。
另一方面,在接收器的环路部分,使用radio.available()函数检查是否有数据要接收。如果这是真的,首先我们创建一个由32个元素组成的数组,称为“text”,我们将在其中保存传入的数据。
Void loop() {if (radio.available()) {char text[32] = "";收音机。读(之外,sizeof(文本));以(文本);}}使用radio.read()函数,我们读取数据并将其存储到“text”变量中。最后,我们只需在串行监视器上打印文本。因此,一旦我们上传了这两个程序,我们可以在接收器上运行串行监视器,我们会注意到“Hello World”信息每秒都会打印出来。
故障排除
值得注意的是电源噪声是人们在尝试与NRF24L01模块成功通信时遇到的最常见问题之一。通常,射频电路或射频信号对电源噪声很敏感。因此,在电源线上安装一个去耦电容器总是一个好主意。电容器可以是10uF到100uF之间的任意值。
另外一个常见的问题是Arduino板的3.3V引脚不能总是为NRF24L01模块提供足够的电源。因此,使用外部电源为模块供电也是一个好主意。
Arduino无线双向通信,两个NRF24L01模块
让我们看第二个示例,两个Arduino板之间的双向无线通信。以下是电路示意图:
你可以从下面的链接中获得这个例子所需的组件:
- NRF24L01收发器模块 ............亚马逊/Banggood/阿里巴巴全球速卖通
- Arduino董事会…………………………………。亚马逊/Banggood/阿里巴巴全球速卖通
- 操纵杆模块………………………………。亚马逊/Banggood/阿里巴巴全球速卖通
- 伺服电机……………………………………。亚马逊/Banggood/阿里巴巴全球速卖通
- 按钮……………………………………。。亚马逊/Banggood/阿里巴巴全球速卖通
- 领导 .........................................................亚马逊/Banggood/阿里巴巴全球速卖通
必威外围提钱披露:这些是附属链接。作为一个亚马逊助理,我从合格的购买中赚取。
nRF24L01源代码
这里是两个代码,下面是它们的描述。
发射机代码
/* * Arduino Wireless Communication Tutorial * Example 2 - Transmitter Code * * by Dejan Nedelkovski, www.bet188官方网站HowToMechatronics.com * * Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */ #include#include #include #define led 12 RF24 radio(7,8);// CE, CSN const byte addresses[][6] = {"00001", "00002"};boolean buttonState = 0;void setup() {pinMode(12, OUTPUT);radio.begin ();radio.openWritingPipe(地址[1]);/ / 00002电台。openReadingPipe(1、地址[0]);/ / 00001 radio.setPALevel (RF24_PA_MIN);} void loop() {delay(5); radio.stopListening(); int potValue = analogRead(A0); int angleValue = map(potValue, 0, 1023, 0, 180); radio.write(&angleValue, sizeof(angleValue)); delay(5); radio.startListening(); while (!radio.available()); radio.read(&buttonState, sizeof(buttonState)); if (buttonState == HIGH) { digitalWrite(led, HIGH); } else { digitalWrite(led, LOW); } } 接收代码
/* * Arduino Wireless Communication Tutorial * Example 2 - Receiver Code * * by Dejan Nedelkovski, www.bet188官方网站HowToMechatronics.com * * Library: TMRh20/RF24, https://github.com/tmrh20/RF24/ */ #include#include #include #include #define button 4 RF24 radio(7,8);// CE, CSN const byte addresses[][6] = {"00001", "00002"};伺服myServo;boolean buttonState = 0;void setup() {pinMode(button, INPUT);myServo.attach (5);radio.begin ();radio.openWritingPipe(地址[0]);/ / 00001电台。openReadingPipe(1、地址[1]); // 00002 radio.setPALevel(RF24_PA_MIN); } void loop() { delay(5); radio.startListening(); if ( radio.available()) { while (radio.available()) { int angleV = 0; radio.read(&angleV, sizeof(angleV)); myServo.write(angleV); } delay(5); radio.stopListening(); buttonState = digitalRead(button); radio.write(&buttonState, sizeof(buttonState)); } } 这里与前面示例的不同之处在于,我们需要为双向通信创建两个管道或地址。
常量字节地址[][6]={“00001”、“00002”};在设置部分,我们需要定义两个管道,并注意第一个Arduino的写入地址需要是第二个Arduino的读取地址,反之亦然,第一个Arduino的读取地址需要是第二个Arduino的写入地址。
//在发射机radio.openWritingPipe(地址[1]);/ / 00001电台。openReadingPipe(1、地址[0]);/ / 00002//在接收器处。openWritingPipe(地址[0]);//00002无线电。openReadingPipe(1,地址[1]);//00001在使用radio.stopListening()函数的循环部分中,我们将第一个Arduino设置为发射机,读取并将操纵杆的值从0映射到180,然后使用radio.write()函数将数据发送到接收机。
radio.stopListening ();int potValue = analogRead(A0);int angleValue = map(potValue, 0, 1023, 0, 180);收音机。写(&angleValue sizeof (angleValue));另一方面,我们使用radio.startListening()函数将第二个Arduino设置为接收器,并检查是否有可用数据。当有数据可用时,我们将读取它,将它保存到“angleV”变量,然后使用该值来旋转伺服电机。
radio.startListening ();if (radio.available()) {while (radio.available()) {int angleV = 0;收音机。读(&angleV sizeof (angleV));myServo.write (angleV);}接下来,在发送端,我们将第一个Arduino设置为接收端,用一个空的“while”循环等待第二个Arduino发送数据,这是按钮状态的数据,无论是否被按下。如果按下按钮,LED灯就会亮起来。这些过程不断重复,两个Arduino板都在不断发送和接收数据。
更多NRF24L01和Arduino示例
NRF24L01模块是Arduino爱好者的必备组件。我已经使用NRF24L01模块在许多Arduino项bet188me目.在这里我将列出我使用这些模块的所有项目。bet188me
- Arduino机器人车无线控制采用HC-05蓝牙,NRF24L01和HC-12收发模块
- Arduino无线气象站项目
- DIY Arduino RC发射机
- Arduino蚂蚁六足机器人
- DIY Arduino遥控气垫船
- Arduino Mecanum车轮机器人
- DIY Arduino RC接收器RC模型和Arduino项目bet188me
- Arduino RC飞机| 100%DIY
每个项目/教程都详细说明了如bet188me何使用NRF24L01模块,包括电路图,改进的代码实现更好的通信等等。
这就是本教程的全部内容,我希望你喜欢它并学到了一些新的东西。一如既往,请在下面的评论部分自由提问。
谢谢你分享这个非常有用的教程。你能帮我用6个电位器在一个方向上控制多个伺服器(我需要控制6个伺服器)的代码吗?
这应该不是问题,你只需要把这些电位器的值发送到另一个Arduino,并应用到伺服电机上。将使用相同的方法。
我真的非常感谢这个网站,非常感谢你
如果你使用uno R3板上的发射机和接收机,什么引脚是你使用的按钮和操纵杆,LED,和伺服。必须设置好才能理解它是如何工作的。betway
谢谢,
重要的是,您需要为NRF24L01模块使用Arduino板的SPI引脚,即引脚13-SCKI、12-MISO和11-MOSI。对于其他任何东西,您可以使用任何pin。
Nano audrino不按图运行,13按书面引脚连接运行…程序很好…感谢程序员
嗨,如何为特定的管道发送数据并从它得到答案。
主人有一个地址,如果发送数据给所有的奴隶,它是什么?
我不会有一个主机从两个从机获取数据。
你好,你知道为什么我的串行输出是" yyyyyy yyyyyy yyyyyy "吗?
可能是你的串口显示器的波特率,检查它是否与程序中设置的波特率匹配。
我能用转发器把射程扩大到200米吗?主从机转(从机/主从机)到其他从机再转回来?
有可能。
你好,你的电路图有问题吗?nrf2401的SCK不会去arduino nano的Pin 13。
嗨,德扬先生,
我已经用两个Arduino NANOs实现了这个项目。
最初它并没有工作,但在几个小时的检查后,我得到了一个非常重要的通知,并想与你所有的追随者分享它。为了使2个NANOs无线连接和通信,必须使用辅助SPI引脚而不是D11, D12和D13。
我终于让他们像做梦一样工作了。非常感谢您分享您可爱的项目。干杯
嗨,这是一个好的。
我们可以使用arduino nano, UNO。
谢谢,你可以使用任何Arduino。
如果uno用于变送器,Mega 50、51、52的替换引脚是什么?
谢谢
Arduino Uno SPI引脚:10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK)。
你的教程太棒了。我非常喜欢你展示它们的方式。非常清楚,非常有用。跟上,伙计!!
非常感谢。
嗨。很好的解释。问吗?如果连续移动操纵杆,系统会是双工的吗?在这种情况下,程序将一直在while()函数中。
谢谢。这要视情况而定,但也可能行得通。你可以在介绍中注意到,我可以在移动操纵杆的同时点亮LED。
嗨,德扬
我已经成功与mega 2560和uno进行了沟通。但我的问题是这种联系不能持续很长时间Resetting on both boards Is also not working…When I disconnect two boards and connect them to power supply again its working for few seconds. But working time Is different in each case..... .当我断开两块板并连接到电源时,它工作了几秒钟你能帮我一下吗
问题可能在于电力。尽量使用更稳定的外部电源。这些无线模块在传输数据时可能会耗电,所以可能会失去连接。也可以尝试使用去耦电容器。
大家好!
首先,我要祝贺德扬,因为他的全套芭蕾舞像斯比迪一样精彩,在我面前说吧!
第二,在使用操纵杆两到三次后,我发现了同样的功能故障问题,似乎这是使用非原装uno的正当原因。
当我把它换成真正的Arduino uno时,问题就解决了……
我通过改变while (!radio.available())解决了这个问题;如果(! radio.available ());
很好,图坦卡蒙
太好了,谢谢!
非常好的教程,谢谢。
你在第二个例子中使用了什么电阻?
谢谢
谢谢。第二个例子中使用的两个电阻是220欧姆。
大家好!
我能够使这个项目工作。然而,我面临一个问题。每当我移动两块Arduino板(每个板上都连接有NRF24L01模块)时,信号就会丢失。就好像模块只能在不到一米的范围内工作?除非我错过了教程中的内容。
提前感谢您的回复。
尝试使用去耦电容器或使用外部电源。
谢谢你的指导。
您对如何使用笔记本电脑而不是第二台arduino建立连接和接收数据有何想法?
谢谢
您可以使用蓝牙模块来实现这一目的。我已经有一个教程如何使用蓝牙模块。
你好,德扬Nedelkovski
我读了“Arduino无线通信- NRF24L01教程”。它对初学者非常有用。由于很多。
我的问题是,如何找到“nRF24L01.h”文件?
你有nRF24L01.h的链接吗?
谢谢。
本文中已经包含了该链接。你可以在“Arduino代码”部分找到它。
你好!很棒的视频!谢谢上传,我有一个问题,我的模块不能接收任何数据(我使用arduino nano作为接收,uno作为接收)。我检查了线路很多次,我尝试了100种方法让它工作,但我还没有成功。
这个库是否有机会检查arduino是否可以与rf24通信?我在RF24.h搜索,我发现一个bool ChipIsConnected(),但它不返回任何东西。
尝试在3.3V和GND引脚上使用电容。代码库和我在这个项目中使用的代码是100%的工作。
我也面临同样的问题,你有什么进展吗?
我尝试过使用10微法拉电容,但没有任何改变。我仍然没有收到任何东西。
可能是两个模块之间的距离…由于(PA_MIN)的原因,最大距离几乎为10 cm。。试着让它们彼此靠近,或者用“低”代替“低”。如果连接了电容器,只需在两个草图中删除该线即可。
祝你好运
你好,非常感谢你的例子,但我有一个小问题,也许关于射频信号。我使用uno r3作为收发器,nano作为接收器,当我上传代码时,数据正常发送和接收,但30秒后它停止发送和接收数据,你能帮我吗
问题可能出在权力上。尝试使用电容器稳定电源或尝试使用外部电源。
您的示例非常有用,但我正在使用getting started示例与nrf24L01通信,但我接收的是垃圾值,而不是hello world。我能做什么?
确保它们以相同的波特率工作,并且串行监视器设置为相同的波特率。
你好,很棒的教程,谢谢!有没有可能从另一个来源进行传输,比如我自己的带有2.4GHz天线的传感器,传输模拟频率。然后只用一个Arduino和一个nrf24I01来接收和配置数据?或者这个模块只与另一个nrf24I01通信?
不,他们只能互相交流。
感谢这样一个伟大的教程,我使用这些远程版本得到大约400米,使用外部电源创建一个远程门铃与回复功能。
非常感谢您的努力,请问如果我使用的是HC 05或HC 06蓝牙模块,该怎么做?我正在做一辆钢筋混凝土汽车,弄清楚如何驱动电机,但我有一个七轴在前面准备转向,我怎么能编码它?
查看我详细的Arduino蓝牙教程HC-05蓝牙模块,你可能会找到一些有用的信息。
我们可以在一台PC上做两个arduino之间的“Hello World”通信吗?意味着它只有一个IDE。我们可以吗?
是的,你可以做到。你只需要启动IDE两次,这样你就会有两个不同的IDE,你可以选择Arduino连接的不同端口。
我试图使nRF24l01工作,但接收器代码只是显示一些随机符号,即使串行监视器波特率与代码相同。你能告诉我可能有什么问题吗。
谢谢你!
尽量使用去耦电容,并尽量将发射机和接收机放置在一定距离之外,至少1m。
优秀的教程。
如何使用NRf24L01与两个以上的Arduinos通信。我正在做一个项目,每个arduinos都有液晶显示器,其中没有主从概念。例如Arduino A向Arduino B和C发送消息,并在B和C LCD上显示该消息。然后B或C回复A,A在LCD上显示消息。
该方案基于多智能体系统的共识控制,每个智能体负责控制自己的资源。
谢谢查看我的其他教程,了解如何使用RF24Network库创建无线网络。
你好,
谢谢你的指导。它为设备之间的无线通信提供了另一种选择。
我可以知道如何增加距离范围,设备是否需要直接的视线,或者即使其间有障碍物,是否可以进行通信?
非常感谢。
您可以通过使用PA LNA SMA天线增加范围。当然,即使有像墙这样的障碍,交流也是可能的,但那样范围就会缩小。
谢谢,我已经尝试使用RF433MHz模块进行无线连接。但当我试图阻挡他们的视线时。它无法接收发射机的信号。
我有一个后续问题。如果我错了,请纠正我,我使用的是Arduino Pro Mini,SPI引脚将是;MOSI(11)、MISO(12)、SCK(13)。我说得对吗?
非常感谢您的工作,以一种简单和全面的方式向每个人延伸基本原则。再次,我使用了一个伟大的教程,第一步,以一个新的主题深入和实现我自己的想法和想法。我真的可以推荐你的出版物作为“如何”的一个快速介绍。
让球继续滚…
非常感谢你。听到这个我很高兴!
大家好,感谢收看本期视频。我正面临一个不寻常的问题。这里是我正在工作的一部分接收器代码。“Available”字符串将被打印,但是在文本变量中没有内容。只是空白。请帮助
如果(radio.available ()) {
以“可用”);
Char text[32] = " ";
收音机。读(之外,sizeof(文本));
以(文本);}
嘿,确保你在模块VCC和GND使用了一个电容器,并确保你发送的数据类型与你接收的数据类型相同。还要尽量将两个模块之间的距离保持至少一米。
你好
第一个例子,写“Hello World”没有问题。
但是第二个例子不适合我。我不知道原因。
我检查了我的led,伺服和操纵杆的接线,但没有连接错误,并尝试了多次。但是没有接收和发送。我的射频模块非常接近彼此。当我上传代码到UNO和MEGA伺服移动在代码上传结束。但是当我给操纵杆和按钮上脓的时候,什么也没发生。
有什么我需要考虑的吗?
嘿,电容怎么样,试着在模块VCC和GND附近使用电容,并在两个模块之间保持一点距离。
谢谢你的回复。问题是其中一个nrf24l01模块没有正常工作(它只接收,不发送)。我花了很长时间才发现问题。我使用另一个nrf24l01和它的工作与我们的问题。
嗨,这正是我DIY RC飞机所需要的。但我不能让这和2个arduino unos一起工作。板是否重要,我查找了Uno板的相应ICSP引脚,我不知道为什么它不工作。如果您能给我一个有帮助的答复,我将不胜感激,谢谢。
董事会不重要。大多数情况下,问题出在电力供应上。确保你有良好的3.3V电源,甚至可能是外部电源,并使用旁路电容稳定它。在沟通时,也要尽量使两个模块之间保持一定的距离。
祝贺我的朋友,你的视频和解释帮助和激励了大量的学生和专业人士,感谢你分享你的知识,我们从心底感谢你。
谢谢,听你这么说我很高兴!
非常感谢。我刚刚用2个UNO板做了这个项目,解释得很好....
太好了,很高兴听到这个!
谢谢你的指导。我很快就能把它安装好并运行起来!虽然我有一个问题,所以对于发射机代码,我也使用了mega2560,但我试着用nano来代替,每当我把通常在mega2560的50、51和52引脚上的引脚放在nano的13、12和11引脚上,即使只是mega2560的13、12和11引脚,它也不起作用。出于某种原因,它们只在变送器的针脚50、51和52上工作,我能解决这个问题吗?
Nano的SPI引脚为SCK-13、MISO-12和MOSI-11。因此,如果连接正确,它的工作原理应该与Mega相同。确保在模块旁边使用电容器稳定电源。
我按你说的换了别针,成功了。再次感谢!
嗨
如果由于某种原因(比如使用Arduino电机屏蔽)数字引脚可能被阻塞。
SIP引脚在ICSP头是可用的,可以在那里使用,但我可以使用模拟引脚像A0和A1为这行:
RF24电台(7、8);/ / CE、CSN
感谢伟大的教程!我在这类项目上花了很多时间,但这是我第一次玩Arduino。bet188me一开始我不能让它工作,因为一个真正愚蠢的错误,我可能可以帮助其他人避免。我还以为你的Arduino跟我的Pro Mini Uno有一样的大头针呢。不是这样的——我的别针在板的另一边。当我意识到这一点,并通过pin码而不是原理图连接电线时,一切都很顺利。
嘿,谢谢你的意见!
嗨,我能做到这一点,但不是双向通信,我想能够控制两个伺服操纵杆。我如何修改代码和pin连接才能做到这一点?
嘿,拜托,我的nrf24L01很少工作,有时它工作,有时它工作!!你能给我建议任何解决方案吗?我是这个事情的新手,请......,我也连接了一个47uf电容到模块的电源,但它不工作,每次!!!!!!!!
那电源呢,试着用外部电源。Arduino的3.3V电源有时不够给模块供电。尝试为模块使用不同的专用电源。在这种情况下,请确保将电源的接地管脚与Arduino的接地管脚连接,以便正常工作。
你好,德扬。很棒的教程…谢谢!我在Arduino方面没有任何经验,但我知道这对机器人原型制作有好处,我想我会深入研究,看看它是否适用于我的用例。我希望你能确认我的假设是正确的:
1.草图可以通过标准USB接口打开与计算机的连接(串行?),并且在草图期间,此单一连接可以保持打开状态;
2.此连接在计算机上共享,以便计算机上运行的任何应用程序(读/写)都可以访问该连接,例如Java、. net、GoLang等内置的应用程序;
3.Sketch可以从连接中读取并向NRF24L01模块发送命令,以模拟RC设备的发射机;
我是不是在幻想一些现在不可能或者根本不存在的东西?
提前谢谢。
嘿,谢谢!你的假设很好也很正确。
哇!很棒的教程。我一直在与Arduino的工作,现在和您的网站已经非常有用。我确实有一个关于NRF24L01和ESP8266的问题。ESP8266能像NRF24L01一样工作吗?一个朋友给了我一对夫妇,让我在一个项目中玩,而我以前从未真正使用过他们?
谢谢,我很高兴你觉得它们有用。老实说,我没有太多的ESP8266模块的经验,所以我现在不能给你任何正确的答案。干杯
我试了好几次,但都无法从ardiuno mega获得任何值…。。但它在uno上工作…我想要mega作为接收器…检查连接,一切都好,…有人告诉我mega上发生了什么吗??????
这有点奇怪。也许你的超级董事会出了问题。确保您在Arduino Mega上使用了正确的SPI引脚。此外,正如我一直建议的,在模块的3.3v输入引脚上使用去耦电容器。
刚刚看到这个问题,可能已经太晚了,但可能对其他Mega用户有帮助:在Mega,你需要设置数字引脚53的输出和低,即使使用任何其他引脚作为你的CE信号。否则SPI通信将无法正常工作。
伟大的教程! !事实上,我很喜欢你的想法和文章。
在这里,我提到了一个小问题:
给定的示例在开始时没有运行。我下载了最新的rf24库,但仍然没有发送,没有得到。然后,我代替:
从:>常量字节地址[6]= " 00001 ";
To:> const byte address[5] = " 00001 ";
它们都像魅力一样奔跑。不知道是我的错,还是上次图书馆有新东西。这是我的观察,Arduino IDE是最后一个。1.8.something
干杯
非常有用的教程,非常感谢。问:当数据没有变化时停止传输数据有意义吗?在接收端,我有一个对改变数据(操纵杆位置)做出反应的循环。所以,只要把操纵杆往左推,操纵杆的值其实是不变的,为什么要不断发送它的位置呢?当操纵杆没有被推动时,它处于零位置,我们仍然会发送这个。这对接收机来说是必要的,还是可以停止,例如通过比较新旧值和跳过无线电。写(操纵杆,sizeof(操纵杆))。
好吧,我想你可以这么做。这取决于你想用它达到什么目的,比如省电之类的。在这种情况下,它是有用的。
大家好,感谢教程,
我想知道您选择引脚7和8 CE和CSN是否有原因。比如说9和10,为什么不呢?
谢谢
你可以用其他的数字密码。
嗨
谢谢你的指导
我可以连接CE和CSN到非PWM引脚,如D7和D8?
我想使用PWM引脚更多的选项
嘿,是的,你可以使用非PWM引脚的CE和CSN。
亲爱的德扬:,
感谢您优秀的指导!我希望你们继续分享你们的知识!
向你问好,久里
谢谢你的指导!我有一个关于收音机的问题。您声明将其设置为最小级别,因为收发器彼此靠近。所以我的问题是,setPALevel是否作为收发器发送频率范围的决定因素?或者,为了更好地说明,该函数是否允许一个人确定您需要两个收发器的距离以允许通信?
PA:表示功率放大器,对应模块的输出电平。设置的越高,射程越好,但这也意味着它将使用更多的能量。因此,如果功耗对您的项目来说是一个重要的因素,您应该将其保持在最小值,但当然,它也取决于您想要达到的范围。
先生,非常感谢您的指导。你有天赋,我很感激能与人分享。我使用两个纳米,一个接收,一个发射,来监控几个参数:电流,累积电荷,温度和太阳能供电的电池电压,这是很难达到的,可以说几乎不可能达到。
在努力使用字符串进行数据传输之后,我决定使用一个附加的偏移量来识别数据读取,虽然这是一次失败的尝试。e、 g.10000+AD计数(或伏特),因此101024将是通道1;200256将是第2频道,依此类推。那么解码就很容易了。老派,是的;但它似乎在起作用,这一评论可能会帮助其他人。再次,非常感谢你。
乔恩
太棒了! !在做了很多例子之后,这个方法终于奏效了。臭名昭著的NRF模块让我一直在猜测我的硬件/电源供应是否有任何问题。看来我没有。谢谢。总是很酷的项目!!bet188me
感谢这个很棒的教程——你让编程看起来很简单。
在我测试双向交流的过程中,我遇到了一个我无法理解的小问题。我改变了接收程序,在串行监视器中打印接收到的值。但只有当我打开发射机程序中的串行监视器时,发射才开始。当传输已经开始,我可以断开USB,它继续运行。
安装:2纳米与nRF插件。外部3.3 V,外部12V。电容器安装在每个nRF板上。所有的共同点。
我不知道。
更多测试/故障排除-更多信息。
只是想澄清一下——两个nano都在同一台计算机上的两个不同COM端口上运行。
看来如果我在断开USB连接的情况下启动发射机nano,问题就会消失。然后它就开始直接发射。经验教训:也许我没有完全理解COM端口。如果有人有什么解释,我很乐意去读。
嗨,谢谢你的指导,正是我所需要的!也要感谢其他评论员,他们帮助解释了Nano所需的引脚。我在3.3v和gnd之间使用10uf去耦电容器。
我有个问题;当我的电脑从Nano usb上拔下时,电源就会掉下来。板载LED变暗,程序不再起作用。Nano是否无法提供接收器太多的能量?你有什么建议吗?
我不太了解你。如何通过USB和3,3V接收器为Nano供电?在某些情况下,Nano 3.3v可能无法为接收器提供足够的电源。你可以使用外部电源。但是,通常电源为5V,因此需要一个电压调节器将5V转换为3.3V。您可以查看RC发射机项目,了解我是如何为NRF24L01模块供电的。在这种情况下,通过外部电源(电池)的供电,它将进入AMS1117 3.3v电压调节器,该电压调节器实际为接收机供电。