欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

專注電子技術學習與研究
當前位置:單片機教程網 >> 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熄滅。
 
關閉窗口

相關文章