对于我们现代世界中的普通人来说,创建一个共享人员和机密数据的本地网络几乎已成为不可能。这主要是因为所有常见的聊天方法(如Whatsapp,Facebook,环聊)以及几乎所有内容都涉及互联网连接。
如果可以不借助互联网就可以共享数据呢?
如果没有网包或Internet连接就可以与家中或工作场所中的人进行交流,那将有多酷?
如果我们可以用自己的想象力定制聊天屏幕怎么办?
使用微控制器和无线传输介质,所有这些都是可能的。这个使用nRF24L01项目的Arduino聊天室将指导您在本地设置低成本的聊天室。
因此,让我们开始看看它是如何工作的。
工作说明:
基本上,要使此功能生效,我们将需要一对Arduino板和廉价的无线模块。我们将在这里使用的无线模块是nRF24L01。选择这些模块的原因是,这些模块是Zigbee的后继产品,并且易于建立连接。这些模块还可以在2.4 GHz(ISM频段)上工作,并具有跳频扩展频谱和冲击突发选项,这使我们对干扰问题感到轻松。
我们的Arduino和NRF24L01连接在一起以建立串行通信,以便彼此通信。 NRF24L01是半双工收发器模块,因此它们可以发送和接收数据。数据是从用户那里收集并传输的,该数据可以被任何(或一个特定)模块接收并显示在其屏幕上。
但!!!!!我们要使用Arduino的Debug屏幕聊天吗?当然不是。我们将在“处理”的帮助下构建和自定义自己的聊天屏幕。处理是一款能够使用UART与Arduino通信的软件。我们将使用处理语言创建一个.exe文件,该文件可以在具有Java Runtime的任何计算机上运行。为了聊天,我们只需要插入我们的Arduino并打开.exe文件,然后Booooom!我们进入了自己的私有化完全免费的聊天室。
该项目仅限于在聊天室中添加两个成员,但是nRF24L01具有6条管道,因此我们的聊天室中最多可以有6个成员。根据nRF24L01模块的不同,此字符室可以在100米范围内工作。
因此,我们去购物吧!!!
所需组件:
- Arduino(任何版本或型号)-2
- nRF24L01 +无线收发器模块-2个
- 3.3稳压器-2号 (不是强制性的)
- 连接线
- 利息(洛尔兹)
电路原理图:
带有nRF24L01的Arduino Mega:
具有nRF24L01的Arduino Nano:
我们的项目不涉及任何复杂的连接。我已经使用了Arduino Mega和Arduino Nano,它们与nRF24L01的连接如上所示。您可以使用任何Arduino模型。
使用nRF24L01 +无线收发器模块:
但是,为了使nRF24L01不受噪声影响,我们可能需要考虑以下事项。我已经在nRF24L01 +上进行了很长时间的研究,并且了解到以下几点可以帮助您避免碰到墙壁。
1.市场上大多数nRF24L01 +模块都是假的。我们在Ebay和Amazon上可以找到的最便宜的是最差的(不用担心,只需进行一些微调即可使它们工作)
2.主要问题是电源而不是您的代码。大部分在线代码都可以正常运行,我自己有一个经过我亲自测试的工作代码,请告诉我您是否需要它们。
3.注意,因为打印为NRF24L01 +的模块实际上是Si24Ri(是中国产品)。
4.克隆和伪造模块将消耗更多功率,因此不要开发基于nRF24L01 +数据表的电源电路,因为Si24Ri的电流消耗约为250mA。
5.当心电压纹波和电流浪涌,这些模块非常敏感,很容易烧毁。(;-(到目前为止炸了2个模块)
6.在模块的Vcc和Gnd两端增加一个耦合电容器(10uF和0.1uF)有助于使电源纯净,这适用于大多数模块。
不过,如果您在评论部分报告有问题或请仔细阅读。
编程Arduino:
对于CE和CS引脚的更改,用于Arduino Nano和Mega的程序将相似。我将通过将程序分成小段来对其进行解释。
由于Arduino和nRF24L01通过SPI通信,因此我们需要SPI库。我们还包括了Maniacbug RF24库,以使我们的RF模块正常工作。从这里下载文件,然后将它们添加到您的IDE中。
#包括
我们的NRF模块分别连接到CE和CS的引脚8和10。
RF24 myRadio(8,10);
我们创建一个称为 package 的结构化数据 包 。可变 文本 将用于在空中传输数据。
结构包{char text; //文本广播}; typedef struct package封装;包装数据;
在 void setup() 函数中,我们将波特率初始化为9600,并将模块设置为115,且具有最低功耗和250KBPS的速度。您稍后可以随意修改这些值。
void setup(){Serial.begin(9600); 延迟(1000); //Serial.print("Setup Initialized“); myRadio.begin(); myRadio.setChannel(115); // WIFI上方的115频段表示myRadio.setPALevel(RF24_PA_MIN); // MIN低功耗myRadio.setDataRate(RF24_250KBPS); //最低速度}
如果通过串行缓冲区接收到数据,则模块将处于发送模式,否则它将处于接收器模式,以寻找空中数据。来自用户的数据存储在char Array中,并发送到 WriteData() 进行传输。
void loop(){while(Serial.available()> 0)//从用户获取值{val = Serial.peek(); if(index <19)//比数组小1 {inChar = Serial.read(); //读取字符inData = inChar; //将其存储为index ++; //在下一个位置递增inData ='\ 0'; //如果为(val =='#'){strcpy(data.text,inData); WriteData(); //将模块置于发送模式,同时(index!= 0){inData =''; 指数 -; }}} ReadData(); //放入模块接收模式}
void WriteData() 函数将数据写入0xF0F0F0F0AA地址,该地址用作其他模块上的写入管道。
void WriteData(){myRadio.stopListening(); //停止接收并开始发送myRadio.openWritingPipe(0xF0F0F0F066); //在此40位地址上发送数据myRadio.write(&data,sizeof(data)); 延迟(300); }
void ReadData() 函数将数据写入0xF0F0F0F066该地址,该地址用作其他模块上的读取管道。
void ReadData(){myRadio.openReadingPipe(1,0xF0F0F0F0AA); //读取哪个管道,40位地址myRadio.startListening(); //如果((myRadio.available()){while(myRadio.available()){myRadio.read(&data,sizeof(data)); } Serial.println(data.text); }}
就是这样,我们的编程部分结束了。如果您在这里看不懂什么,请检查下面的“代码”部分提供的两个Arduino程序,我添加了注释行以更好地解释事情。
加工程序:
“处理”是开放源代码软件,供艺术家用于图形设计。该软件用于开发软件和Android应用程序。它很容易开发,并且非常类似于Android Development IDE。因此,我简化了解释。
这两个聊天屏幕的处理代码如下:
- 聊天屏幕1处理代码
- 聊天屏幕2的处理代码
右键单击它们,然后单击“将链接另存为..”以下载它们,并在设置Arduino之后在计算机中打开它们。您需要安装“处理”软件来打开这些*.pde文件,然后“运行”它们来打开聊天框。评论部分打开以供查询。发送器和接收器模块的处理草图相同。
在下面的代码部分中, “ port = new Serial(this,Serial.list(),9600); //以波特率9600读取第四个端口” 很重要,因为它决定了从哪个端口发送数据。
void setup(){size(510,500); port =新的Serial(this,Serial.list(),9600); //读取第9个波特率为9600的波特率println(Serial.list()); 背景(0); }
在这里,我从Arduino的第4个端口读取了数据。
例如,如果您有COM COM COM COM COM
然后上面的代码将从COM读取数据。
测试:
现在,既然我们的处理和Arduino草图已准备就绪,只需将程序上传到Arduino,然后将其插入笔记本电脑即可。打开您的Processing草图并开始键入,然后按Enter键,您的消息将传输到另一个Arduino,该Arduino将在连接到另一台计算机的另一个Processing应用程序上显示接收到的文本。进一步检查下面的视频以进行完整演示。
因此,使用便宜的Arduino聊天室,您可以在不连接互联网的情况下与您的朋友和家人聊天。