随着无线
通信的普及,我们身边的产品貌似都慢慢变成了无线的,灯光系统、耳机、麦克风等等,那么如何让Arduino之间的通信也摆脱数据线呢?这个系列小编就带大家看看Arduino有哪些常用的无线通信方案以及它们的优缺点。
433MHz RF无线射频收发模块
首先介绍的就是最常用的433MHz RF无线射频收发模块,RF 433MHz模块是以它工作的无线频段命名的,433MHz频段属于国内免许可的ISM(工业、科学和医学)开放频段,使用是不需要向当地的无线电管理申请授权的。因此,使用这个频段交流的设备模块也是五花八门。
这种RF 433MHz模块其实包含发射、接收两个模块。一般售价只有几块钱,成本低廉,体积小巧,传输距离在几米到上千米不等,功耗小且绕射能力较强,所以应用非常广泛,深受广大
电子爱好者的喜爱,像51、
STM32、Arduino、ESP8266/32都可以配合使用。
如何用Arduino控制
闲话不多说,我们直接实践。接下去我们就演示一下Arduino配合RF 433MHz收发模块实现无线通信。要求是这样的:一个Arduino
开发板连接433MHz的发射模块,向另一块连接接收模块的Arduino开发板发送“Hello World”消息。
实验材料
2块Arduino开发板
RF 433MHz发射模块
RF 433MHz接收模块
面包板
跳线若干
电路连接
根据下图我们分别连接好两块Arduino和RF 433MHz收发模块。
发射模块只需要连接3个针脚,除了VCC和GND,我们需要将DATA连接到其中一块Arduino的D12针脚。
接收端也只需要三根连线,RF 433MHz接收模块的VCC连接5V,GND接地,两个DATA针脚任意一个连接另一块Arduino的D11针脚。
安装依赖库
要使用RF 433MHz模块,我们还需要给Arduino IDE安装第三方的依赖库,我们使用的是RadioHead。我们需要下载下面的压缩包,然后解压放到Arduino的库文件夹里。
上传代码
我们分别把下述的发送端和接收段代码烧录到对应的两块Arduino板里。
发送端代码:
接收端代码:
接收端要注意的是你需要提供收到信息的长度,比如示例中是Hello World带空格标点符号一共11位的长度,如果是其他消息,你需要根据消息长度创建数组。
如果一切正常,你在接收端利用Arduino IDE的串口监视器就可以看见接收到的信息了。
增强信号
如果不安装天线,RF 433MHz收发模块的无线信号传输距离大概只有几米,特别在有障碍物(比如墙壁)密集的区域甚至更低。我们可以通过给发射端和接收端都添加天线的方式增强射频信号,从而让传输距离增大到几十米甚至几百米。
信号天线并不用过于复杂,你可以买专门的绕圈天线,或者自己用铜丝简易地做一下就可以。天线的直径并不重要,重要的是天线的长度。最有效的天线长度是跟射频的波长一致,但出于实际考虑,一般我们会用二分之一、或者四分之一的波长作为天线长度。
根据波长的计算公式433MHz射频的波长 λ=c/v=光速/433MHz=0.6924米左右。69.24cm长的天线显然有点太长了,我们取四分之一长度就是17cm左右就可以了。
RF 433MHz无线模块的限制
虽然RF 433MHz模块价格便宜,使用方便,但它的缺点也很明显。因为433MHz属于开放频段,使用这个频段的信号就很多,容易受到干扰。还有由于RF 433MHz无线收发模块使用的是ASK(Amplitude Shift Keying,幅移键控)调制方式,虽然简单但抗噪声能力弱,信号也没有经过特殊加密。
所以上述示列中,433MHz是单向通信的,即信号只能从发射端传给接收端。那有人会问,那我再加一对发射模块和接收模块,不就可以实现双向通信了?实际上,可以这么做,但由于会互相干扰,两对433MHz不能同时工作除非在软硬件能实现分时操作或者其他排除干扰的办法。
原作者:小B 爱上Arduino