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