演示視頻
1. VisualTFT軟件版本:V3.0.1.1112及以上的版本。
版本查看:
1) 打開VisualTFT軟件啟動頁面如圖2-1軟件版本,右上角會顯示的軟件版本號;
圖2-1軟件版本
2) 打開VisualTFT,在軟件右下角可以查看軟件版本圖2-2軟件版本,最新版本可登錄http://gc086.com/進(jìn)行下載。
圖2-2軟件版本
2. 串口屏硬件版本:M系列固件 >=V6.3.250.00。
版本查看:
a) 查看屏幕背面版本號貼紙;
b) VisualTFT與屏幕聯(lián)機(jī)成功后,右下角顯示的版本號。
本例程主要講述如何通過串口連接串口屏實(shí)現(xiàn)在線調(diào)試4G工程的功能應(yīng)用。
1 《LUA 腳本API V1.4》可通過以下鏈接下載物聯(lián)型開發(fā)包獲取:
http:/gc086.com/index.php?s=/List/index/cid/19.html
2 《LUA基礎(chǔ)學(xué)習(xí)》可通過以下鏈接下載物聯(lián)型開發(fā)包獲取:
http:/gc086.com/index.php?s=/List/index/cid/19.html
3 LUA腳本初學(xué)者可以通過下面鏈接進(jìn)行學(xué)習(xí)。
http://www.runoob.com/lua/lua-arrays.html
4 AT指令,可以通過下面子連接了解
http://www.openluat.com/Product/file/asr1802/Luat%204G模塊AT命令手冊V4.2.8.pdf
本文主要將以下2點(diǎn)進(jìn)行說明:
1. 準(zhǔn)備工程素材;
2. 配置串口屏工程;
5.1.1 準(zhǔn)備工程素材
在實(shí)現(xiàn)例程前需要作以下3個(gè)準(zhǔn)備:
1. 硬件平臺;
2. 軟件平臺;
3. UI素材;
該例程使用大彩M系列7寸串口屏DC80480M070_1111_0T為驗(yàn)證開發(fā)平臺,串口屏必須下載壓縮包“4G聯(lián)調(diào)的實(shí)體屏工程-UART3_TO_UART1工程”中的工程。如圖5-1所示:
圖5-1 M系列7寸串口屏
其他尺寸的串口屏均可借鑒此教程。
5.1.2 軟件平臺
使用大彩自主研發(fā)的上位機(jī)軟件VisualTFT配置工程,登錄http://gc086.com/下載。如圖5-2所示;
圖5-2下載軟件
本文主要介紹以下3點(diǎn):
(1) 畫面配置
(2) LUA編輯
(3) 工程聯(lián)調(diào)
5.2.1 畫面配置
在畫面ID0中,放置相應(yīng)的文本控件、圖標(biāo)控件,以便于顯示當(dāng)前4G模塊狀態(tài),
畫面配置如圖53所示:
注意:其他非關(guān)鍵控件不在一一介紹,下文不在累述
圖5-3 畫面配置
5.5.2 LUA編輯
本例程利用虛擬屏通過串口連接實(shí)體屏4G模塊實(shí)現(xiàn)在線聯(lián)調(diào)工程的功能。當(dāng)4G模塊初始化完成后,獲取運(yùn)營商/信號值。實(shí)現(xiàn)流程如下。
1. 開啟自由串口協(xié)議
當(dāng)全局變量uart_free_protocol 的值等于1時(shí),串口收到的所有數(shù)據(jù)都會在傳遞到串口回調(diào)函數(shù)中,代碼如程序清單 1所示;
程序清單 1 開啟串口協(xié)議
--[[ --使用PC虛擬串口屏調(diào)試4G模塊時(shí)使用 --屏幕需要升級工程 UART3_TO_UART1 --使用虛擬屏與實(shí)體屏聯(lián)調(diào)時(shí),設(shè)置air_debug_mode = 1 --使用實(shí)體屏允許時(shí),設(shè)置air_debug_mode = 0 --]] local air_debug_mode = 1 uart_free_protocol = air_debug_mode --自由串口協(xié)議 --[[*************************************************************************** ** Function name : on_uart_recv_data ** Descriptions : 接收串口1的數(shù)據(jù)的回調(diào)函數(shù)。串口1是普通串口。 ** 虛擬屏調(diào)試時(shí), air_debug_mode = 1,處理串口1的數(shù)據(jù)。 ** @packet :接收的數(shù)據(jù)包 ** @return : nil,無返回值 ***************************************************************************--]] function on_uart_recv_data(packet) --4G模塊直接PC串口 if air_debug_mode == 1 then on_air_recv_data(packet) end end --[[*************************************************************************** ** Function name: on_air_send_cb ** Descriptions: 4G模塊-發(fā)送數(shù)據(jù) ***************************************************************************--]] function on_air_send_cb(msg) if air_debug_mode==1 then uart_send_string(msg) -- air_debug_mode==1 ,使用虛擬屏調(diào)試,通過串口1發(fā)送數(shù)據(jù) else uart_send_string3(msg) -- air_debug_mode==0 ,使用實(shí)體屏調(diào)試,通過串口3發(fā)送數(shù)據(jù) end end
2. 初始化
調(diào)用系統(tǒng)函數(shù)on_init()執(zhí)行代碼如程序清單 2所示:
程序清單 2初始化
--[[********************************************************************* ** Function name: on_init ** Descriptions : 系統(tǒng)初始化時(shí),執(zhí)行此回調(diào)函數(shù)。 *********************************************************************--]] function on_init() dofile(‘'Air724at.lua') --加載 4G庫文件 uart_set_baudrate3(115200) --設(shè)置與4G模塊通訊的串口3的波特率為115200 --設(shè)置4G庫函數(shù)的命令發(fā)送函數(shù),命令回調(diào)函數(shù)、調(diào)試信息打印函數(shù) air_set_callback(on_air_send_cb,on_air_resp_callback,on_air_log_cb) air_hw_int() --4G模塊初始化設(shè)置 air_get_iccid() –- 獲取卡號 --開啟自動獲取型號強(qiáng)度、時(shí)間、天氣功能 start_timer(timerId_Sig_Weather, 1000 , 0, 0) end --[[********************************************************************* ** Function name: on_timer ** Descriptions : 定時(shí)器超時(shí)回到調(diào)函數(shù)。 ** @ timer_id : 定時(shí)器ID *********************************************************************--]] function on_timer(timer_id) on_air_timer(timer_id) --4G庫函數(shù)的定時(shí)處理 --自動獲取型號強(qiáng)度 if timer_id == timerId_Sig_Weather then --定時(shí)器計(jì)數(shù),timer0_notify_cnt 每秒+1。計(jì)時(shí)長度30min timer0_notify_cnt = timer0_notify_cnt + 1 if timer0_notify_cnt%15 == 0 then --每15s調(diào)用一次,更新信號值 at_cops_csq() elseif timer0_notify_cnt > 1800 then --標(biāo)志位清空,重新開始30min計(jì)時(shí) timer0_notify_cnt = 0 end end end --[[********************************************************************* ** Function name : at_cops_csq ** Descriptions : 獲取運(yùn)營商信息、信號強(qiáng)度 ** @return : nil,無返回值 *********************************************************************--]] function at_cops_csq() air_cmd_add('AT+COPS?','OK',1000) –獲取運(yùn)營商 air_cmd_add('AT+CSQ' ,'OK',1000) –獲取信號 end --[[********************************************************************* ** Function name: on_air_resp_callback ** Descriptions : 4G模塊-數(shù)據(jù)回調(diào)接口 ** @key : 屏幕->4G模塊的發(fā)送請求 ** @value : 4G模塊->返回的數(shù)據(jù) *********************************************************************--]] function on_air_resp_callback(key, value) if value == nil then return --value為空時(shí)退出 end --******************************************************************** --功能: 判斷 key -- 如果 key 為空,則退出函數(shù)。 -- 因?yàn)?key 為空時(shí),下方 string.find( key , ) 是不正確的使用。 -- 以下key的處理必須不為空, --******************************************************************** if key == nil then return end --******************************************************************** --條件: 4G初始化完成 --功能: 使用使用AT指令獲取信號強(qiáng)度和運(yùn)營商。 --調(diào)用函數(shù):at_cops_csq() --函數(shù)功能:獲取信號強(qiáng)度和運(yùn)營商 --******************************************************************** if string.find(key,'+SAPBR=1,1') ~= nil and string.find(value,'OK') ~= nil then set_text(screen_main, 16, '') at_cops_csq() end --******************************************************************** --條件: 4G模塊返回運(yùn)營商信息 --功能: 設(shè)置串口波特率為 115200 --******************************************************************** if string.find(key,'+COPS')~=nil and string.find(value,'+COPS')~=nil then --**************************************************************** --value: +COPS: 0,2,"46000",7 --要提取的值: 46000 --正則表達(dá)式: '+COPS:.*,.*,"(%d*)"' --**************************************************************** local regular_e = '+COPS:.*,.*,"(%d*)"' --正則表達(dá)式 --獲取的值賦給 my_mobile_MCCMNC local my_mobile_MCCMNC = string.match( value, regular_e ) set_text( screen_main, 2, mobile_MCCMNC[my_mobile_MCCMNC] ) my_print( mobile_MCCMNC[my_mobile_MCCMNC] ) end --******************************************************************* --條件: 4G模塊返回信號強(qiáng)度信息 --功能: 設(shè)置串口波特率為 115200 --******************************************************************* if string.find(key,'+CSQ')~=nil and string.find(value,'+CSQ')~=nil then --*************************************************************** --value: +CSQ: 15,99 --要提取的值: 15 --正則表達(dá)式: '+CSQ: (.*),.*' --*************************************************************** local regular_e = '+CSQ: (.*),.*' --正則表達(dá)式 --獲取的值賦給 my_csq local my_csq = tonumber(string.match(value,regular_e)) if my_csq<=11 then set_value( screen_main, 1, 1) --設(shè)置信號圖標(biāo)顯示第1幀 set_text( screen_main, 5, "弱") --設(shè)置文本,顯示“弱” elseif my_csq>=12 and my_csq<=13 then set_value( screen_main, 1, 2) --設(shè)置信號圖標(biāo)顯示第2幀 set_text( screen_main, 5, "良") --設(shè)置文本,顯示“良” elseif my_csq>=14 and my_csq<=15 then set_value( screen_main, 1, 3) --設(shè)置信號圖標(biāo)顯示第3幀 set_text( screen_main, 5, "良") --設(shè)置文本,顯示“良” elseif my_csq>=16 then set_value( screen_main, 1, 4) --設(shè)置信號圖標(biāo)顯示第4幀 set_text( screen_main, 5, "強(qiáng)") --設(shè)置文本,顯示“強(qiáng)” end my_print(my_csq) end ...... end --[[********************************************************************** ** Function name: on_uart_recv_data3 ** Descriptions : 接收串口3數(shù)據(jù)回調(diào)函數(shù),連接4G模塊。 **********************************************************************--]] function on_uart_recv_data3(packet) --4G AT指令庫API on_air_recv_data(packet) end
核心API函數(shù)
1) dofile (filename)
加載文件:本例程中加載4G AT 指令的庫
- filename :文件名
2) uart_set_baudrate3(speed)
設(shè)置串口3的波特率:串口3為屏幕和4G模塊通訊的串口
- speed:通訊的波特率
3) on_air_recv_data(packet)
串口接收4G模塊的返回?cái)?shù)據(jù)的回調(diào)。
- packet:形參為表,字節(jié)數(shù)據(jù)。
4) air_set_callback (on_air_send_cb,on_air_resp_callback,on_air_log_cb)
設(shè)置4G庫函數(shù)的回調(diào)。形參類型為函數(shù),參數(shù)依次為命令發(fā)送函數(shù),命令回調(diào)函數(shù)、調(diào)試信息打印函數(shù),可自定義函數(shù)名。
- on_air_send_cb:屏幕向4G模塊發(fā)送回調(diào)函數(shù)
- on_air_resp_callback:4G向屏幕返回?cái)?shù)據(jù)回調(diào)函數(shù)
- on_air_log_cb:用戶調(diào)試信息回調(diào)函數(shù)調(diào)試
5) at_cops_csq()
自定義封裝函數(shù),獲取運(yùn)行商和信號值
6) air_cmd_add(sendstr,ackstr,timeout,retry,callback)
屏幕向4G模塊發(fā)送AT指令。
- sendstr:屏幕向4G模塊發(fā)送AT指令
- ackstr:4G模塊應(yīng)答屏幕的請求
- timeout:應(yīng)答超時(shí)
- retry:超時(shí)重發(fā)次數(shù)
- callback:應(yīng)答回調(diào)函數(shù)
7) on_air_resp_callback(key, value)
4G應(yīng)答屏幕回調(diào)函數(shù):屏幕發(fā)送AT指令,4G應(yīng)答后均會回調(diào)該函數(shù),本函數(shù)如air_set_callback(on_air_send_cb,on_air_resp_callback,on_air_log_cb)函數(shù)設(shè)置。
- key:屏幕->4G模塊,發(fā)送請求的AT指令
- value:4G模塊->屏幕,返回的數(shù)據(jù)
8) my_print(debug_msg)
當(dāng)en_debug_msg等0時(shí)不顯示調(diào)試信息;等1時(shí)虛擬屏顯示調(diào)試信息; 等2時(shí)實(shí)體屏串口1輸出。
- debug_msg :需要串口輸出的信息
5.2.3 工程聯(lián)調(diào)
1. 將壓縮包“4G聯(lián)調(diào)的實(shí)體屏工程-UART3_TO_UART1工程”中的工程燒錄到實(shí)體屏,燒錄完成后如圖5-4所示。
注意:此工程主要用于將虛擬機(jī)與實(shí)體屏的4G模塊連接。該工程為固定工程,所有尺寸均可使用。
圖5-4 UART3_TO_UART1
2. 將編寫好的工程編譯并運(yùn)行虛擬屏,如圖 5-5所示;
圖 5-5 創(chuàng)建虛擬屏
3. 將虛擬屏串口選擇與實(shí)體屏相連的串口,并將波特率調(diào)整為115200bps,即可實(shí)現(xiàn)虛擬屏與實(shí)體屏聯(lián)調(diào),如圖 5-6所示;
圖 5-6 串口聯(lián)調(diào)