概述
设计人员使用许多无线通信系统,如蓝牙低功耗(BLE 4.0)、Zigbee、ESP8266 Wi-Fi模块、433MHz射频模块、Lora、nRF等。传输介质的选择取决于它所使用的应用类型。其中一种流行的局地网络通信无线通信是nRF24L01。这些模块工作在2.4GHz(ISM频段),波特率从250Kbps到2Mbps,这在许多国家是合法的,可用于工业和医疗应用。通过适当的天线,这些模块可以在它们之间发送和接收长达100米的信号。
在本篇文章中,我们将使用nRF24L01-2.4GHz RF收发器模块与Arduino UNO和Raspberry Pi建立无线通信。 Raspberry pi将充当发射器,Arduino Uno将监听Raspberry Pi,并使用nRF24L01在16x2 LCD上打印Raspberry Pi发送的消息。 nRF24L01还具有内置BLE功能,还可以使用BLE进行无线通信。
本文分为两个部分。第一部分将包括nRF24L01与Arduino进行连接作为接收器,第二部分将包括nRF24L01与Raspberry Pi进行连接作为发送器。
nRF24L01射频模块
nRF24L01模块是收发器模块,这意味着每个模块都可以发送和接收数据,但由于它们是半双工的,因此它们可以一次发送或接收数据。该模块使用Nordic半导体的通用nRF24L01,负责数据的传输和接收。 IC使用SPI协议进行通信,因此可以轻松与任何微控制器连接。使用Arduino可以轻松实现,因为库很容易获得。标准nRF24L01模块的引脚排列如下所示
nRF24L01-RF-Module.png (48.95 KB, 下载次数: 17)
2019-8-6 08:03 上传
该模块工作电压为1.9V至3.6V(通常为3.3V),在正常工作期间仅消耗12mA的电流,这使其具有电池效率,因此甚至可以在纽扣电池上运行。即使工作电压为3.3V,大多数引脚都具有5V容限,因此可以直接与Arduino等5V微控制器连接。使用这些模块的另一个优点是,每个模块有6个管道。意思是,每个模块可以与其他6个模块通信以传输或接收数据。这使得该模块适用于在物联网应用中创建星形或网状网络。它们还具有125个唯一ID的广泛地址范围,因此在封闭区域中,我们可以使用这些模块中的125个而不会相互干扰。
电路原理图
Arduino与nRF24L01的连接:
nRF24L01与Arduino连接的电路图很简单,没有太多元件。 nRF24l01将通过SPI接口连接,16x2 LCD通过I2C协议连接,仅使用两条线。
Circuit-Diagram-for-Interfacing-nRF24L01-with-Arduino_0.png (71.78 KB, 下载次数: 9)
2019-8-6 08:05 上传
Circuit-Hardware-for-Interfacing-nRF24L01-with-Arduino.jpg (57.04 KB, 下载次数: 16)
2019-8-6 08:05 上传
nRF24L01与Raspberry Pi的连接:
将nRF24L01与Raspberry Pi连接的电路图也非常简单,只有SPI接口用于连接Raspberry Pi和nRF24l01。
Circuit-Diagram-for-Interfacing-nRF24L01-with-Raspberry-Pi.png (33.8 KB, 下载次数: 15)
2019-8-6 08:06 上传
Circuit-Hardware-for-Interfacing-nRF24L01-with-Raspberry-Pi.jpg (44.15 KB, 下载次数: 16)
2019-8-6 08:06 上传
编程Raspberry Pi使用nRF24l01发送消息
Raspberry Pi的编程将使用Python3完成。您也可以使用C / C ++。但是在python中已经有一个可用于nRF24l01的库,可以从github页面下载。请注意,python程序和库应该在同一个文件夹上,否则python程序将无法找到该库。下载库后,只需解压缩并创建一个文件夹,其中将存储所有程序和库文件。完成库安装后,只需开始编写程序即可。该程序首先包含库,这些库将用于代码,如导入GPIO库,用于访问Raspberry Pi GPIO和导入时间以访问与时间相关的函数。
import RPi.GPIO as GPIO
import time
import spidev
from lib_nrf24 import NRF24复制代码
在“Broadcom SOC通道”中设置GPIO模式。这意味着您通过“Broadcom SOC通道”编号引用引脚,这些是“GPIO”之后的数字(例如GPIO01,GPIO02 ......)。这些不是电路板的编号。
GPIO.setmode(GPIO.BCM)复制代码
接下来我们将它设置为管道地址。该地址对于与Arduino接收器通信很重要。地址将以十六进制代码表示。
pipes = [[0xE0, 0xE0, 0xF1, 0xF1, 0xE0], [0xF1, 0xF1, 0xF0, 0xF0, 0xE0]]复制代码
使用GPIO08作为CE,GPIO25作为CSN引脚开始使用无线射频。
radio.begin(0, 25)复制代码
将有效负载大小设置为32位,通道地址设置为76,数据速率为1 mbps,功率级别最小。
radio.setPayloadSize(32)
radio.setChannel(0x76)
radio.setDataRate(NRF24.BR_1MBPS)
radio.setPALevel(NRF24.PA_MIN)复制代码
打开管道开始写入数据并打印nRF24l01的基本细节。
radio.openWritingPipe(pipes[0])
radio.printDetails()复制代码
以字符串形式准备消息。此消息将发送给Arduino UNO。
sendMessage = list("Hi..Arduino UNO")
while len(sendMessage) < 32:
sendMessage.append(0)复制代码
开始写入无线射频并继续写完整的字符串直到无线射频可用。与此同时,记下时间并打印消息传递的调试语句。
while True:
start = time.time()
radio.write(sendMessage)
print("Sent the message: {}".format(sendMessage))
send
radio.startListening()复制代码
如果字符串已完成且管道已关闭,则打印超时的调试消息。
while not radio.available(0):
time.sleep(1/100)
if time.time() - start > 2:
print("Timed out.") # print error message if radio disconnected or not functioning anymore
break复制代码
停止收听广播并关闭通信并在3秒后重新开始通信以发送另一条消息。
radio.stopListening() # close radio
time.sleep(3) # give delay of 3 seconds复制代码
如果您了解python的基础知识,那么Raspberry程序很容易理解。完整的Python程序在文章末尾处给出。
在Raspberry Pi中执行Python程序:
按照以下步骤执行程序非常简单:
● 将Python程序和库文件保存在同一文件夹中。
Executing-the-Python-Program-in-Raspberry-Pi.png (25.71 KB, 下载次数: 16)
2019-8-6 08:11 上传
● 我的Sender程序文件名是nrfsend.py,并且每个文件都在同一个文件夹中
Setup-the-Python-Program-in-Raspberry-Pi.png (21.92 KB, 下载次数: 8)
2019-8-6 08:12 上传
● 转到Raspberry Pi的命令终端。 并使用“cd”命令找到python程序文件。
Command-Terminal-of-Raspberry-Pi.png (14.45 KB, 下载次数: 15)
2019-8-6 08:12 上传
● 然后打开文件夹并编写命令“sudo python3 your_program.py”并按Enter键。 您将能够看到nRf24的基本详细信息,并且广播将在每3秒后开始发送消息。 发送完所有字符后,将显示消息调试。
Programming-Raspberry-Pi-to-Send-Message-using-nRF24l01.png (29.44 KB, 下载次数: 13)
2019-8-6 08:12 上传
编程Arduino UNO使用nRF24l01接收消息
对Arduino UNO进行编程类似于对Raspberry Pi进行编程。我们将遵循类似的方法,但使用不同的编程语言和步骤。可以从github页面下载Arduino的nRF24l01库。首先包括必要的库。我们使用I2C Shield使用1602 LCD,因此包括Wire.h库;nRF24l01使用SPI连接,因此包括SPI库。
#include
#include 复制代码
包括RF24和LCD库,用于访问RF24和LCD函数。
#include
#include 复制代码
I2C的LCD地址为27,它是一个16x2 LCD,因此请将这些信息写入该函数。
LiquidCrystal_I2C lcd(0x27, 16, 2);复制代码
RF24使用标准SPI连接,引脚9作为CE,引脚10为CSN。
RF24 radio(9, 10) ;复制代码
启动无线射频,设置功率级别并将通道设置为76.同时将管道地址设置为与Raspberry Pi相同并打开管道进行读取。
radio.begin();
radio.setPALevel(RF24_PA_MAX) ;
radio.setChannel(0x76) ;
const uint64_t pipe = 0xE0E0F1F1E0LL ;
radio.openReadingPipe(1, pipe) ;复制代码
开始I2C通信并初始化LCD显示屏。
Wire.begin();
lcd.begin();
lcd.home();
lcd.print("Ready to Receive");复制代码
开始收听收音机的传入消息,并将消息长度设置为32个字节。
radio.startListening() ;
char receivedMessage[32] = {0}复制代码
如果附加了radio,则开始读取该消息并保存。将消息打印到串行监视器,并打印到显示屏,直到下一条消息到达。停止广播收听并在一段时间后重试。
if (radio.available()) {
radio.read(receivedMessage, sizeof(receivedMessage)); Serial.println(receivedMessage) ;
Serial.println("Turning off the radio.") ;
radio.stopListening() ;
String stringMessage(receivedMessage) ;
lcd.clear();
delay(1000);
lcd.print(stringMessage);
}复制代码
将最终给出的完整代码上传到Arduino UNO并等待收到消息。
Wireless-RF-Communication-between-Raspberry-Pi-and-Arduino-UNO-using-nRF24L01-Module.jpg (72.4 KB, 下载次数: 11)
2019-8-6 08:18 上传
以上就是使用Raspberry Pi和nRf24l01发送消息,并使用Arduino UNO和nRF24l01接收消息的完整内容。 该信息将打印到1602 LCD上。 管道地址在Arduino UNO和Raspberry Pi中都非常重要。 如果您在运行此项目时遇到任何困难,请在本帖下面进行回复。
代码
本文使用的完整代码如下所示:
main.rar
(1.6 KB, 下载次数: 18)
2019-8-6 08:20 上传
点击文件名下载附件
最后
以上就是善良太阳为你收集整理的python2.4无线模块_使用nRF24L01模块进行无线射频通信的全部内容,希望文章能够帮你解决python2.4无线模块_使用nRF24L01模块进行无线射频通信所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复