《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 設計應用 > 基于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網站原創,未經授權禁止轉載。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          毛片精品免费在线观看| 亚洲国产精品欧美一二99| 亚洲大片一区二区三区| 亚洲小少妇裸体bbw| 国产亚洲精品久| 国产精品推荐精品| 欧美久久久久久| 亚洲精品国产精品国自产观看浪潮| 91久久精品国产91久久性色tv| 国精产品99永久一区一区| 麻豆成人在线观看| 久久精品一区二区三区不卡| 亚洲小视频在线| 国产乱码精品一区二区三区五月婷| 日韩亚洲视频在线| 亚洲高清视频中文字幕| 亚洲影视在线| 欧美三区视频| 亚洲精品乱码久久久久久久久| 国产精品视频免费观看www| 欧美日韩一区二区三区四区在线观看| 国产精品美女久久久久av超清| 免费成人在线观看视频| 亚洲免费播放| 激情懂色av一区av二区av| 久久精品国产第一区二区三区最新章节| 毛片一区二区三区| 小黄鸭视频精品导航| 男人的天堂亚洲| 久久riav二区三区| 国产自产精品| 国内精品久久久久久久97牛牛| 久久久久国色av免费观看性色| 免费亚洲一区二区| 国产一区二区黄色| 亚洲另类在线视频| 男男成人高潮片免费网站| 亚洲最新在线视频| 欧美人成在线视频| 一区二区视频欧美| 久久精品一区中文字幕| 美日韩精品视频免费看| 国产精品免费一区豆花| 欧美成人中文字幕| 国产午夜亚洲精品羞羞网站| 欧美人在线视频| 国产精品国色综合久久| 欧美四级在线观看| 欧美**字幕| 免费中文字幕日韩欧美| 国模私拍一区二区三区| 久久久久久91香蕉国产| 欧美电影免费观看高清完整版| 亚洲香蕉在线观看| 99精品视频一区二区三区| 亚洲日本在线观看| 午夜精品久久久| 性欧美18~19sex高清播放| 欧美日韩国产一区二区| 女同性一区二区三区人了人一| 欧美另类亚洲| 国产一区二区久久精品| 国产精品久久久久av| 久久在线观看视频| 午夜欧美电影在线观看| 欧美午夜不卡视频| 亚洲精品午夜| 香蕉免费一区二区三区在线观看| 老司机一区二区| 欧美精品一卡二卡| 亚洲免费精品| 免费观看30秒视频久久| 国产一区二区三区精品欧美日韩一区二区三区| 久久亚洲欧美国产精品乐播| 国产精品一区二区久久精品| 国产专区精品视频| 久久久久国产精品厨房| 免费成年人欧美视频| 中日韩美女免费视频网址在线观看| 欧美日韩伦理在线| 日韩网站免费观看| 国产精品白丝av嫩草影院| 欧美不卡视频| 欧美日韩免费看| 国产欧美日韩综合一区在线观看| 一二三区精品| 91久久精品国产91久久性色| 国产精品一卡二卡| 99视频在线精品国自产拍免费观看| 免费观看日韩av| 一本一本大道香蕉久在线精品| 亚洲无限乱码一二三四麻| 国产欧美日韩视频在线观看| 性欧美大战久久久久久久久| 欧美日韩国产色视频| 亚洲黄色性网站| 久久久999国产| 中文av字幕一区| 欧美在线播放一区二区| 日韩视频在线观看免费| 国产日韩精品电影| 久久九九精品99国产精品| 一本色道久久加勒比88综合| 亚洲一区二区3| 中文亚洲字幕| 韩国在线视频一区| 欧美日韩一区二区精品| 久久久国产午夜精品| 亚洲激情中文1区| 久久久噜噜噜久久狠狠50岁| 亚洲素人在线| 欧美日韩精品一二三区| 黄色一区二区三区| 嫩草成人www欧美| 亚洲国产成人精品女人久久久| 亚洲国产一区二区精品专区| 欧美视频一区二区三区在线观看| 久久在线视频在线| 欧美日本国产| 国产精品激情av在线播放| 欧美一级淫片aaaaaaa视频| 一本色道久久综合亚洲精品婷婷| 欧美在线一二三| 中文一区字幕| 国产欧美日韩激情| 亚洲一区在线观看视频| 快播亚洲色图| 国产欧美日韩不卡| 亚洲丶国产丶欧美一区二区三区| 久久人人97超碰国产公开结果| 亚洲国产精品v| 国产日韩欧美一区二区三区在线观看| 欧美在线日韩精品| 精品av久久707| 99精品国产一区二区青青牛奶| 性娇小13――14欧美| 欧美日韩精品中文字幕| 国产亚洲欧美一区| 欧美激情一区二区三级高清视频| 伊人成人网在线看| 国内外成人免费激情在线视频网站| 你懂的视频一区二区| 欧美在线观看视频| 国产一区二区三区久久悠悠色av| 亚洲视频一区在线观看| 欧美日韩另类字幕中文| 黄色精品免费| 久久中文字幕导航| 国产一区二区三区四区老人| 久久中文字幕一区二区三区| 亚洲人成在线观看网站高清| 欧美在线视频a| 久久人人爽人人爽| 亚洲自拍都市欧美小说| 午夜久久久久久久久久一区二区| 久久国内精品视频| 欧美激情按摩| 亚洲日本成人| 亚洲国产精品久久久久秋霞蜜臀| 香蕉久久精品日日躁夜夜躁| 亚洲欧美激情视频| 久久精品五月婷婷| 欧美成人精品在线视频| 亚洲欧美日韩另类| 国产精品专区第二| 欧美三级电影精品| 久热精品视频在线| 欧美国产欧美亚洲国产日韩mv天天看完整| 亚洲视频欧洲视频| 欧美三区免费完整视频在线观看| 麻豆精品精华液| 亚洲精选在线| 午夜欧美精品| 国产亚洲福利| 亚洲免费中文字幕| 欧美午夜精品一区二区三区| 欧美日韩喷水| 日韩午夜三级在线| 欧美α欧美αv大片| 欧美精品一区二区三区蜜桃| 国产一区av在线| 亚洲麻豆视频| 欧美日韩国产综合新一区| 好吊视频一区二区三区四区| 欧美精品一区二区在线播放| 男女激情久久| 久久美女性网| 欧美性感一类影片在线播放| 久久成人免费| 亚洲精品久久久久中文字幕欢迎你| 久久精品72免费观看| 欧美精品一区三区| 亚洲电影在线免费观看| 欧美精品在线一区二区三区| 午夜亚洲福利| 欧美日韩在线三级| 欧美成人免费在线视频| 久久久青草婷婷精品综合日韩| 亚洲日本免费| 欧美日韩国产一中文字不卡| 99国产精品国产精品毛片| 欧美一级在线播放| 国产精品一区二区欧美| 亚洲无亚洲人成网站77777| 欧美电影在线免费观看网站| 欧美高清视频在线播放| 久久精品天堂| 欧美视频专区一二在线观看| 日韩视频―中文字幕| 国产三级精品在线不卡| 永久久久久久| 麻豆精品视频在线观看视频| 午夜国产精品影院在线观看| 免费观看成人鲁鲁鲁鲁鲁视频| 久久女同精品一区二区| 亚洲欧美经典视频| 久久综合九色欧美综合狠狠| 欧美一区二视频在线免费观看| 国产精品嫩草99a| 快射av在线播放一区| 欧美日韩喷水| 欧美黄色片免费观看| 亚洲黄色影院| 亚洲欧美在线高清| 欧美特黄a级高清免费大片a级| 亚洲精品小视频在线观看| 99精品国产99久久久久久福利| 欧美精品18| 韩国三级电影久久久久久| 99亚洲视频| 黄色成人av在线| 午夜精品美女自拍福到在线| 亚洲一区二区av电影| 亚洲国产精品一区二区第四页av| 欧美一级视频| 欧美激情精品久久久久| 在线观看视频一区二区| 国产精品一区二区三区成人| 欧美日韩综合| 国产欧美精品va在线观看| 亚洲欧美日韩精品久久亚洲区| 欧美精品尤物在线| 午夜国产欧美理论在线播放| 亚洲影院免费| 午夜在线成人av| 久久天堂成人| 久久不射中文字幕| 老妇喷水一区二区三区| 一区免费视频| 国产精品自在在线| 亚洲精选一区二区| 亚洲丝袜av一区| 久久久久久久综合色一本| 亚洲伦理自拍| 免费观看成人www动漫视频| 欧美高清视频| 亚洲国产婷婷香蕉久久久久久99| 欧美午夜精品久久久久久久| 91久久久久久久久| 极品av少妇一区二区| 国产伦精品一区二区三区在线观看| 久久精品91久久香蕉加勒比| 精品成人一区二区| 国产精品久久久久久一区二区三区| 国产精品综合av一区二区国产馆| 在线精品国产成人综合| 欧美体内谢she精2性欧美| 久久久久久穴| 激情综合色丁香一区二区| 国产在线不卡| 亚洲欧美欧美一区二区三区| 狠狠色狠狠色综合日日91app| 国内精品久久国产| 国产美女精品人人做人人爽| 欧美日韩一级大片网址| 亚洲婷婷综合色高清在线| 99在线精品视频| 国产精品国产三级国产aⅴ无密码| 香蕉免费一区二区三区在线观看| 国产九九精品视频| 免费观看日韩| 国产麻豆91精品| aa亚洲婷婷| 亚洲丰满少妇videoshd| 欧美电影美腿模特1979在线看| 午夜国产一区| 欧美精品一区在线观看| 国内精品亚洲| 亚洲精品欧美极品| 亚洲亚洲精品三区日韩精品在线视频| 韩国av一区二区三区在线观看| 亚洲国产精品一区制服丝袜| 国产日韩一区在线| 久久精品国产亚洲aⅴ| 欧美电影电视剧在线观看| 亚洲婷婷国产精品电影人久久| 欧美在线中文字幕| 久久亚洲私人国产精品va| 国产视频不卡| 午夜精品免费在线| 欧美激情a∨在线视频播放| 欧美日韩国产不卡| 韩日欧美一区二区| 日韩午夜在线播放| 免费不卡视频| 久久成人精品电影| 久久xxxx精品视频| 欧美激情在线观看| 老司机午夜免费精品视频| 亚洲精品乱码久久久久| 欧美视频日韩| 欧美视频一区在线观看| 影音先锋久久精品| 欧美精品乱人伦久久久久久| 亚洲少妇中出一区| 欧美连裤袜在线视频| 午夜精品国产更新| 欧美成人精品在线| 国产日韩欧美三级| 国产精品乱看| 久久视频在线免费观看| 欧美精品电影在线| 国产一区二区三区四区老人| 欧美日韩国产二区| 欧美在线视频不卡| 国产欧美日韩在线观看| 亚洲国产经典视频| 欧美亚州在线观看|