陳偉漢 吳可測 陳燦華 鄧堅成 方銳凱 毋茂盛



摘 要:隨著移動互聯網技術的發展,越來越多的人喜歡線上購物和叫外賣,快遞和外賣量快速增長,無法及時準確接收快遞或外賣的問題日益突出。針對這個問題,設計一款基于手機的遠程控制收納系統,該系統基于安卓平臺開發了具有圖像實時顯示及給收納箱發送指令的APP,基于阿里云服務器搭建了nginx-rtmp流媒體服務器,基于STM32開發了一套硬件控制系統。文中先是介紹了系統的結構和工作原理,然后,論述了相關的硬件設計以及云服務器開發方法,最后,討論了手機APP的程序的設計。
關鍵詞:外賣收納箱;遠程監控;STM32;遠程接收;物聯網技術;云服務器
中圖分類號:TP393.06文獻標識碼:A文章編號:2095-1302(2020)04-00-03
0 引 言
當前手機已經成為人們的第二伴侶,用手機進行網購和叫外賣已經成為很多人的生活習慣,據新華網消息,2018年移動寬帶用戶總數已達13.1億戶,其中,網購用戶規模達
6.1億。我國的快遞業務量,2018年達到507億件,持續保持世界第一,外賣量也同樣驚人。因此,如何及時準確接收快遞或外賣的問題變得日益突出[1]。為了解決這個問題,本文設計開發了一款用手機遠程控制的收納系統。當物主不在家或者不方便出門接收物品時,可以通過手機APP遠程控制收納箱,實現遠程接收快遞或外賣物品。
1 系統的結構與工作原理
1.1 系統整體結構
系統的整體結構如圖1所示。
系統主要由手機控制端、阿里云服務器、收納箱三大部分組成。手機控制端包括安卓手機及安卓APP;服務端包括服務端處理程序和數據庫;收納箱包括雙控門箱子、控制電路以及相關控制程序。
1.2 工作原理
首先,手機APP進入綁定功能模塊,通過掃描二維碼與收納箱中主控電路板上的WiFi模塊連接,配置收納箱連接的家中路由器的賬號密碼。同時主控芯片將賬號和密碼通過串口分享給圖像采集模塊完成設備的綁定配置。然后,收納箱通過互聯網連接阿里云服務器開始輪詢,不斷向服務器發送狀態信息,并查詢服務器的指令信息。
接著手機APP注冊登錄,開始連接云服務器,服務器中的數據庫會保存用戶的注冊信息。APP運行過程中會輪詢檢查設備的狀態信息,并將狀態信息顯示在手機APP的設備控制界面上。當用戶點擊控制按鈕后,APP會向服務器發送相關的指令,電子收納箱輪詢到指令后便立即執行指令,實現開、關攝像頭以及收納箱門操作;然后,將執行結果返回給服務器;最終在APP設備控制界面上顯示操作結果。
2 系統實現
2.1 電子收納箱設計
電子收納箱控制電路主要包括:主控電路板、圖像采集模塊、門控制模塊等。硬件組成結構如圖2所示。
主控電路板采用STM32作為主控芯片控制雙路繼電器分別接通開門驅動和關門驅動單元;攝像頭模塊主要由硬件電路及專用攝像頭組成,受主控芯片控制,負責攝像信息的采集、傳輸,控制采集圖像上傳至服務器;門控制模塊由步進電機、傳統鎖、電鎖等組成,實現收納箱門的打開和關閉。
2.1.1 主控電路板開發
主控電路板采用STM32作為主控芯片,該芯片具有睡眠、停止、待機三種低功耗工作模式,使用方便,功能強
大[2]。主控電路板通過串口和WiFi模塊與圖像采集模塊相連。另外,擴展了8個I/O口,5個用于輸出,3個用于輸入。輸出口分別用于控制步進電機脈沖、旋轉方向、步進電機電源、電鎖的開關、WiFi指示燈;3個輸入口分別用于檢測門的狀態、攝像頭的狀態和重置按鍵的狀態。重置鍵用于WiFi賬戶和密碼的重置。主控電路板程序設計框圖如圖3所示。
2.1.2 圖像采集模塊
圖像采集模塊通過串行口與主控電路板連接,完成WiFi配置以及指令接收和返回狀態。同時,將采集的圖像信息上傳至服務器。
2.1.3 門控制模塊
門控制模塊由插梢、傳統鎖、電鎖、電機、牽引線、傳感器等組成。當設備故障或者停電時,物主用傳統方式可以開鎖。電鎖用于遠程的開、關收納箱。傳感器用于采集門的當前狀態信息。
2.2 服務器開發設計
用阿里云服務器[3]配置tomcat,創建MySQL數據庫[4]以及搭建nginx-rtmp環境[5],進行視頻推流。用Eclipse創建Web項目等。
2.2.1 數據庫開發
創建數據庫[6],添加用戶信息表,存儲客戶信息,如賬號、密碼、密保、電話、地址等;添加指令表,存放控制收納箱及攝像頭的指令及狀態。
2.2.2 Web程序設計
采用Java語言編寫連接數據庫及操作數據庫代碼[7]。注冊、登錄、修改密碼以及傳送指令等操作均通過數據庫的增刪查改實現。注冊程序部分代碼如下:
try{
con=DriverManager.getConnection(uri,"root","111");
String condition= "insert into member (logname,password,mibao,phone,mailbox) values ('"+logname+"','"+password+"','"+mibao+"' ,'"+phone+"' ,'"+mailbox+"' )";
sql = con.prepareStatement(condition);
int rSet = sql.executeUpdate(condition);
if(rSet!=0) {
out.println("registersuccessfully!");}
else {
out.println("can not register!");}
con.close();
}
2.3 安卓APP設計
據統計,目前安卓系統的市場占有率[8]達到76%。所以,在移動端開發軟件進行遠程控制箱子更加方便操作。
本系統APP采用Java語言基于MVC模式[9]開發,APP主要功能包括:登錄注冊,找回和修改密碼,掃描二維碼讀取設備信息并連接設備,設置設備連接家用WiFi賬號密碼,連接服務器獲取攝像頭視頻信息并顯示,獲取設備狀態信息并通過燈泡亮滅顯示,發送開關門和攝像頭指令等。APP功能設計框圖如圖4所示。
2.3.1 用戶信息模塊
用戶信息模塊包括:登錄、注冊、密碼修改以及指令的處理。用戶通過文本輸入框錄入信息,APP通過TCP/IP協議[10]將信息上傳至云服務器,實現對用戶信息的處理和指令的中轉。與服務器通信部分代碼如下:
URL url = new URL(path);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setRequestMethod("GET");//獲取服務器數據
connection.setReadTimeout(8000);//設置讀取超時的毫秒數
connection.setConnectTimeout(8000);//設置連接超時的毫秒數
InputStream in = connection.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
result = reader.readLine();
//讀取服務器進行邏輯處理后頁面顯示的數據
connection.disconnect();
2.3.2 綁定設備程序設計
通過掃描二維碼連接設備后,可配置設備連接路由器的賬戶密碼,并進行設備的綁定。
手機與箱子的通信采用WiFi熱點連接,用Socket封裝信息。部分代碼如下:
socket = new Socket(HOST,8080);
PrintStream ps = new
PrintStream (socket.getOutputStream());
ps.println(content);
2.3.3 控制設備程序設計
控制界面包含顯示區域和控制區域。頂部是攝像頭和門狀態的指示燈,中間是視頻顯示區域,下方是控制按鈕。
通過輪詢服務器,手機APP可以不斷獲取收納箱的狀態信息。每個按鈕對應一種控制指令,按下時會發送指令給服務器,服務器修改數據庫指令表,箱子查詢到指令后便執行。指令的上傳與用戶信息上傳類似,這里不再累贅,部分APP輪詢代碼如下:
new? Thread(() -> {
while (true) {
try {Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();}
try {Trans alwaystrans = new Trans(urlpath); String url_result = alwaystrans.get();
if (url_result.equals("0 btn_chat_check")||url_result.equals("btn_chat_check btn_chat_check")||url_result.equals("2 btn_chat_check"))
{ivState.setImageResource(R.drawable.sxtclose);}if (url_result.equals("0 2")||url_result.equals("btn_chat_check 2")||url_result.equals("0 2")) {ivState.setImageResource(R.mipmap.sxtopen);}} catch (Exception e) {
e.printStackTrace();}
}
}).start();
程序運行界面如圖5所示。
3 結 語
本文設計了一套用手機遠程控制收納箱接收外界物品的系統,箱子具有傳統開鎖功能,視頻信息可上傳至服務器,并由服務器推流,經過不斷的進行代碼優化,將視頻延時控制在3 s內。
注:本文通訊作者為毋茂盛。
參考文獻
[1]劉袁夢,黃文彬,許小郡,等.快遞物品遠程自動接收系統設計與開發[J].物聯網技術,2016,6(12):86-88.
[2]張勇.ARM Cortex-M3嵌入式開發與實踐:基于STM32F103[M].北京:人民郵電出版社,2017.
[3]基夫·莫里斯.基礎設施即代碼云服務器管理[M].北京:人民郵電出版社,2018.
[4]明日科技.MySQL從入門到精通[M].北京:清華大學出版社,2017.
[5]卓郎科技技術團隊.直播系統開發:基于Nginx-rtmp-module[M].北京:電子工業出版社,2019.
[6]萬常選,廖國瓊,吳京慧,等.數據庫系統原理與設計[M].3版.
北京:清華大學出版社,2009.
[7]張延軍,王保民,何月梅,等.Java程序設計教程:微課·實訓·課程設計[M].北京:清華大學出版社,2017.
[8]郭金尚.Android經典項目案例開發實戰寶典[M].北京:清華大學出版社,2013.
[9]何成萬,余秋慧.MVC模型2及軟件框架Structs的研究[J].計算機工程,2002,28(6):274-275.
[10]謝希仁.計算機網絡簡明教程[M].3版.北京:電子工業出版社,2017.
作者簡介:陳偉漢(1997—),男,廣東人,本科。
吳可測(1999—),男,廣東人,本科。
陳燦華(1999—),男,廣東人,本科。
鄧堅成(1999—),男,廣東人,本科。
方銳凱(1998—),男,廣東人,本科。
毋茂盛(1963—),男,河南人,博士,教授,主要研究方向為嵌入式技術。