国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Web和nRF24L01的遠程數(shù)據(jù)接收器設計

2013-08-13 08:13嚴林祥張紅雨
電子技術應用 2013年10期
關鍵詞:接收器隊列瀏覽器

嚴林祥,張紅雨

(電子科技大學 電子工程學院,四川 成都 611731)

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

但2.45 GHz無線通信的距離還是非常有限的,如ZigBee在 2~20 m、WiFi在 2~200 m。 因此可以在接收器上移植TCP/IP網(wǎng)絡協(xié)議,最終通過遠程網(wǎng)絡來實現(xiàn)對數(shù)據(jù)接收器的控制。遠程訪問管理數(shù)據(jù)接收器有兩種方式:C/S(客戶機/服務器)模式和 B/S(瀏覽器/服務器)模式。C/S模式只能在小范圍內的網(wǎng)絡環(huán)境中應用,缺乏靈活性,開發(fā)周期長而且升級難。而采用B/S模式,只要在和設備聯(lián)網(wǎng)的任何地方,合法用戶就可以通過瀏覽器遠程管理控制接收器[4]。因此它具有系統(tǒng)維護方便、開發(fā)周期短的優(yōu)勢。

1 遠程數(shù)據(jù)接收系統(tǒng)設計

基于nRF24L01射頻模塊的遠程數(shù)據(jù)接收系統(tǒng)結構如圖1所示。數(shù)據(jù)接收器以S3C2440為處理器,外圍擴展nRF24L01射頻模塊、存儲模塊和網(wǎng)絡通信模塊。各數(shù)據(jù)采集節(jié)點由低功耗MCU、射頻模塊和傳感器數(shù)據(jù)采集電路構成。每個節(jié)點有一個ID號,將它與采集到數(shù)據(jù)一起寫到發(fā)送包的數(shù)據(jù)域中,然后通過射頻模塊發(fā)送給接收器的射頻接收單元進行處理。在該系統(tǒng)中,S3C2440與nRF24L01射頻模塊通信由6根信號線組成,它們分別為:主機出從機進數(shù)據(jù)線(MOSI)、主機進從機出數(shù)據(jù)線(MISO)、時鐘線(SCK)、設備選擇線(CS)、中斷標志線(IRQ)和接收發(fā)送模式選擇線(CE)[2-4]。IRQ中的信號可以代表不同突發(fā)情況的中斷事件:nRF24L01在發(fā)送模式下成功發(fā)送數(shù)據(jù)中斷;nRF24L01在接收模式下正確接收數(shù)據(jù)中斷;nRF24L01在發(fā)送模式下,達到最大重傳次數(shù)中斷。

圖1 遠程數(shù)據(jù)控制系統(tǒng)結構圖

S3C2440通過SPI接口對nRF24L01的相關寄存器進行操作,以實現(xiàn)對射頻模塊的初始化和相關信息處理。為了利用Linux中比較成熟的網(wǎng)絡功能實現(xiàn)遠程控制,在接收器上移植了嵌入式Linux操作系統(tǒng)。而在Linux系統(tǒng)中,所有的外部設備都被看作是目錄/dev下的一個文件,并為用戶的訪問提供了一種標準接口[4]。因此在本系統(tǒng)開發(fā)前要實現(xiàn)nRF24L01射頻模塊字符設備驅動程序。

2 nRF24L01通信功能實現(xiàn)

nRF24L01單片無線收發(fā)器芯片內置頻率發(fā)生器、功率放大器、晶體振蕩器、調制器和解調器等功能模塊。通過在芯片外圍擴展少量的器件形成的射頻模塊可以利用全雙工的SPI串行接口與MCU實現(xiàn)通信。它有125個頻點,能夠實現(xiàn)點對點、點對多點的無線通信。當nRF24L01工作在“ShockBurstTM”方式下時,數(shù)據(jù)包格式由前導碼、地址、數(shù)據(jù)域和CRC校驗這4部分組成。其中前導碼由硬件自動進行處理,當nRF24L01在發(fā)送模式下自動加入前導碼,在接收模式下自動去除前導碼。它的作用是給芯片穩(wěn)定接收或發(fā)送預留一定的時間。地址長度為3~5 B,它由寄存器SETUP_AW進行設定。數(shù)據(jù)域為發(fā)送包的有效載荷,長度可以為1~32 B。CRC校驗是可以選擇的,它由控制寄存器中的EN_CRC位來決定[3]。

數(shù)據(jù)采集節(jié)點中的nRF24L01設置為發(fā)送模式,節(jié)點將采集到的數(shù)據(jù)按照自己規(guī)定的格式填充到發(fā)送包的數(shù)據(jù)域。接收器的nRF24L01設置為接收模式用于接收節(jié)點發(fā)送的數(shù)據(jù)。在發(fā)送模式下芯片有6個數(shù)據(jù)通道可供選擇,而每個數(shù)據(jù)通道作為RF信道中一個邏輯通道,它們有自己的地址[2-3]。因此可以將數(shù)據(jù)采集節(jié)點的數(shù)據(jù)包地址設置為接收器nRF24L01芯片6個數(shù)據(jù)通道中某個未被利用的通道地址。從而實現(xiàn)一個接收器可以接收6個節(jié)點的數(shù)據(jù)。若節(jié)點個數(shù)大于6,則要采用一些防碰撞算法來解決數(shù)據(jù)沖突。

采用純ALOHA算法即隨機延遲算法可以用于解決上述問題,數(shù)據(jù)采集節(jié)點利用隨機數(shù)生成函數(shù)產(chǎn)生一個在(N1,N2)之間的隨機數(shù),把這個隨機數(shù)給定時計數(shù)器賦值,使得定時器的定時間隔在(T1,T2)之間[5]。若增大T2-T1,則發(fā)生碰撞的概率減小。

在nRF24L01射頻模塊驅動程序設計中主要實現(xiàn)了open()、close()、ioctl()、poll()等函數(shù)。 其中 open()和 close()函數(shù)完成對設備模塊的打開與關閉;poll()函數(shù)是用戶空間調用select()函數(shù)的接口,用來監(jiān)測設備文件的狀態(tài)。若射頻模塊成功接收到發(fā)射單元發(fā)送的數(shù)據(jù)則會返回文件可讀,而在其他時候則處于阻塞狀態(tài)。ioctl()函數(shù)為用戶程序提供了對nRF24L01射頻模塊操作的相關命令,如:RDID_NUM命令用于接收數(shù)據(jù),SENDID命令用于修改并發(fā)送數(shù)據(jù)。

3 數(shù)據(jù)接收器軟件設計

遠程數(shù)據(jù)接收器的軟件基于Linux操作系統(tǒng),主要由BOA服務器、CGI程序、nRF24L01射頻模塊驅動程序和SQLite3數(shù)據(jù)庫組成,如圖2所示。用戶通過瀏覽器向遠程BOA服務器發(fā)出HTTP請求,服務器的守護進程接收到請求后創(chuàng)建一個CGI進程,它將瀏覽器發(fā)送的相關數(shù)據(jù)設置成環(huán)境變量,然后執(zhí)行URL指定的CGI程序[4]。在整個軟件設計中CGI程序起著承上啟下的作用:一方面它從環(huán)境變量或標準輸入讀取用戶輸入數(shù)據(jù),并根據(jù)瀏覽器發(fā)送的相關命令對nRF24L01射頻模塊和SQLite3數(shù)據(jù)庫進行操作;另一方面它把處理結果回送給BOA服務器及Web瀏覽器。

圖2 數(shù)據(jù)接收器軟件架構圖

4 CGI程序設計

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

圖3 CGI程序流程圖

4.1 射頻模塊應用程序設計

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

圖4 射頻模塊應用程序流程圖

在主線程中,設置了一個初始化為0的變量flag,用于標記射頻模塊當前是否已設置為接收節(jié)點數(shù)據(jù)。若第一次從消息隊列接收到使射頻模塊接收數(shù)據(jù)的命令,則將flag設置為1,并創(chuàng)建采集線程。當flag為1且接收到停止接收數(shù)據(jù)命令時,則調用close()函數(shù)關閉射頻模塊設備,同時調用pthread_cancel()函數(shù)結束采集線程。

在采集線程中,首先調用SQLite3提供的C API接口函數(shù)sqlite3_open()打開或創(chuàng)建數(shù)據(jù)庫,并調用sqlite3_exec()函數(shù)創(chuàng)建兩個數(shù)據(jù)表,其中一個用于存儲實時數(shù)據(jù),一個用于存儲歷史數(shù)據(jù)。其次,通過open()函數(shù)打開射頻模塊設備,調用ioctl()函數(shù)向射頻模塊發(fā)送一些設備初始化的設置命令。初始化后設備等待節(jié)點數(shù)據(jù)的到來,一旦數(shù)據(jù)到達便返回設備為可讀狀態(tài),于是可以調用ioctl()函數(shù)中的RDID_NUM命令接收數(shù)據(jù)。最后通過sqlite3_exec()函數(shù)執(zhí)行數(shù)據(jù)庫操作的insert語句,將數(shù)據(jù)存儲在實時數(shù)據(jù)表中。

4.2 數(shù)據(jù)顯示線程

用戶通過瀏覽器查詢各節(jié)點采集到的數(shù)據(jù),是由CGI程序中數(shù)據(jù)顯示子線程實現(xiàn)的。數(shù)據(jù)顯示子線程根據(jù)接收到的命令從不同的數(shù)據(jù)表中讀取數(shù)據(jù)。該系統(tǒng)對數(shù)據(jù)的顯示以簡潔的直方圖形式呈現(xiàn),而沒有采用圖片這種比較占用資源的方式。以直方圖形式顯示數(shù)據(jù)能夠滿足大多數(shù)工業(yè)控制中對數(shù)據(jù)顯示的需求。系統(tǒng)測試時,各數(shù)據(jù)采集節(jié)點以MSP430F2121單片機為MCU、以DS18B20溫度傳感器采集周圍的溫度、用nRF24L01射頻模塊將采集到溫度以無線的方式傳輸給數(shù)據(jù)接收器。同時節(jié)點中射頻模塊的天線采集PCB天線,而接收器的天線采用增益為3 dBi棒狀天線,在此條件下,該數(shù)據(jù)接收器能夠接收100 m范圍內的節(jié)點數(shù)據(jù),并通過網(wǎng)絡把數(shù)據(jù)返回到Web頁面中。應用本系統(tǒng)對室內溫度進行監(jiān)測得到的數(shù)據(jù)截圖如圖5所示。

圖5 室內溫度監(jiān)測效果截圖

將無線射頻通信技術和網(wǎng)絡技術應用于傳感器數(shù)據(jù)采集領域具有非常好的前景,該數(shù)據(jù)接收器可用于在惡劣的環(huán)境下對環(huán)境參數(shù)的多點監(jiān)測。數(shù)據(jù)接收器的射頻模塊PCB的布局對整體的性能有很大影響,同時采用大增益的天線可以使接收器獲取更遠距離的節(jié)點數(shù)據(jù)。在軟件設計中由于采用了異步事件通知消息隊列的機制,因此在select()等待管道為可讀狀態(tài)時要注意處理由于信號中斷而使select()返回的EINTR狀態(tài)。

[1]李雄飛,孫俊杰,陳磊,等.基于 ZigBee技術的無線設備狀態(tài)監(jiān)測系統(tǒng)[J].儀表技術與傳感器,2012(12):139-140.

[2]黃智偉.單片無線發(fā)射與接收電路設計[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系統(tǒng)移植[M].北京:清華大學出版社,2011.

[5]鄧一文,張紅雨,張鵬程,等.RFID高頻讀寫器防碰撞算法研究[J].電子設計工程,2011(19):31-34.

[6]STEVENS W R.Unix網(wǎng)絡編程卷2:進程間通信[M].楊繼張,譯.北京:清華大學出版社,2001.

猜你喜歡
接收器隊列瀏覽器
隊列里的小秘密
基于多隊列切換的SDN擁塞控制*
反瀏覽器指紋追蹤
在隊列里
JXG-50S型相敏軌道電路接收器自動測試臺
豐田加速駛入自動駕駛隊列
新型二取二結構的25Hz微電子相敏接收器數(shù)據(jù)處理方法研究
環(huán)球瀏覽器
IDT推出超緊湊型無線電源接收器,可節(jié)省70%板面積
瀏覽器