劉袁夢(mèng)++黃文彬++許小郡++毋茂盛
摘 要:隨著互聯(lián)網(wǎng)的發(fā)展,網(wǎng)上購(gòu)物成為人們?nèi)粘I畹囊徊糠郑绾芜h(yuǎn)程接收快遞的問(wèn)題變得日益突出,文中設(shè)計(jì)了一個(gè)快遞物品遠(yuǎn)程自動(dòng)接收系統(tǒng),介紹了系統(tǒng)的功能以及軟件和硬件實(shí)現(xiàn)的方法。
關(guān)鍵詞:快遞;藍(lán)牙;互聯(lián)網(wǎng);遠(yuǎn)程自動(dòng)接收
中圖分類(lèi)號(hào):TN919;TP31 文獻(xiàn)標(biāo)識(shí)碼:A 文章編號(hào):2095-1302(2016)12-00-03
0 引 言
目前,網(wǎng)購(gòu)已成為億萬(wàn)網(wǎng)民生活中不可或缺的一部分,2015年“雙十一”期間,淘寶的成交額達(dá)到了912億元。近年來(lái),快遞行業(yè)成為一個(gè)爆發(fā)式增長(zhǎng)的行業(yè)[1],據(jù)統(tǒng)計(jì),我國(guó)的快遞業(yè)務(wù)量已居世界第三位。如何有效地接收快遞變成了日益突出的問(wèn)題。為了解決這個(gè)問(wèn)題,本課題設(shè)計(jì)開(kāi)發(fā)了一個(gè)物品遠(yuǎn)程接收系統(tǒng),當(dāng)物主在上班或出差時(shí),可以通過(guò)互聯(lián)網(wǎng)遠(yuǎn)程控制快遞物品接收箱。當(dāng)有快遞物品送到物主門(mén)口時(shí),物主可以通過(guò)辦公室的電腦端程序控制快遞箱上的電插鎖打開(kāi)或關(guān)閉,實(shí)現(xiàn)遠(yuǎn)程接收快遞物品。
1 系統(tǒng)的工作原理與結(jié)構(gòu)
1.1 工作原理
當(dāng)有快遞到達(dá)時(shí),物主通過(guò)運(yùn)行在辦公室電腦上的軟件以及互聯(lián)網(wǎng)遠(yuǎn)程打開(kāi)儲(chǔ)物箱,并通過(guò)IP攝像頭實(shí)時(shí)對(duì)儲(chǔ)物箱進(jìn)行遠(yuǎn)程監(jiān)視,確保物品存入儲(chǔ)物箱。物主回家時(shí),通過(guò)手機(jī)打開(kāi)儲(chǔ)物箱取出物品。
1.2 系統(tǒng)整體結(jié)構(gòu)
系統(tǒng)主要由硬件和軟件兩部分組成。軟件部分包括運(yùn)行在辦公室電腦上的遠(yuǎn)程監(jiān)控軟件、運(yùn)行在手機(jī)中的開(kāi)箱軟件以及儲(chǔ)物箱電路板控制軟件。系統(tǒng)硬件主要由電腦、IP攝像頭、手機(jī)、控制電路板以及儲(chǔ)物箱等組成。其整體結(jié)構(gòu)如圖1所示。
2 系統(tǒng)實(shí)現(xiàn)
2.1 硬件設(shè)計(jì)
本系統(tǒng)使用的硬件雖多,但真正需要開(kāi)發(fā)的是儲(chǔ)物箱的控制電路板,該電路板通過(guò)互聯(lián)網(wǎng)接收遠(yuǎn)程開(kāi)箱命令,通過(guò)驅(qū)動(dòng)電路控制繼電器打開(kāi)儲(chǔ)物箱電控鎖,并檢測(cè)電控鎖是否打開(kāi)。由于AT89S51單片機(jī)有許多優(yōu)點(diǎn)[2],所以電路板將AT89S51單片機(jī)作為主控芯片,單片機(jī)和W5100網(wǎng)絡(luò)模塊、HC-06藍(lán)牙模塊、驅(qū)動(dòng)電路、繼電器以及電控鎖共同構(gòu)成儲(chǔ)物箱的控制硬件。W5100網(wǎng)絡(luò)模塊通過(guò)SPI方式與單片機(jī)通信,其內(nèi)部集成了全硬件的TCP/IP協(xié)議棧,使用方便,通過(guò)Socket編程即可實(shí)現(xiàn)對(duì)其的訪問(wèn)。儲(chǔ)物箱控制板的電路框圖如圖2所示。
2.1.1 互聯(lián)網(wǎng)接口
互聯(lián)網(wǎng)上傳送的信息有其自己的格式,單片機(jī)無(wú)法直接接收,為了方便,本系統(tǒng)采用W5100網(wǎng)絡(luò)模塊,將W5100與家里的路由器相連,接收到遠(yuǎn)程接收PC端程序通過(guò)互聯(lián)網(wǎng)發(fā)送過(guò)來(lái)的命令時(shí),通過(guò)SPI總線轉(zhuǎn)發(fā)給AT89S51單片機(jī)。單片機(jī)識(shí)別收到的命令后,發(fā)送一個(gè)信號(hào)給繼電器以控制電插鎖的12電源,以實(shí)現(xiàn)開(kāi)關(guān)箱的操作。此外,電插鎖對(duì)外擁有5條線,2條為12 V電源線,3條為表示電插鎖開(kāi)關(guān)狀態(tài)的線。單片機(jī)通過(guò)另外3條線可以了解電插鎖的開(kāi)關(guān)狀態(tài)。
2.1.2 藍(lán)牙接口
隨著通信技術(shù)和電子技術(shù)的快速發(fā)展,目前手機(jī)已成為生活中必備的工具,幾乎人手一機(jī)。手機(jī)的應(yīng)用已擴(kuò)展到控制領(lǐng)域,如用于門(mén)禁系統(tǒng)[3]。為了節(jié)省成本和便于操作,儲(chǔ)物箱省去了鍵盤(pán)以及LED或LCD顯示器,直接用手機(jī)來(lái)充當(dāng)儲(chǔ)物箱的外設(shè)。手機(jī)具有藍(lán)牙通信功能,本系統(tǒng)通過(guò)手機(jī)和儲(chǔ)物箱電路控制板上的HC-06藍(lán)牙模塊直接交換信息,以打開(kāi)儲(chǔ)物箱的電插鎖。
為了方便用戶隨時(shí)查看快遞箱的狀況,系統(tǒng)還增加了一個(gè)IP攝像頭,這樣用戶就可以在電腦前實(shí)時(shí)了解快遞箱動(dòng)態(tài)。
2.2 軟件開(kāi)發(fā)
本系統(tǒng)的軟件主要包括運(yùn)行在辦公室電腦上的遠(yuǎn)程計(jì)算機(jī)監(jiān)控軟件、運(yùn)行在手機(jī)中的開(kāi)箱軟件以及儲(chǔ)物箱電路板控制軟件。
2.2.1 計(jì)算機(jī)監(jiān)控軟件的開(kāi)發(fā)
計(jì)算機(jī)監(jiān)控軟件主要有遠(yuǎn)程打開(kāi)儲(chǔ)物箱與實(shí)時(shí)采集監(jiān)視圖像的功能,確保物品能存入儲(chǔ)物箱中。軟件運(yùn)行界面如圖3所示。
2.2.1.1 網(wǎng)絡(luò)遠(yuǎn)程控制編程
網(wǎng)絡(luò)編程主要用到Socket通信技術(shù),桌面程序作為Socket服務(wù)器端,單片機(jī)作為Socket客戶端??刂泼钜?jiàn)表1所列。
服務(wù)端核心代碼如下:
try (ServerSocket s = new ServerSocket(8189)) {// 等待 Socket 連接
try (Socket incomming = s.accept()) {
InputStream inStream = incomming.getInputStream();
OutputStream outStream = incomming.getOutputStream();
try (Scanner in = new Scanner(inStream)) {
PrintWriter out = new PrintWriter(outStream, true);
while (in.hasNext()) {
String line = in.nextLine();
if ("STATUS_OPEN".equals(line.trim())) {
// 控制程序界面顯示電控鎖狀態(tài)為開(kāi)
} else if ("STATUS_CLOSE".equals(line.trim())) {
// 控制程序界面顯示電控鎖狀態(tài)為關(guān)
}
}
}
}
}
2.2.1.2 圖像采集編程
實(shí)時(shí)監(jiān)視的圖像采集主要通過(guò)遠(yuǎn)程連接IP Camera并調(diào)用其二次開(kāi)發(fā)API來(lái)實(shí)現(xiàn)。本系統(tǒng)中圖像采集是借助于海康威視的IP Camera網(wǎng)絡(luò)攝像機(jī)實(shí)現(xiàn)的,此網(wǎng)絡(luò)攝像機(jī)具有實(shí)時(shí)監(jiān)視,圖像、視頻、音頻采集,云臺(tái)控制,報(bào)警等多種功能。設(shè)定好IP Camera的IP地址后,客戶端程序通過(guò)網(wǎng)絡(luò)連接其IP地址并設(shè)置好端口號(hào),登錄信息即可通過(guò)API連接至攝像機(jī)。
監(jiān)控程序用到的主要API:
HI_SDK_Init ();//初始化API庫(kù)
HI_SDK_Login (const HI_CHAR*, const H_CHAR*, const H_CHAR*, HI_U16, HI_S32);//連接攝像機(jī)
HI_SDK_RealPlay(HI_HANDLE, HI_VOID*, HI_S_STREAM_INFO*);//實(shí)時(shí)監(jiān)視
HI_SDK_CaptureJPEGPicture(HI_HANDLE, HI_CHAR*);//抓拍JPEG格式圖片
HI_SDK_StartRecord(HI_HANDLE,HI_CHAR*,F(xiàn)ILE_FORMAT_E,MEDIA_TYPE_E,HI_S32);//錄制視頻
HI_SDK_StopRecord(HI_HANDLE);//停止錄制
HI_SDK_Playback(HI_CHAR*, HI_VOID);//錄像回放等
部分功能實(shí)現(xiàn)程序段如下:
(1)連接IP Camera程序段
BYTE f1, f2, f3, f4;
((CIPAddressCtrl*)GetDlgItem(IDC_IPADDRESS1))->GetAddress(f1,f2,f3,f4);//獲取IP地址
adrr.Format(_T("%d.%d.%d.%d"), f1, f2, f3, f4);
USES_CONVERSION;
m_Handle=HI_SDK_Login(T2A(adrr),T2A(userName),T2A(passWord),80);//連接攝像機(jī)
(2)實(shí)時(shí)監(jiān)視程序段
HI_S_STREAM_INFO info;//設(shè)置圖像顯示參數(shù)
info.u32Channel = HI_CHANNEL_1;
info.blFlag = HI_TRUE;
info.u32Mode = HI_STREAM_MODE_TCP;
info.u8Type = HI_STREAM_ALL;
HI_SDK_RealPlay(m_Handle,GetDlgItem(IDC_STATIC_Camera)->m_hWnd,&info);//圖像采集并顯示
(3)抓拍圖像程序段
CString FileName = CTime::GetCurrentTime().Format
("picture_%y_%m_%d_%H_%M_%S.bmp") ;//文件名
CString a;
a.Format(_T("%s\\picture\\%s"), s, FileName);//文件路徑
USES_CONVERSION;
char *path = T2A(a);
HI_SDK_CapturePicture(m_Handle,path);//抓拍
(4)錄像程序段
CString FileName = CTime::GetCurrentTime().Format(
"video_%y_%m_%d_%H_%M_%S.avi");//文件名
CString a;
a.Format(_T("%s\\record\\%s"), s, FileName);//文件路徑
char *path = T2A(a);
e = MEDIA_VIDEO;
HI_SDK_StartRecord(m_Handle, path, FILE_FORMAT_AVI, e, 0);//錄像
2.2.1.3 手機(jī)開(kāi)箱軟件開(kāi)發(fā)
開(kāi)箱軟件通過(guò)藍(lán)牙技術(shù)和儲(chǔ)物箱電路板控制軟件交換信息,進(jìn)行現(xiàn)場(chǎng)開(kāi)箱;本系統(tǒng)開(kāi)發(fā)的手機(jī)開(kāi)箱軟件基于Android系統(tǒng)。藍(lán)牙通信程序的基本流程為藍(lán)牙設(shè)備搜索、藍(lán)牙設(shè)備連接和藍(lán)牙通信三個(gè)部分。程序中主要用到了BluetoothAdapter類(lèi)、BluetoothDevice類(lèi)、BluetoothServerSocket類(lèi)以及BluetoothSoc ket類(lèi)等。
(1)藍(lán)牙設(shè)備搜索
需要先在AndroidManifest.xml中聲明權(quán)限:
然后調(diào)用BluetoothAdapter類(lèi)的getDefaultAdapter()方法獲取藍(lán)牙設(shè)備。
BluetoothAdapter bAdapter = BluetoothAdapter.getDefaultAdapter();
if(bAdapter == null) {
//設(shè)備不支持藍(lán)牙功能
}
最后使用BluetoothAdapter的startDiscovery()方法搜索藍(lán)牙設(shè)備。
(2)藍(lán)牙設(shè)備連接
只有當(dāng)客戶端程序的通用唯一識(shí)別碼(Universally Unique Identifier,UUID)和服務(wù)器端的UUID相同時(shí)才能連接。本系統(tǒng)通過(guò)BluetoothSocket來(lái)創(chuàng)建藍(lán)牙連接,該過(guò)程要使用兩個(gè)類(lèi),分別為BluetoothServerSocket和BluetoothSocket。
服務(wù)器端藍(lán)牙連接方法是:
①啟動(dòng)服務(wù)器
BluetoothAdapter bAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothServerSocket serverSocket =
bAdapter.listenUsingRfcommWithServiceRecord(YOUR ERVER NAME, YOUR UUID);
②服務(wù)器監(jiān)聽(tīng)客戶端連接
serverSocket.accept();
客戶端藍(lán)牙連接方法:
a.獲取服務(wù)器端藍(lán)牙設(shè)備BluetoothDevice。
b.客戶端與服務(wù)器連接
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(YOUR UUID);
socket.connect();
由于服務(wù)器端進(jìn)行監(jiān)聽(tīng)客戶端連接(BluetoothServerSocket.accept())和客戶端對(duì)服務(wù)器的連接(BluetoothSocket.connect())都會(huì)阻塞線程,因此都使用新的線程。
③藍(lán)牙通信
當(dāng)兩臺(tái)藍(lán)牙設(shè)備建立好連接之后,就可以進(jìn)行數(shù)據(jù)傳輸。藍(lán)牙通信采用流形式進(jìn)行數(shù)據(jù)傳輸,為此使用以下兩個(gè)方法分別獲得輸入流和輸出流:
BluetoothSocket:BluetoothSocket.getInptuStream();//獲取輸入流:
BluetoothSocket.getOutputStream();//獲取輸出流
使用下列程序段實(shí)現(xiàn)數(shù)據(jù)的讀、寫(xiě):
讀數(shù)據(jù)(InptuStream)
InputStream reader = socket.getInputStream();
byte[] buffer = new byte[1024];
int n = reader.read(buffer); //監(jiān)聽(tīng)輸入流
寫(xiě)數(shù)據(jù)(OutputStream)
BluetoothDevice device; //連接的藍(lán)牙設(shè)備
BluetoothSocket socket = device.createRfcommSocketToServiceRecord(YOUR UUID);
socket.connect(); //線程阻塞
OutputStream writer = socket.getOutputStream(); //獲取藍(lán)牙連接輸出流
writer.write((YOUR DATA).getBytes()); //發(fā)送數(shù)據(jù)到服務(wù)器
(3)控制軟件開(kāi)發(fā)
控制軟件的功能主要是接收開(kāi)鎖命令,實(shí)現(xiàn)開(kāi)關(guān)電插鎖??刂栖浖ision4由C51編寫(xiě),W5100網(wǎng)絡(luò)模塊帶有SDK,編程十分方便。
3 結(jié) 語(yǔ)
本文運(yùn)用多種技術(shù)設(shè)計(jì)開(kāi)發(fā)了快遞遠(yuǎn)程接收系統(tǒng),有較高的技術(shù)含量和實(shí)際意義,特別是用手機(jī)作為儲(chǔ)物箱輸入和輸出設(shè)備這一想法為業(yè)界提供了一種全新的產(chǎn)品設(shè)計(jì)思路,對(duì)以后產(chǎn)品的設(shè)計(jì)有一定的指導(dǎo)意義。設(shè)計(jì)的接收系統(tǒng)經(jīng)實(shí)驗(yàn)室運(yùn)行,穩(wěn)定可靠,完全可以滿足用戶遠(yuǎn)程接收物品的需要。
參考文獻(xiàn)
[1] 路宏偉.快遞信息推送技術(shù)設(shè)計(jì)及實(shí)現(xiàn)[J].物聯(lián)網(wǎng)技術(shù),2016,6(1):54-55.
[2] 毋茂盛,張建平,張素群,等.單片機(jī)原理與開(kāi)發(fā)[M].北京:高等教育出版社,2015.
(下轉(zhuǎn)第頁(yè))
(上接第頁(yè))
[3] 惠春陽(yáng),陳志浩,胡婷婷,等.基于WiFi與智能手機(jī)的門(mén)禁系統(tǒng)[J].物聯(lián)網(wǎng)技術(shù),2016,6(3):7,9.
[4]胡越,周騰鶴,梁東升.基于藍(lán)牙的安卓平臺(tái)智能燈控制系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[J].物聯(lián)網(wǎng)技術(shù),2016,6(5):14-16.
[5]張貴彬,趙子恒.“互聯(lián)網(wǎng)+”在物流業(yè)發(fā)展中的應(yīng)用[J].環(huán)球市場(chǎng)信息導(dǎo)報(bào),2016(6):87.
[6]付寶玉.基于NFC技術(shù)的自助收發(fā)快遞系統(tǒng)應(yīng)用研究[J].物聯(lián)網(wǎng)技術(shù),2016,6(10):59-62.
[7]靳世杰.企業(yè)物流管理系統(tǒng)設(shè)計(jì)與開(kāi)發(fā)[D].北京:北京工業(yè)大學(xué),2014.
[8]張哲瑞.快遞物流管理系統(tǒng)的設(shè)計(jì)與開(kāi)發(fā)[D].秦皇島:燕山大學(xué),2015.