余佳琦,楊 麗,楊嶺玉,段海龍
(1.天津職業技術師范大學自動化與電氣工程學院,天津 300222;2.天津職業技術師范大學天津市信息傳感與智能控制重點實驗室,天津 300222)
物聯網是新時代信息技術的重要成員之一。傳統網絡指互聯網,互聯網可以將多臺電腦通過無線網絡或者通訊線路連接起來,而物聯網則是通過智能組網和智能傳輸技術將物與物連接起來。物聯網經過長時間的發展,已對物體具備感知能力,并且可以在物與物之間進行可靠的信息傳遞,以及具備智能處理信息的能力[1]。現今信息的遠程通訊和對智能設備的遠程操控可以通過WI-FI 技術實現,這為人們的生活提供了極大的便利,在普通商店中每一臺結賬時用到的掃描器都連接著一臺電腦來存儲數據,這種情況下難以對所有數據進行收集和查詢,并且需要連接多臺電腦,造成了資源浪費。基于此問題,本文提出將多臺二維碼掃描器通過ESP8266 連接到同一個服務器上,實現了數據的匯總,方便了數據的查詢和收集,節省了資源。
系統設計框圖如圖1 所示。20 個二維碼掃描器分別與一個數據轉發模塊相連,將掃描到的二維碼信息通過WI-FI 傳輸到PC 端。系統采用ESP8266WI-FI芯片進行數據的傳輸[2],ATMEGA16A 單片機作為控制芯片,單片機通過發送AT 指令使WI-FI 模塊連接到服務器[3],之后再控制繼電器斷開單片機TXD 與WI-FI 模塊RXD 的連接,這時二維碼掃描器就可以掃描二維碼并將信息傳到服務器并記錄到Access 數據庫中。上位機使用visual studio 2008 MFC 搭建的服務器,采用ADO 技術連接訪問數據庫。

圖1 系統設計框圖
數據轉發模塊如圖2 所示。選用ATMEGA16A 單片機作為控制芯片配置WI-FI 模塊,由于單片機TXD與MAX232 的T1LN 電平不同[4],同時連接到WI-FI模塊的RXD 會出現單片機配置完WI-FI 模塊后,二維碼掃描器掃描的信息傳不到服務器的情況,所以采用單片機控制繼電器在配置完成后斷開單片機TXD與WI-FI 模塊RXD 的連接。當電路通電,繼電器閉合,單片機TXD 與ESP8266RXD 接通,單片機開始發送配置指令,配置完成連接到服務器后繼電器斷開,單片機的TXD 與ESP8266 的RXD 斷開連接,此時二維碼掃描器就可以將掃描到的信息傳送到服務器了。焊接完成電路板后給單片機編程,通過串口發送AT指令對ESP8266 進行初始化以及配置,之后每次通電后WI-FI 模塊會自動連接到局域網,只需要由單片機發送連接服務器以及進入透傳模式的指令即可[5]。

圖2 數據轉發模塊
只有在連接服務器后才能成功進入透傳模式,單片機判斷WI-FI 模塊是否返回“OK”以確認WI-FI 模塊是否成功連上服務器,程序采用了查詢中斷的方式,因為“OK”中“K”的十六進制ASKII 碼為0X4B,所以當接收到0X4B 時,表示已經收到“OK”,這時進入中斷并標志位置1,標志位置1 表示服務器已成功連接,并且在主程序中停止發送連接TCP 指令,點亮綠燈,主程序流程如圖3 所示。

圖3 主程序流程
圖形化界面生動形象,用戶對于圖形化界面越發青睞,而移動互聯網的發展,為這類軟件的發展提供了條件[6]。使用visual studio 2008 MFC 搭建的無線信息傳輸系統界面如圖4 所示。
將20 個WI-FI 模塊的IP 固定并編號1-20,開啟服務器后,假設此時9 號WI-FI 模塊連接到服務器時,服務器界面上對應編號的指示燈會點亮,每掃描1次,計件數量會加1,并且重復掃描不累加,操作人員處記錄本次操作人員的姓名,姓名也會隨著掃描數據一起記錄到Access 數據庫中[7],連接Access 數據庫界面如圖5 所示。圖5 中:Num 為掃描次數;ID 為WI-FI模塊編號;Worker 為操作人員姓名;What 為掃描到的信息。
Socket 即為“套接字”,通過Socket 技術可以編寫TCP 服務器實現在2 臺以上的計算機之間進行通訊。套接字編程技術在計算機網絡程序設計中經常被使用,位于互聯網上主機往往需要運行多個服務,在程序設計中需要設定每種服務運行的端口號,根據服務器主機IP 地址和服務器端口號可以確定唯一1 個服務,將每種服務都進行Socket 綁定,接收客戶點發來的連接請求,根據程序邏輯進行不同的處理,服務使用者只需要知道主機的IP 地址和服務的端口號[8]。

圖4 無線信息傳輸系統界面

圖5 連接Access 數據庫界面
通訊程序使用的2 個類分別為CAsyncSocket 和CSocket。類CAsyncSocket 中包含Windows Sockets 的應用程序編程接口,該編程接口實際上是預先編好的函數。而類CSocket 是由CAsyncSocket 所衍生來的,其作為程序員的一個簡單編程模板,極大方便了程序員使用Windows Socket 編寫通訊程序。在類CAsyncSocket中有4 種函數供程序員調用:①構造函數構造對象以及Socket。②屬性函數Attach(),Detach(),FromHandle(),GetLastError(),GetPeerName(),GetsockName()和SetsockOtP(),這些函數是為了獲取網絡和套接字的特定信息。③操作函數Accep(t),AsyncSelec(t),Bind(),Close(),Connect(),IOCtl(),Listen(),Receive(),ReceiveFro-m(),Send(),SendTo()和ShutDown(),這些函數與網絡連接和傳輸有關。④增設函數可重寫回調函數,可以通過調用其所包含的函數實現各種相應的功能[9-10]。本研究所使用的服務器是visual studio 2008 基于MFC 通過改寫以上函數和添加事件而編寫出來的。
Client/Server 是一種數據庫的結構,本文設計的系統是使用這種數據庫結構將多個數據轉發模塊作為客戶端連接到PC 端的服務器[11]。
活動數據對象(active data objects,ADO)可以對數據庫進行訪問,是一種自動化接口技術(基于COM),ADO 技術創建數據庫的使用程序速度非常快[12],也是最節省網絡流量的一種數據庫訪問技術,并且能為數據庫提供質量高的接口。連接數據庫主要有4 步:①導入ADO 動態鏈接庫(msado15.dll),#import"C:\msado15.dll"named_guidsrename_namespace("ADOCG")rename("EOF","EndOfFile")rename("BOF","FirstOfFile")。②設置OLE 和COM 的系統環境。③連接Access 數據庫。④對數據庫進行具體的操作和設置(SQL 語言)[13]。
連接數據庫語言編寫步驟如下:
(1)聲明1 個Connection 指針。
_ConnectionPtrm_pConnection。
(2)創建Connection 對象。
m_pConnection.CreateInstance("ADODB.Connection")。
(3)設置連接字符串,以便指定需要的連接。
CStringstrCon;
strCon.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=%s","yonghu.mdb")。
(4)在m_pConnection 有1 個方法[14]:open,使用open 可以連接數據庫。
m_pConnection->Open((_bstr_t)strCon,("Admin"),(""),adModeUnknown)[15]。
本文設計了一種基于ESP8266 WI-FI 芯片的多臺二維碼掃描器數據無線傳輸匯總系統,以ATMEGA16A 單片機為主控制器,分別從硬件和軟件方面介紹了該系統的可行性以及操作流程。本設計有效地解決了數據過多占用電腦資源的問題,而且使查詢和收集資料變得更加方便、快捷。本系統是物聯網的典型應用,通過改進和完善,可以實現更加多樣化的功能,設計出更加智能化的系統。