<acronym id="xonnx"></acronym>
      <td id="xonnx"></td>
    1. <pre id="xonnx"></pre>

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

        相關文章

        欧美性色欧美精品视频,99热这里只有精品mp4,日韩高清亚洲日韩精品一区二区,2020国自产拍精品高潮