以
無線模組公司遠距離WiFi模組為核心的無線數據采集系統設計,無線電數據采集是現代信息通信研究的重要內容。對于許多領域,如人難以到達的偏遠環境、高腐蝕和對現場無法可循的有線連接環境,選擇有線數據采集傳輸系統顯然已無法滿足數據采集和傳輸的需要。這種無線數據采集方式已成為一種有效的替代方法,它作為現代數據監測控制的基礎技術,已被越來越多地應用于物聯網、工業控制、環境監測等領域。CV520是系統級芯片,它結合了Wifi功能,以CV520強大的處理能力、低功耗和高速穩定的Wifi通訊等為特征。采用CV520主控芯片設計一套無線數據采集系統,采用CV520連接芯片S進行數據采集,并用無線模組公司遠距離WiFi模組連接指定網絡,利用Socket接口與上位機通信,將采集到的數據傳送到上位計算機系統。
該無線數據采集系統的硬件結構主要由數據源模塊、CV520模塊和上位機三部分組成。通過SPI接口連接CV520和數據源模塊,CV520模塊在本設計中稱為SPISlave(被動SPI設備),SPIActivity(SPIActivity);CV520通過AP(無線接入點);建立以太網絡與主機連接。在系統運行過程中,數據源模塊定期向CV520模塊發送數據,CV520系統則在其中緩存數據;數據采集通過WiFi網絡,在與主機連接時,仍能與主機保持連接。由上位機實現數據的存儲和實時顯示。當CV520用于SPISlave時,SPIMaster只能等待SPIMaster啟動通信連接,并基于主機提供的時鐘信號接收數據。ST是ST(意法半導體)開發的高性能微處理器,作為SPIMaster應用時,每個SPI控制器都能利用多個片選信號(CS0~CS2)連接多個被動SPI設備。在CV520和ST設備中,CS為片選信號,SCK為時鐘信號,MOSI為數據輸出線,MISO為從設備數據輸出。
CV520主程序設計主要包括兩個模塊:無線模組公司遠距離WiFi模組Wifi網絡配置模塊和線程與隊列模塊。而Wifi網絡配置模塊負責網絡的配置,線程和隊列模塊負責實現無線數據采集系統的主要功能,即:SPI數據采集和網絡數據發送。主要程序的設計過程具體包括以下幾步:1。程序的初始化:NVS存儲器的初始化和Wifi模式的配置。2.連接網絡,Wifi網絡配置模塊連接到指定的AP,并獲取AP分配的IP。3.創建三個線程:SPI數據接收線程被用來調用SPI底層驅動,以接收STM32F407發送的數據和緩存;數據發送線程創建Socket與上位PC的
無線通訊連接模組,和SPI接收線程協作,向主機發送數據;WEB服務器線程向主機提供信息查詢、使得計算機能夠通過瀏覽器在CV520上獲得運行信息。
無線模組公司遠距離WiFi模組CV520芯片支持高速、穩定的WIFI通訊,支持三種模式:"AP"、"STA"、"AP+STA"。該方案采用STA模式,利用WIFI_init_sta()函數來配置STA模式。您需要配置WIFI帳號和口令來連接到指定的AP,然后才能進入STA模式。STA模式配置STA模式的配置流程顯示了整個配置過程,使用函數WIFI_init_sta()完成STA模式配置,具體包括:創建用于在WIFI連接期間識別各種標志位的事件組標志。初始化硬件/軟件:使用"tcpip_adapter_init()"函數來初始化TCP/IP適配層,用'event_loop_init()初始化事件調度器'清空IP信息,讓事件回調函數從初始位置判斷標志位。WIFI模塊的底層參數信息通過“WIFI_init_config_tcfg=WIFI_INIT_CONFIG_DEFAULT()”語句對WIFI模塊進行初始化。配置STA模式參數,將路由器的WIFI帳號、口令數據置于標準變量中。通過"WIFI_set_mode(WIFI_MODE_STA)"設置STA模式;WiFi_set_config(IF_WIFI_STA)WiFi_config)為STA模式設置配置信息;“WIFI_start()”語句啟動WIFI狀態機。
線程化設計以隊列模塊程序為例,主要包括三線程和一個隊列的程序設計。三線程分別是SPI數據采集線程、數據發送線程和WEB服務線程,另外為了保證CV520系統能及時、高效地接收和發送數據,需要使用隊列來保持SPI數據采集線程與數據發送線程之間的數據同步。
通過FreeRTOS的隊列“queue”,實現了SPI數據采集線程與數據發送線程之間的數據同步。其中一個基本原理是,不同的線程任務或者中斷程序都可以使用隊列來向數據寫入數據。事實上,該隊列是一個固定大小的空間,任何線程任務都能讀取和寫入。語句“queue=xQueueCreate(BLOCK_NUM,sizeof(char*))”,該語句用于創建隊列,FreeRTOS為線程的讀取和寫入指定了固定空間。而BLOCK_NUM將存儲的數據單元數目與緩沖存儲器空間數目一致。參數2設置一個數據單元的大小,在線程之間只需要傳遞存儲空間的首地址。SPI數據采集線程程序CV520通過SPI協議與STM32F407進行數據傳輸,后者以一定時間間隔將數據字節發送給CV520。在充分考慮CV520有限的內存和SPI底層驅動機制的前提下,實現了SPI數據采集和線程間數據傳輸;在編程過程中,利用環形緩沖區將大小為M*NBytes、SPI信號線所接收的數據進行存儲。在這里,M是一個單獨的存儲空間,N表示存儲空間的數目。本設計中CV520的SPI底層驅動采用DMA機制,這樣建立的環狀緩沖區要求系統使用DMA存取的存儲器空間。MALLOC_CAP_DMA需要使用heap_caps_malloc函數對單個存儲器空間的選擇好基于每個SPI周期發送數據的長度選擇,也就是M為每個周期SPI發送數據長度的整數倍,同時為確保網絡傳輸效率,在MTU的尺寸盡可能接近于1300(CV520不支持切分,并且碎片會影響效率),每一次發送長度是64Bytes,所以選擇M為64*20=1280Bytes,存儲空間的數目是N,從理論上選擇N越大,系統運行中的緩存空間越大,SPI接收出錯的概率就越低,但是因為CV520的內存空間有限,N會影響其它線程,實驗中選擇N是5。SPI數據采集程序主要包括:SPI驅動的初始化、初始環形緩沖的初始化、SPISlave讀取程序。SPISlave驅動器通過操縱DMA和SPI控制器與SPIMaster進行通訊,為應用程序提供訪問接口,詳細的數據結構和程序設計可供參考。SPISlave的讀取器流程是:1.循環調用spi_slave_transmit,通過spi_slave_interface_config_transmit將當前緩沖區和接收數據信息指定給底層驅動,SPI接收開始,線程進入掛起狀態等待接收結束。2.在接收結束之后,線程繼續運行,通過xQueueSendToBack將接收到的數據所在存儲空間的一地址加入隊列。將當前緩沖區切換為下一個環形緩沖區重復。
在STA模式下,數據發送線程設計了Socket接口和上位機建立通訊連接的兩種方法,即“TCP模式”和“UDP模式”。TCP模式下傳輸的數據不易丟失,而UDP模式傳輸的數據易發生誤判,所以這種連接采用TCP方式。在無線模組公司遠距離WiFi模組CV520連接上WIFI并獲得了AP所分配的IP之后,就可以通過Socket接口與上位機進行通信,發送所獲數據。Socket是CV520與主機之間進行通信的接口。CV520主動向上位機發出連接請求,上位機在接通之前打開監聽器的Socket接口,實時監視客戶的請求,一旦連接建立,CV520與上位機就可以進行通訊。CV520與上位機通訊連接建立流程:1.定義下列Sock_fd:"sock_fd"監聽套接口描述符;""client_fd""數據傳輸套接口描述符";"bind_fd"綁定IP/端口套接口描述符。用端口號保存本地IP的本地地址變量"my_addr";定義目標地址變量"client_addr""來保存目標機IP和端口號。2.使用socket(AF_INET,SOCK_STREAM,0)創建Socket監聽。3.用Socket綁定本地IP、端口號、協議類型下面是以下主要程序:my_addr.sin_family=AF_INET;my_addr.sin_port=htons(PORT);my_addr.sin_addr.s_addr=htonl;bind_fd=bind(sock_fd,(structsockaddr*)&my_addrsizeof(my_addr));4.打開監聽Socket,使系統處于監聽狀態,等待主機連接請求用“listen(sock_fd,10)”的語句監聽。通過accept(sock_fd,(structsockaddr*)&client_addr,&sin_size)語句來創建通信socket。6.在確定連接被建立之后,在隊列為空的情況下,調用xQueueReceive讀取隊列,直到該線程處于非空狀態。從隊列中獲得數據存儲空間的首地址,如果隊列是非空的。使用write(newconn,(char*)tmp,BUF_SIZE)將數據發送給主機。如發送失敗則返回-1,程序進入錯誤停止發送程序;如果發送數據成功將返回實際發送的字符數。
Web服務器線程程序設計Web是一種網絡通信協議,是在單一TCP連接上實現全雙工通信的協議。當無線模組公司遠距離WiFi模組CV520連接到WIFI之后,將創建一個WEB服務器線程,用來向主機提供信息查詢。主機發送HTTP請求后,系統會把從SPI接收到的數據和發送的數據信息返回給主機瀏覽器,方便用戶查詢在數據通信過程中是否有報文丟失。WEBServices線程程序設計的主要步驟是:1.創建Socket連接,綁定用于監聽PC機連接的本地IP地址和80端口。在主機發出連接請求后,系統與主機進行連接,建立通信socket。2.CV520讀取由主機發送的請求數據,并將其置于recv_buffer的字符類型數組中,使用strncmp(char*)recv_buffer語句,"GET",3)==0判斷請求報文的前三個字符是否是"GET",若有,則執行以下命令:sprintf(disp、spi:%d;tcp:%d!\r
"spi_count,tcp_count);strcpy(htmldata,htmldata_h);strcat(htmldata,disp);strcat(htmldata,htmldata_t);寫入(conn,htmldatastrlen(htmldata));disp是定制字符類型的數組,用來存儲返回的數據;spi_count將統計系統收到的SPI數據,tcp_count為系統發送給主機的數據;htmldata是一個長度為200的字符類型數組;htmldata_h和htmldata_t定義如下:charhtmldata_h[]="《html>"head><其他需要返回的信息也可由用戶自己定義。
本實驗主要通過兩塊開發板進行系統搭建,一塊是CV520-DevKitC,一塊是Ai-ThinkerIDEV1.0,另一塊是SPI連接到兩個開發板。因為只需要單向發送,除去VCC和地線,只需要連接三條線。利用杜邦線按照電路接線連接好實物,硬件設備連接完畢后顯示。其中每一色的杜邦線對應一條接線,黑色為地線,綠色為串行鐘信號線,橙色為MOSI數據線,黃色為片選信號線。這個試驗主要是驗證無線模組公司遠距離WiFi模組CV520和Wifi之間的連接是否正常,以及是否可以正常接收SPI數據,通過WiFi將數據發送給上位機,同時計算數據傳輸過程中的速率和丟包率。先測試CV520和WiFi的連接,CV520輸出可通過串口調試工具進行打印,清楚地顯示CV520當前正在運行的連接狀態;在系統連接上電之后,即進入準備狀態,按下CV520RST鍵,CV520自動連接到WiFi。從串口調試工具可以看到整個WiFi連接過程,可以看出,CV520系統首先是STA模式配置,在完成STA模式配置之后,輸出當前的用戶名和密碼,然后AP為它分配IP地址。如果打印獲得IP地址,就表明CV520連接AP成功,AP為192.168.2.30分配IP地址。使用串口打印的提示信息可以看到CV520系統的準備過程,其中,spi_taskon表示SPI數據接收線程打開;Data_trans_taskon表示數據發送線程打開;Da-ta_trans_tasklisten和Initial_SPIDone表示CV520系統已打開SPI的監聽端口,并完成SPI初始化配置;Http_taskon指示WEB服務線程打開;Data_trans_taskaccept表示CV520系統與上位機已建立TCP連接且能夠開始傳輸數據。如果你能看到由上位機接收的數據總字節的數目是38400Bytes,而且數據在從0開始到2之后又重新設置為0。主機會以.dat格式以.dat格式保存接收的數據,打開該文件可查看具體接收數據,每個數據間隔0.001,無需考慮浮點數存儲錯誤。為了檢驗發送過程的成功率,接收和發送的數據量可通過瀏覽器訪問CV520系統獲得:其中spi:384000Bytes表明CV520系統從STM32F407接收到的SPI數據是384000Bytes。tcp:384000Bytes是指由TCP連接發送到CV520系統的數據,CV520系統接收到的數據量與發出的數據量一致,而且通過上位機軟件可以看到上位機接收的總數據也是384000Bytes,CV520系統通過Wifi向主機發送的數據與上位機接收的數據一致,結果表明,在無線傳輸過程中數據沒有丟失,丟失率為0%。另從可見的6.01S數據的接收時間為6.01S,經計算得出數據的傳輸速率為62.5KB/s(500Kbps)。試驗結果表明,該設計方案是可行的。
例如,以ST連接CV520,CV520通過WIFE連接主機,對無線模組公司遠距離WiFi模組CV520無線網絡配置中的數據收發程序進行了詳細的設計和說明,與此同時,為CV520系統設計了WEB服務程序,方便上位機查詢信息。進行了硬件平臺測試,驗證了應用程序的正確性和驅動性能。試驗結果表明,該無線數據采集與傳輸系統程序設計合理,使用方便,但其性能有待進一步優化和提高。今后還會進一步優化軟硬件設計,提高抗干擾能力和數據傳輸效率,改善系統性能。