专注电子技术学习与研究
当前位置:单片机教程网 >> STM32 >> 浏览文章

2.4G无线通信:通过NRF24L01遥控LED

作者:白栎旸   来源:本站原创   点击数:  更新时间:2014年04月30日   【字体:

    Rainbow上面预留了2.4G无线通信模块NRF24L01的插口,将无线通信模块插入到指定的接口中,多个Rainbow之间就可以通过2.4G无线通信模块实现无线通信了,通过无线通信模块可以实现无线开关控制、无线数据采集等功能。无线通信实验要求至少两个Rainbow,每个上面都插有NRF24L01模块,他们一个作为发送端、另外一个作为接收端,接收端接收到指令后,根据指令的内容去执行相应的操作。

 
    在软件包的“Projects\NRF24L01-Send”文件夹包含了无线发送端的程序、“Projects\NRF24L01-Recv”文件夹包含了无线接收端的程序,可以直接编译、烧写和调试。我们先来看看无线发送端的程序代码:
#include "WProgram.h"
#include "24l01.h"
 
void setup()
{
  //初始化Rainbow
  boardInit();
  //初始化默认串口
  Serial.begin();
  //初始化无线通信模块
  NRF24L01_Init();
  //设置成发射模式
  NRF24L01_TX_Mode();
  Serial.println("NRF24L01-Send start...");
}
 
void loop()
{
  //定义NRF24L01发送的数据包,为32个字节长度
  uint8_t txData[32] = {0};
  //将串口收到的输入数据通过NRF24L01发射出去
  if(Serial.available())
  {
    txData[0] = Serial.read();
    NRF24L01_TxPacket(txData);
  }
}
 
int main()
{
  setup();
  while(1) loop();
}
 
    这个发送端的功能非常简单:从串口读取一个字节的数据,并通过NRF24L01发射出去。在程序中,我们定义了一个32个字节的数组,这是因为我们封装的函数库,是以32个字节为单位将数据组织成一个数据包,再通过无线通信模块发送出去。无线通信模块的函数库采用C的方式进行封装,要使用无线通信模块,需要按照下列步骤进行:
    1、调用NRF24L01_Init()对无线通信模块进行初始化
    2、调用NRF24L01_TX_Mode()或者NRF24L01_RX_Mode()设置无线通信模块的模式:发送/接收
    3、定义一个32byte的数组,准备好发送的数据,调用NRF24L01_TxPacket(txData)发送数据;或者通过NRF24L01_RxPacket(txData)接收数据
 
    我们再来看看接收端的程序代码:
#include "WProgram.h"
#include "24l01.h"
 
void setup()
{
  //初始化Rainbow
  boardInit();
  //初始化默认串口
  Serial.begin();
  //初始化无线通信模块
  NRF24L01_Init();
  //设置成接收模式
  NRF24L01_RX_Mode();
 
  //使用LED作为指示,客户端发送0x31的时候LED发光;发送0x30的时候LED熄灭
  pinMode(LED1_PIN, GPIO_Mode_Out_PP);
  Serial.println("NRF24L01-Recv start...");
}
 
void loop()
{
  //定义NRF24L01接收的数据包,为32个字节长度
  uint8_t rxData[32] = {0};
  //接收数据,返回0表示成功
  if(NRF24L01_RxPacket(rxData) == 0)
  {
    if(rxData[0] == 0x30)
    {
      //LED灭
      digitalWrite(LED1_PIN, HIGH);
    }
    else if(rxData[0] == 0x31)
    {
      //LED亮
      digitalWrite(LED1_PIN, LOW);
    }
  }
}
 
int main()
{
  setup();
  while(1) loop();
}
 
    使用无线通信模块进行通信的步骤前面都已经说明了,在发送的时候虽然一个数据包是32个字节,我们实际上只填充了一个字节的数据,因此在接收端将根据第一个字节的内容来执行响应的动作:当接收到‘1’就点亮LED;当接收到‘0’就关闭LED。
 
    将无线发送端、接收端的程序分别编译无误后,烧写到不同的Rainbow中,将接收端放到离发送端有一定距离的地方,然后将发送端通过USB-TTL模块接入到PC,在PC上打开串口调试工具,通过串口调试工具发送一个1,此时接收端的LED点亮;如果接收端的LED处于点亮状态,在串口工具中给无线发送端输送一个0,此时LED熄灭。
 
关闭窗口

相关文章