《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于Web和nRF24L01的遠程數據接收器設計
基于Web和nRF24L01的遠程數據接收器設計
來源:電子技術應用2013年第10期
嚴林祥, 張紅雨
電子科技大學 電子工程學院,四川 成都 611731
摘要: 基于S3C2440-Linux嵌入式平臺和nRF24L01射頻模塊,介紹了一種遠程數據接收器的設計。該數據接收器利用SQLite3存儲nRF24L01射頻模塊接收來自數據采集節點的數據,用戶通過瀏覽器訪問接收器上的BOA服務器進行數據管理。在CGI程序設計中采用Posix消息隊列給數據接收器的射頻接收單元傳遞命令,利用多線程的方式對接收到的數據進行處理。這種將傳感器采集到的數據通過2.45 GHz無線射頻模塊發送到數據接收器的方式非常適合用于遠程環境監測、旅游管理等場合。
中圖分類號: TP2
文獻標識碼: A
文章編號: 0258-7998(2013)10-0069-03
Design of remote data receiver based on Web and nRF24L01
Yan Linxiang, Zhang Hongyu
School of Electronic Engineering, University of Electronic Science and Technology of China, Chengdu 611731, China
Abstract: A remote data receiver is designed based on S3C2440-Linux embedded platform and nRF24L01 RF module. The data receiver uses SQLite3 to store the data which are received by nRF24L01 RF module from the data acquisition node. Through browser user can access to the BOA server for data management. In CGI program, commands were passed to RF receiving by Posix message queues. Multithreading technology was used to process the received data. The approach of using 2.45 GHz wireless RF module to pass the data which are acquired by sensors to the data receiver is well suited for remote environmental monitoring, tourism management and other occasions.
Key words : data receiver; nRF24L01 RF module; CGI program; multithread; Posix message queues

    在傳統的數據采集中,較多采用RS485或CAN現場總線將分散節點的數據傳給數據接收器。由于有線傳輸,在安裝和維修方面會給實際應用帶來許多不必要的麻煩。若采集數據節點對移動性要求比較高,則這種有線傳輸方式有時卻行不通。因此,若各數據采集節點通過無線方式將數據傳給數據接收器,則可以很好地解決上述的問題。在工業應用中2.45 GHz無線通信具有頻段免費、通信距離遠的優點。目前基于2.45 GHz無線通信比較成熟的應用有無繩電話、ZigBee、WiFi、藍牙等。它們有統一的協議標準,但是具有協議復雜、開發難度大、周期長等不足。Nordic Semiconductor 公司的nRF24L01 系類單片無線收發芯片采用封閉協議通信, 而各個廠家可以根據自己的需求制定自己的通信協議[1-3]。因此采用以nRF24L01芯片為核心的射頻模塊對節點采集的數據進行無線傳輸具有低成本、易開發等優點。

    但2.45 GHz無線通信的距離還是非常有限的,如ZigBee在2~20 m、WiFi在2~200 m。因此可以在接收器上移植TCP/IP網絡協議,最終通過遠程網絡來實現對數據接收器的控制。遠程訪問管理數據接收器有兩種方式:C/S(客戶機/服務器)模式和B/S(瀏覽器/服務器)模式。C/S模式只能在小范圍內的網絡環境中應用,缺乏靈活性,開發周期長而且升級難。而采用B/S模式,只要在和設備聯網的任何地方,合法用戶就可以通過瀏覽器遠程管理控制接收器[4]。因此它具有系統維護方便、開發周期短的優勢。
1 遠程數據接收系統設計
    基于nRF24L01射頻模塊的遠程數據接收系統結構如圖1所示。數據接收器以S3C2440為處理器,外圍擴展nRF24L01射頻模塊、存儲模塊和網絡通信模塊。各數據采集節點由低功耗MCU、射頻模塊和傳感器數據采集電路構成。每個節點有一個ID號,將它與采集到數據一起寫到發送包的數據域中,然后通過射頻模塊發送給接收器的射頻接收單元進行處理。在該系統中,S3C2440與nRF24L01射頻模塊通信由6根信號線組成,它們分別為:主機出從機進數據線(MOSI) 、主機進從機出數據線(MISO)、時鐘線(SCK)、設備選擇線(CS) 、中斷標志線(IRQ)和接收發送模式選擇線(CE) [2-4]。IRQ中的信號可以代表不同突發情況的中斷事件:nRF24L01在發送模式下成功發送數據中斷;nRF24L01在接收模式下正確接收數據中斷;nRF24L01在發送模式下,達到最大重傳次數中斷。

    S3C2440通過SPI接口對nRF24L01的相關寄存器進行操作,以實現對射頻模塊的初始化和相關信息處理。為了利用Linux中比較成熟的網絡功能實現遠程控制,在接收器上移植了嵌入式Linux操作系統。而在Linux系統中,所有的外部設備都被看作是目錄/dev下的一個文件,并為用戶的訪問提供了一種標準接口[4]。因此在本系統開發前要實現nRF24L01射頻模塊字符設備驅動程序。
2 nRF24L01通信功能實現
    nRF24L01單片無線收發器芯片內置頻率發生器、功率放大器、晶體振蕩器、調制器和解調器等功能模塊。通過在芯片外圍擴展少量的器件形成的射頻模塊可以利用全雙工的SPI串行接口與MCU實現通信。它有125個頻點,能夠實現點對點、點對多點的無線通信。當nRF24L01工作在“ShockBurstTM”方式下時,數據包格式由前導碼、地址、數據域和CRC校驗這4部分組成。其中前導碼由硬件自動進行處理,當nRF24L01在發送模式下自動加入前導碼,在接收模式下自動去除前導碼。它的作用是給芯片穩定接收或發送預留一定的時間。地址長度為3~5 B,它由寄存器SETUP_AW進行設定。數據域為發送包的有效載荷,長度可以為1~32 B。CRC校驗是可以選擇的,它由控制寄存器中的EN_CRC位來決定[3]。
    數據采集節點中的nRF24L01設置為發送模式,節點將采集到的數據按照自己規定的格式填充到發送包的數據域。接收器的nRF24L01設置為接收模式用于接收節點發送的數據。在發送模式下芯片有6個數據通道可供選擇,而每個數據通道作為RF信道中一個邏輯通道,它們有自己的地址[2-3]。因此可以將數據采集節點的數據包地址設置為接收器nRF24L01芯片6個數據通道中某個未被利用的通道地址。從而實現一個接收器可以接收6個節點的數據。若節點個數大于6,則要采用一些防碰撞算法來解決數據沖突。
    采用純ALOHA算法即隨機延遲算法可以用于解決上述問題,數據采集節點利用隨機數生成函數產生一個在(N1,N2)之間的隨機數,把這個隨機數給定時計數器賦值,使得定時器的定時間隔在(T1,T2)之間[5]。若增大T2-T1,則發生碰撞的概率減小。
    在nRF24L01射頻模塊驅動程序設計中主要實現了open()、close()、ioctl()、poll()等函數。其中open()和close()函數完成對設備模塊的打開與關閉;poll() 函數是用戶空間調用select()函數的接口,用來監測設備文件的狀態。若射頻模塊成功接收到發射單元發送的數據則會返回文件可讀,而在其他時候則處于阻塞狀態。ioctl()函數為用戶程序提供了對nRF24L01射頻模塊操作的相關命令,如:RDID_NUM命令用于接收數據,SENDID命令用于修改并發送數據。
3 數據接收器軟件設計
    遠程數據接收器的軟件基于Linux操作系統,主要由BOA服務器、CGI程序、nRF24L01射頻模塊驅動程序和SQLite3數據庫組成,如圖2所示。用戶通過瀏覽器向遠程BOA服務器發出HTTP請求,服務器的守護進程接收到請求后創建一個CGI進程,它將瀏覽器發送的相關數據設置成環境變量,然后執行URL指定的CGI程序[4]。在整個軟件設計中CGI程序起著承上啟下的作用:一方面它從環境變量或標準輸入讀取用戶輸入數據,并根據瀏覽器發送的相關命令對nRF24L01射頻模塊和SQLite3數據庫進行操作;另一方面它把處理結果回送給BOA服務器及Web瀏覽器。

4 CGI程序設計
    用戶通過瀏覽器管理遠程數據接收器主要實現以下功能:控制nRF24L01射頻模塊接收或不接收來自數據采集節點中的數據、顯示采集到的實時數據和歷史數據。在本系統設計中,將用戶提交HTML表單數據的方式設置為GET方法,因此當表單提交時,用戶的控制命令被保存到環境變量QUERY_STRING中。CGI程序首先通過getenv()函數獲取環境變量QUERY_STRING的內容,然后根據環境變量的內容執行不同的操作,CGI程序流程圖如圖3所示?!?/p>

 

 

4.1 射頻模塊應用程序設計
    射頻模塊通過Posix消息隊列接收CGI程序發送的消息,消息的內容有兩種:使射頻模塊接收數據采集節點到達的數據包命令和停止接收命令。由于System V 消息隊列無法通知CGI程序何時在消息隊列中放置了一個消息,同時,若采用msgrcv()函數一直輪詢,CPU的效率會比較低,而Posix消息隊列中的mq_notify()函數,可以實現當CGI程序發送消息時,能夠通過異步事件通知消息隊列的接收端。但是消息隊列描述字(mqd_t變量)不是“普通”描述字,不能通過select()函數檢測消息隊列是否為可讀狀態[6]。然而可以通過以下方式實現:首先,創建一個管道,通過select()函數等待檢測管道的可讀狀態;然后通過mq_notify()函數使當消息隊列有消息到來時產生一個SIGUSR1信號,并且通過signal()函數捕獲這個信號。在信號處理函數中向管道寫入任意一個字符的數據,使select()函數返回管道為可讀狀態,從而程序向下執行,通過mq_receive()函數讀取消息隊列的消息。之后根據消息的內容對nRF24L01射頻模塊執行不同的操作。射頻模塊應用程序的流程圖如圖4所示。

 在主線程中,設置了一個初始化為0的變量flag,用于標記射頻模塊當前是否已設置為接收節點數據。若第一次從消息隊列接收到使射頻模塊接收數據的命令,則將flag設置為1,并創建采集線程。當flag為1且接收到停止接收數據命令時,則調用close()函數關閉射頻模塊設備,同時調用pthread_cancel()函數結束采集線程。
    在采集線程中,首先調用SQLite3提供的C API接口函數sqlite3_open()打開或創建數據庫,并調用sqlite3_exec()函數創建兩個數據表,其中一個用于存儲實時數據,一個用于存儲歷史數據。其次,通過open()函數打開射頻模塊設備,調用ioctl()函數向射頻模塊發送一些設備初始化的設置命令。初始化后設備等待節點數據的到來,一旦數據到達便返回設備為可讀狀態,于是可以調用ioctl()函數中的RDID_NUM命令接收數據。最后通過sqlite3_exec()函數執行數據庫操作的insert語句,將數據存儲在實時數據表中。
4.2 數據顯示線程
    用戶通過瀏覽器查詢各節點采集到的數據,是由CGI程序中數據顯示子線程實現的。數據顯示子線程根據接收到的命令從不同的數據表中讀取數據。該系統對數據的顯示以簡潔的直方圖形式呈現,而沒有采用圖片這種比較占用資源的方式。以直方圖形式顯示數據能夠滿足大多數工業控制中對數據顯示的需求。系統測試時,各數據采集節點以MSP430F2121單片機為MCU、以DS18B20溫度傳感器采集周圍的溫度、用nRF24L01射頻模塊將采集到溫度以無線的方式傳輸給數據接收器。同時節點中射頻模塊的天線采集PCB天線,而接收器的天線采用增益為3 dBi棒狀天線,在此條件下,該數據接收器能夠接收100 m范圍內的節點數據,并通過網絡把數據返回到Web頁面中。應用本系統對室內溫度進行監測得到的數據截圖如圖5所示。
    將無線射頻通信技術和網絡技術應用于傳感器數據采集領域具有非常好的前景,該數據接收器可用于在惡劣的環境下對環境參數的多點監測。數據接收器的射頻模塊PCB的布局對整體的性能有很大影響,同時采用大增益的天線可以使接收器獲取更遠距離的節點數據。在軟件設計中由于采用了異步事件通知消息隊列的機制,因此在select()等待管道為可讀狀態時要注意處理由于信號中斷而使select()返回的EINTR狀態。
參考文獻
[1] 李雄飛,孫俊杰,陳磊,等.基于ZigBee技術的無線設備狀態監測系統[J].儀表技術與傳感器,2012(12):139-140.
[2] 黃智偉. 單片無線發射與接收電路設計[M].西安:西安電子科技大學出版社,2009.
[3] SEMICONDUCTOR N. nRF24L01 Single Chip 2.4 GHz Transceiver Product Specification[EB/OL].[2007]. http://www.nordicsemi.com/eng/Products/2.4GHz-RF/nRF24L01.
[4] 劉剛,趙劍川. Linux系統移植[M].北京:清華大學出版社,2011.
[5] 鄧一文,張紅雨,張鵬程,等.RFID高頻讀寫器防碰撞算法研究[J].電子設計工程,2011(19):31-34.
[6] STEVENS W R. Unix 網絡編程卷2:進程間通信[M].楊繼張, 譯.北京:清華大學出版社,2001.

此內容為AET網站原創,未經授權禁止轉載。
亚洲一区二区欧美_亚洲丝袜一区_99re亚洲国产精品_日韩亚洲一区二区
免费一级欧美片在线观看| 欧美日韩亚洲视频一区| 国产亚洲在线观看| 国产精品久久久久aaaa樱花| 免费高清在线视频一区·| 久久精品一本| 久久精品国产一区二区电影| 午夜精品久久久久久久 | 亚洲一区二区三区乱码aⅴ| 日韩一区二区精品| 亚洲美女中出| 夜夜嗨av一区二区三区四区| 日韩亚洲欧美一区| 一区二区三区三区在线| 亚洲一区二区三区777| 亚洲制服少妇| 亚洲制服欧美中文字幕中文字幕| 亚洲性人人天天夜夜摸| 亚洲欧美日韩国产一区二区| 午夜精品成人在线| 久久精品免费观看| 亚洲国产高清一区二区三区| 亚洲国产婷婷综合在线精品| 亚洲国产精品一区制服丝袜| 91久久精品国产91性色tv| 亚洲一二三区精品| 亚洲激情视频在线播放| 亚洲国产欧美另类丝袜| 91久久精品国产| 日韩天堂在线观看| 日韩一区二区免费看| 欧美日韩国产美女| 欧美99久久| 欧美久久九九| 国产精品xnxxcom| 国产精品外国| 狠狠色丁香久久婷婷综合_中| 亚洲第一精品福利| 一本色道久久综合狠狠躁篇的优点 | 欧美高清不卡在线| 欧美日韩国产999| 国产精品欧美久久| 激情成人综合| 亚洲精品久久久久久一区二区| 99国内精品久久| 性做久久久久久免费观看欧美| 亚洲国产一区二区视频| 这里只有视频精品| 欧美一区二区在线| 欧美凹凸一区二区三区视频| 欧美三级日本三级少妇99| 国产日韩精品一区二区浪潮av| 在线成人免费视频| 中文欧美在线视频| 久久精品日产第一区二区三区| 一区二区久久久久| 久久九九免费| 欧美日韩在线播放一区二区| 国产主播精品| 夜夜精品视频| 亚洲国产精品久久久久婷婷老年| 亚洲一区二区三区免费视频| 久热爱精品视频线路一| 欧美日韩一区二区免费在线观看 | 一区二区三区在线视频免费观看| 一本久道久久综合狠狠爱| 性色av一区二区三区在线观看| 亚洲最新色图| 久久青草欧美一区二区三区| 欧美视频日韩视频在线观看| 一区精品久久| 亚洲欧美综合另类中字| 在线视频欧美精品| 久久午夜精品一区二区| 国产精品久久久久秋霞鲁丝| 亚洲国产精品悠悠久久琪琪 | 久久躁狠狠躁夜夜爽| 欧美性理论片在线观看片免费| 尤物99国产成人精品视频| 亚洲一区视频在线| 99一区二区| 奶水喷射视频一区| 国产午夜精品美女毛片视频| 一个人看的www久久| 日韩视频在线观看国产| 久久久久国产一区二区三区| 国产精品家教| 日韩亚洲欧美精品| 亚洲欧洲视频在线| 久久亚洲午夜电影| 国产三级欧美三级| 亚洲永久免费观看| 亚洲午夜电影网| 欧美精品在线播放| 一区在线视频观看| 欧美在线观看网址综合| 香蕉久久a毛片| 国产精品国产三级国产aⅴ9色| 激情欧美日韩一区| 一区二区三区鲁丝不卡| 亚洲国产精品va在看黑人| 性视频1819p久久| 国产精品v欧美精品v日韩| 亚洲国产日韩在线| 亚洲韩国青草视频| 久久久中精品2020中文| 国产亚洲欧美中文| 亚洲国产一区二区三区青草影视| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 欧美在线一二三区| 欧美一级欧美一级在线播放| 国产精品久久久久久久7电影| 亚洲久久成人| 亚洲精品在线观看视频| 猛男gaygay欧美视频| 极品尤物av久久免费看| 久久激情视频免费观看| 久久久在线视频| 激情久久婷婷| 久久疯狂做爰流白浆xx| 久久久夜夜夜| 在线播放一区| 亚洲精品欧美激情| 欧美人在线观看| 日韩视频在线观看一区二区| 在线亚洲电影| 欧美亚州在线观看| 亚洲一区二区在线| 久久国内精品视频| 精品成人在线观看| 亚洲精品人人| 欧美日韩一区在线观看视频| 在线视频欧美一区| 亚洲欧美日韩一区二区在线| 国产精品夜夜嗨| 欧美在线精品免播放器视频| 久久网站热最新地址| 亚洲二区视频| 一区二区三区视频在线| 国产精品高潮呻吟| 性xx色xx综合久久久xx| 久热精品视频在线观看| 亚洲激情在线视频| 亚洲综合视频在线| 国产视频一区三区| 亚洲清纯自拍| 国产精品播放| 欧美影院在线| 欧美激情第10页| 中文在线资源观看视频网站免费不卡| 亚洲欧美在线看| 韩国成人福利片在线播放| 亚洲精品中文字| 国产精品久久久久久久第一福利| 欧美一二区视频| 欧美国产视频一区二区| 亚洲视频在线二区| 久久精品国产一区二区三| 亚洲高清成人| 亚洲欧美综合网| 在线观看欧美日韩| 亚洲视频在线一区| 国产一区91精品张津瑜| 亚洲乱码国产乱码精品精天堂| 国产精品久久久久av| 亚洲高清一区二| 国产精品成人av性教育| 欧美综合77777色婷婷| 欧美人与性动交α欧美精品济南到| 亚洲性人人天天夜夜摸| 男女激情久久| 亚洲一区二区三区乱码aⅴ蜜桃女| 毛片精品免费在线观看| 一区二区日韩欧美| 久久综合伊人77777尤物| 一区二区三区福利| 久热爱精品视频线路一| 一区二区三区视频在线播放| 久热re这里精品视频在线6| 99亚洲一区二区| 久久综合精品国产一区二区三区| 在线一区二区视频| 麻豆成人av| 亚洲欧美中文另类| 欧美日韩视频第一区| 久久精品av麻豆的观看方式| 欧美系列精品| 亚洲人在线视频| 国产亚洲欧洲| 亚洲一区二区在线看| 在线观看欧美精品| 欧美一区二区在线播放| 亚洲精品永久免费| 美女网站在线免费欧美精品| 亚洲欧美中日韩| 国产精品theporn| 99riav久久精品riav| 精品99一区二区三区| 久久成人这里只有精品| 亚洲天堂第二页|