陳 垅,葉慶明,李亞靜
(河南科技大學(xué)信息工程學(xué)院,河南 洛陽 471023)
隨著科技的發(fā)展與生活水平的日益提高,交通工具成為了人們?nèi)粘I畹谋匦杵贰R咔檎叩闹饾u放開也使人們對于出行的需求隨即提升。充電樁作為非機(jī)動車出行必不可少的一個公共設(shè)施,也逐漸被人們接受與使用。但在我們?nèi)粘I钪?對充電樁的管理較為混亂,用戶對充電樁產(chǎn)生需求時往往因找不到或沒有空閑充電樁而無法滿足自身的需求,這也對我們?nèi)粘3鲂挟a(chǎn)生了一定的限制。而許多充電樁采取的是線下的即充即用,無法通過手機(jī)等設(shè)備對充電樁的位置、是否空閑等狀態(tài)進(jìn)行遠(yuǎn)程控制,使用效果并不理想。我國交通業(yè)雖然近年發(fā)展飛速,但是充電樁市場的管理及充電樁遠(yuǎn)程定位控制這塊的投入較為稀少。而那些主流公司設(shè)計的App功能較為冗余,操作繁瑣不夠便捷,不利于日常生活的快捷操縱。為解決這一問題,簡化App冗余功能,實(shí)現(xiàn)用戶對充電樁的即點(diǎn)即用、即需即有的需求。基于此特設(shè)計與開發(fā)一款完成遠(yuǎn)程查找租用充電樁以及使用的APP。此項目采用STM32[1]完成功能的實(shí)現(xiàn),并沒有商業(yè)化的模塊功能,例如收費(fèi)和云服務(wù)器存儲。
一般市面上的充電樁APP 分為Web端和Android端。 Web端是商家搭建的服務(wù)器,用來記錄信息。 Android端則是用戶自主安裝的App,讓用戶自行進(jìn)行操作。因為一些在線功能如用戶信息存儲,充電金額繳納等功能不是程序設(shè)計的核心,故本項目對Android端進(jìn)行詳解,暫不分析設(shè)計Web端。該項目的需求主要由以下六大部分組成:
1) 注冊:新用戶可以點(diǎn)擊首頁的注冊按鈕,輸入自己的賬號及密碼,因無Web端,故賬號密碼存入本地數(shù)據(jù)庫。
2) 登錄:用戶輸入自己的賬號與密碼,進(jìn)入地圖頁面。
3) 地圖:在地圖頁面,用戶將會定位自己的位置。
4) 定位手機(jī)與充電樁:點(diǎn)擊搜索按鈕,即可搜索地圖上充電樁的位置。
5) 遠(yuǎn)程控制:用戶點(diǎn)擊地圖上的充電樁按鈕,即可選擇充電與斷電,達(dá)到遠(yuǎn)程控制的效果。
6) 充電記錄:充電結(jié)束后,后臺記錄充電時長。
硬件核心采用STM32,靈感來源于《基于STM32單片機(jī)的智能窗戶設(shè)計》[2]和《ARM嵌入式開發(fā)實(shí)例——基于STM32的系統(tǒng)設(shè)計》[3]。
GPS模塊采用 U-BLOX NEO-6M 模組,見圖1,引腳見圖2,體積小巧,性能優(yōu)異。搭配20.5 dB 高增益LNA芯片,搜星能力強(qiáng)。
圖1 U-BLOX NEO-6M模組圖
圖2 引腳圖
此項目用于硬件編程的軟件為Keil(C51),燒錄軟件使用FLYMCU,串口軟件使用XCOM,如果使用其他串口助手可能控制DTR/RTS導(dǎo)致MCU復(fù)位/程序不運(yùn)行。串口軟件波特率必須是115200,設(shè)備通電后就可以通過串口查看經(jīng)緯度、速度、海拔等信息。在硬件燒錄,焊接好后通過軟件引入的百度地圖API進(jìn)行調(diào)用,使用Java語言進(jìn)行調(diào)控。
目前市面上的無線通信技術(shù)中除了我們?nèi)粘J褂玫乃{(lán)牙技術(shù)之外,還可以使用WiFi進(jìn)行設(shè)備的連接。相比于藍(lán)牙模塊,Wifi模塊的可自定義程度要更強(qiáng),用戶可操作性也更強(qiáng)。在我們的項目中,將使用無線通信的技術(shù),實(shí)現(xiàn)APP端遠(yuǎn)程操控硬件端。
在硬件端,我們使用ESP8266模塊,見圖3。
圖3 ESP8266模塊圖
ESP8266具有一個WiFi透傳模塊。何為透傳?透傳全稱透明傳輸,模糊了輸入和輸出的差別。在數(shù)據(jù)不變的前提下,不同協(xié)議之間的轉(zhuǎn)換可由模塊完成。模塊對于使用者是“透明的”,由此模塊僅對外提供使用的接口。該模塊具有兩種工作模式:STA模式(Station)和AP模式(Access Point)。個別的WiFi模塊具有STA+AP模式,此模式可以從STA 和AP自由切換。
在我們的項目中,主要使用的是STA模式。STA模式,通俗講是將硬件對應(yīng)TCP傳輸協(xié)議中的客戶端。我們可以將手機(jī)視為服務(wù)端,使用AT指令開發(fā),連接手機(jī)和充電樁硬件,達(dá)到發(fā)送信息的效果。
AT指令開發(fā)是利用了ESP8266本身是可編程芯片這一特點(diǎn),我們可以使用出廠時封裝的WiFi協(xié)議棧,通過單片機(jī)串口實(shí)現(xiàn)WiFi模塊的通信。用A9和A10接口輸出連接ESP8266模塊實(shí)現(xiàn)無線通信以便于后面功能的使用。
軟件方面此項目通過Android Studio進(jìn)行開發(fā)。首先解決地圖的調(diào)用問題,此項目調(diào)用了百度地圖API,在百度地圖開放平臺申請使用。
在App端要對地圖sdk進(jìn)行初始化(配置AndroidManifest.xml文件),填寫相關(guān)的信息,初始完成后,即可調(diào)用相關(guān)功能。首先,創(chuàng)建一個地圖容器進(jìn)行使用,在App登錄后顯示地圖主界面,調(diào)用locationService.start();其次通過LocationClient發(fā)起定位,在點(diǎn)擊左上角搜索按鈕后,即可顯示充電樁位置。
對于充電樁,我們可以在無線通信的情況下,對其進(jìn)行充電和停電兩種操作(詳見2.5如何模擬通電與斷電),斷電后,后臺將自動記錄充電時間。
對于登錄界面,我們將使用Button和EditText控件,因該項目暫未涉及Web端,我們將用戶數(shù)據(jù)存入sqlite本地,以此實(shí)現(xiàn)簡單的登錄注冊功能。
對于軟硬件的交互,我們使用MQTT協(xié)議(Message Queuing Telemetry Transport,消息隊列遙測傳輸協(xié)議)。
MQTT協(xié)議構(gòu)建于TCP/IP協(xié)議之上,具有低開銷,低寬帶占用的特點(diǎn),對于小型設(shè)備的應(yīng)用較為友好。
MQTT是一個基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。
MQTT 服務(wù)端通常是一臺服務(wù)器(broker),用來完成MQTT 信息傳輸,是信息傳輸?shù)暮诵?像中轉(zhuǎn)站一樣將 MQTT 客戶端發(fā)送來的信息傳遞給另一個MQTT 客戶端;MQTT 服務(wù)端不但可以分揀傳輸信息,還可以管理調(diào)用 MQTT 客戶端,保證客戶端與客戶端之間的通訊順暢,信息得以正確傳輸與接收。
MQTT 客戶端可以向服務(wù)端發(fā)布信息,也可以從服務(wù)端收取信息。我們把客戶端發(fā)送信息的行為稱為 “發(fā)布”信息;而客戶端要想從服務(wù)端收取信息,則稱為訂閱信息。
發(fā)布/訂閱模式重定義了客戶端,令客戶端可以劃分為2種角色:發(fā)布者(Publisher)和訂閱者(Subscriber),這大大擴(kuò)充了客戶端的功能。發(fā)布者可以發(fā)布若干的消息,此類信息類型一般稱為主題,在整體通信中,只有訂閱了這個主題的訂閱者才能收到屬于這個主題的消息。
對于發(fā)布者,其不需獲取訂閱者的信息(例如不知道訂閱者的IP和端口),也不需與對方建立直接的聯(lián)系。MQTT服務(wù)端將會扮演這個中間人角色。
對于訂閱者,其只需要獲取MQTT 服務(wù)器的IP和端口即可,并和它直接建立連接通信,MQTT服務(wù)端將會作為信息的中轉(zhuǎn)站,正確地分發(fā)信息。
項目中,我們將App發(fā)布的主題信息送往MQTT服務(wù)端,MQTT服務(wù)端分揀信息后,將信息傳遞給ESP8266模塊,ESP8266模塊再將信息傳遞給STM32主板進(jìn)行統(tǒng)籌計算,然后將充電斷電信息傳達(dá)給其他模塊(見圖4)。
在我們接收到APP端的信息后,經(jīng)過STM32主控的處理,通過A7接口輸出信號,接到信號后, S8050三極管高電平導(dǎo)通,實(shí)現(xiàn)充電樁的通電與斷電。在此項目中,為明顯顯示實(shí)驗結(jié)果,在硬件上添加LED燈和繼電器,兩者是通過S8050三極管控制通斷,來具現(xiàn)實(shí)驗現(xiàn)象(見圖5)。
圖5 三極管原理圖
本文設(shè)計并實(shí)現(xiàn)了充電樁的遠(yuǎn)程通信和控制。在App端用戶可以通過賬號密碼登錄,在地圖界面查找自己,然后通過搜尋功能查到充電樁的位置,對充電樁進(jìn)行無線通信控制,控制其通電與斷電,并在斷電后保存使用的時長記錄。該項目秉承簡單易用的特點(diǎn),基本滿足了日常出行對充電樁的需求,減少不必要的時間浪費(fèi)。同時此項目是一個功能的實(shí)現(xiàn),并沒有商業(yè)化的模塊功能,例如收費(fèi)和云服務(wù)器存儲。