本文檔適合大彩PM 4G系列串口屏產(chǎn)品使用。
1. VisualTFT軟件版本:V3.0.1.1112及以上的版本。
版本查看:
1) 打開(kāi)VisualTFT軟件啟動(dòng)頁(yè)面如圖2-1軟件版本,右上角會(huì)顯示的軟件版本號(hào);
圖2-1軟件版本
2) 打開(kāi)VisualTFT,在軟件右下角可以查看軟件版本圖2-2軟件版本,最新版本可登錄http://gc086.com/進(jìn)行下載。
圖2-2軟件版本
2. 串口屏硬件版本:M系列固件 >= V6.3.257.00。
版本查看:
1) 查看屏幕背面版本號(hào)貼紙;
2) VisualTFT與屏幕聯(lián)機(jī)成功后,右下角顯示的版本號(hào)。
例程中,介紹4G TCP單連接的應(yīng)用。屏幕作為客戶(hù)端,和服務(wù)器進(jìn)行數(shù)據(jù)收發(fā)。
服務(wù)器TCP測(cè)試工具:本例程中使用合宙提供的TCP 透?jìng)髟?/span> 做測(cè)試驗(yàn)證。該測(cè)試平臺(tái)IP固定為180.97.81.180,Demo中只需要更改端口號(hào),在連接即可測(cè)試驗(yàn)證。
注意:UDP或多鏈接模式可參考《Luat 4G模塊AT命令手冊(cè)V4.2.2.pdf》即可
該平臺(tái)創(chuàng)建服務(wù)器必須在3分鐘內(nèi)連上,且長(zhǎng)時(shí)間未交互,服務(wù)器會(huì)自動(dòng)關(guān)閉。
1 《LUA 腳本API V1.4》可通過(guò)以下鏈接下載物聯(lián)型開(kāi)發(fā)包獲取:
http:/gc086.com/index.php?s=/List/index/cid/19.html
2 《LUA基礎(chǔ)學(xué)習(xí)》可通過(guò)以下鏈接下載物聯(lián)型開(kāi)發(fā)包獲取:
http:/gc086.com/index.php?s=/List/index/cid/19.html
3 LUA腳本初學(xué)者可以通過(guò)下面鏈接進(jìn)行學(xué)習(xí)。
http://www.runoob.com/lua/lua-arrays.html
4 AT指令,可以通過(guò)下面子連接了解。
http://www.openluat.com/Product/file/asr1802/Luat%204G模塊AT命令手冊(cè)V4.2.8.pdf
5 合宙TCP測(cè)試平臺(tái)。
http://tcplab.openluat.com
本文主要將以下2點(diǎn)進(jìn)行說(shuō)明:
1. 準(zhǔn)備工程素材;
2. 配置串口屏工程;
在實(shí)現(xiàn)例程前需要作以下3個(gè)準(zhǔn)備:
1. 硬件平臺(tái);
2. 軟件平臺(tái);
3. UI素材;
該例程使用大彩M系列7寸串口屏DC80480M070_1111_0T為驗(yàn)證開(kāi)發(fā)平臺(tái)。如圖5-1所示;
圖5-1 M系列7寸串口屏
其他尺寸串口屏均可借鑒此教程。
5.1.2 軟件平臺(tái)
使用大彩自主研發(fā)的上位機(jī)軟件VisualTFT配置工程,登錄http://gc086.com/下載。如圖5-2所示;
圖5-2 下載軟件
本文主要介紹以下2點(diǎn):
(1) 畫(huà)面配置
(2) LUA編輯
5.2.1. 畫(huà)面配置
在畫(huà)面ID0中,客戶(hù)端、服務(wù)端和信號(hào)值/運(yùn)營(yíng)商3部分組成。
客戶(hù)端:
- 文本控件ID1:屏幕公網(wǎng)的IP
- 文本控件2~3:分別服務(wù)器IP地址、端口號(hào)。
- 按鈕控件ID4:當(dāng)輸入端口號(hào)后,點(diǎn)擊連接。屏幕向該服務(wù)器發(fā)起請(qǐng)求信息。
服務(wù)器:
- 文本控件ID7~9:當(dāng)服務(wù)器下發(fā)數(shù)據(jù)時(shí),將相關(guān)信息顯示此處,依次為服務(wù)器的IP、端口、數(shù)據(jù)等
4G信號(hào)和運(yùn)營(yíng)商:
- 圖標(biāo)控件控件ID10作為信號(hào)顯示、文本控件ID11用于顯示運(yùn)營(yíng)商。
畫(huà)面配置如圖5-3所示:
注意:其他非關(guān)鍵控件不在一一介紹,下文不在累述
圖5-3 畫(huà)面配置
5.2.2. LUA編輯
本例程中,屏幕上電執(zhí)行初始化操作,如加載4G AT 指令的庫(kù)、初始化4G模塊、定時(shí)獲取運(yùn)營(yíng)商和信號(hào)值等。
當(dāng)用戶(hù)點(diǎn)擊圖片下載的時(shí),調(diào)用air_http_download()開(kāi)始下載文件。在下載回調(diào)函數(shù)on_http_download_file_cb()里進(jìn)行數(shù)據(jù)存儲(chǔ),顯示下載信息等。若該文件單次下載不完,會(huì)多次回調(diào)on_http_download_file_cb()函數(shù),直至下載完畢,如圖5-4所示。
圖5-4 TCP連接
1. 初始化
調(diào)用系統(tǒng)函數(shù)on_init()執(zhí)行代碼如程序清單 1所示:
程序清單 1初始化
--[[********************************************************************* ** Function name: on_init ** Descriptions : 系統(tǒng)初始化時(shí),執(zhí)行此回調(diào)函數(shù)。 *********************************************************************--]] function on_init() dofile('air724at.lua') --加載 http.lua 文件 uart_set_baudrate3(115200) --設(shè)置與4G模塊通訊的串口3的波特率為115200 --設(shè)置4G庫(kù)函數(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è)置 --開(kāi)啟自動(dòng)獲取型號(hào)強(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庫(kù)函數(shù)的定時(shí)處理 --定時(shí)獲取信號(hào)強(qiáng)度 if timer_id == timerId_Sig_Weather then --定時(shí)器計(jì)數(shù),timer0_notify_cnt 每秒+1。 timer0_notify_cnt = timer0_notify_cnt + 1 if timer0_notify_cnt%15 == 0 then --每15s調(diào)用一次,更新信號(hào)值 at_cops_csq() timer0_notify_cnt = 0 --標(biāo)志位清空 end end end --[[********************************************************************* ** Function name : at_cops_csq ** Descriptions : 獲取運(yùn)營(yíng)商信息、信號(hào)強(qiáng)度 ** @return : nil,無(wú)返回值 *********************************************************************--]] function at_cops_csq() air_cmd_add('AT+COPS?','OK',1000) –獲取運(yùn)營(yíng)商 air_cmd_add('AT+CSQ' ,'OK',1000) –獲取信號(hào) end --[[********************************************************************* ** Function name: on_air_resp_callback ** Descriptions : 4G模塊-數(shù)據(jù)回調(diào)接口 ** @key : 屏幕向4G模塊的發(fā)送請(qǐng)求 ** @value : 4G模塊返回的數(shù)據(jù) *********************************************************************--]] function on_air_resp_callback(key, value) --*********************************************************************** --功能: 判斷 key -- 如果 key 為空,則退出函數(shù)。 -- 因?yàn)?key 為空時(shí),下方 string.find( key , ) 是不正確的使用。 -- 以下key的處理必須不為空, --******************************************************************** if key == nil then return end ...... --****************************************************************** --條件: 4G初始化完成 --功能: 使用使用AT指令獲取信號(hào)強(qiáng)度和運(yùn)營(yíng)商。 --調(diào)用函數(shù):at_cops_csq() --函數(shù)功能:獲取信號(hào)強(qiáng)度和運(yùn)營(yíng)商 --調(diào)用函數(shù):at_tcp_client_cofig() --函數(shù)功能:TCP配置 ********************************************************************* if string.find(key,'+SAPBR=1,1') ~= nil and string.find(value,'OK') ~= nil then at_cops_csq() at_tcp_client_cofig() end --******************************************************************** --條件: 4G模塊返回運(yùn)營(yíng)商信息 --功能: --******************************************************************** 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]) end --******************************************************************** --條件:4G模塊返回信號(hào)強(qiáng)度信息 --功能: --******************************************************************** 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á)式 local my_csq = tonumber(string.match(value,regular_e)) if my_csq<=11 then set_value( screen_main, 1, 1) --設(shè)置信號(hào)圖標(biāo)顯示第1幀 elseif my_csq>=12 and my_csq<=13 then set_value(screen_main, 1, 2) --設(shè)置信號(hào)圖標(biāo)顯示第2幀 elseif my_csq>=14 and my_csq<=15 then set_value( screen_main, 1, 3) --設(shè)置信號(hào)圖標(biāo)顯示第3幀 elseif my_csq>=16 then set_value( screen_main, 1, 4) --設(shè)置信號(hào)圖標(biāo)顯示第4幀 end end end --[[********************************************************************** ** Function name: on_uart_recv_data3 ** Descriptions : 接收串口3數(shù)據(jù)回調(diào)函數(shù),連接4G模塊。 **********************************************************************--]] function on_uart_recv_data3(packet) --4G AT指令庫(kù)API on_air_recv_data(packet) end
核心API函數(shù)
1) dofile (filename)
加載文件:本例程中加載4G AT 指令的庫(kù)
- 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庫(kù)里的回調(diào)函數(shù)。形參類(lèi)型為函數(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:用戶(hù)調(diào)試信息回調(diào)函數(shù)調(diào)試
5) air_hw_int()
4G AT 指令的庫(kù)函數(shù),初始化4G模塊
6) at_cops_csq()
自定義封裝函數(shù),獲取運(yùn)行商和信號(hào)值
7) air_cmd_add(sendstr,ackstr,timeout,retry,callback)
屏幕向4G模塊發(fā)送AT指令
- sendstr:屏幕向4G模塊發(fā)送AT指令
- ackstr:4G模塊應(yīng)答屏幕的請(qǐng)求
- timeou:應(yīng)答超時(shí)
- retry: 超時(shí)重發(fā)次數(shù),可選
- callback: 應(yīng)答回調(diào)函數(shù),可選
注:如果沒(méi)有設(shè)置超時(shí)重發(fā)次數(shù),則超時(shí)時(shí)直接發(fā)送隊(duì)列中的下一條指令。
8) on_air_resp_callback(key, value)
4G應(yīng)答屏幕回調(diào)函數(shù):屏幕發(fā)送AT指令,4G應(yīng)答后均會(huì)回調(diào)該函數(shù),初始化設(shè)置:air_set_callback(on_air_send_cb,on_air_resp_callback,on_air_log_cb)。
- key:屏幕向4G模塊發(fā)送請(qǐng)求的AT指令
- value:4G模塊返回的數(shù)據(jù)
相關(guān)AT指令:
本例程中,涉及到獲取4G模塊初始化、運(yùn)營(yíng)商、信號(hào)值等AT交互指令回調(diào)的判斷,在on_air_resp_callback(key, value)回調(diào)函數(shù)中,判斷4G收發(fā)的相關(guān)AT指令,如下所示:
1) 網(wǎng)絡(luò)數(shù)據(jù)是否激活:
屏幕發(fā)送:AT+SAPBR=1,1。air_hw_int()函數(shù)里發(fā)送。
屏幕接收:OK。on_air_resp_callback(key, value)函數(shù)里執(zhí)行4G返回?cái)?shù)據(jù)的判斷。
2) 獲取運(yùn)營(yíng)商:
屏幕發(fā)送:AT+COPS?。在at_cops_csq()函數(shù)了發(fā)送。
屏幕接收:OK。on_air_resp_callback(key, value)函數(shù)里執(zhí)行4G返回?cái)?shù)據(jù)的判斷。
3) 獲取信號(hào)值:
屏幕發(fā)送:AT+CSQ。在at_cops_csq()函數(shù)了發(fā)送。
屏幕接收:OK。on_air_resp_callback(key, value)函數(shù)里執(zhí)行4G返回?cái)?shù)據(jù)的判斷。
2. TCP配置
當(dāng)4G初始化完畢后,在on_air_resp_callback(key, value)函數(shù)里調(diào)用at_tcp_client_cofig()進(jìn)行TCP配置,代碼如程序清單 2所示:
程序清單 2 TCP配置
--[[********************************************************************* ** Function name: on_air_resp_callback ** Descriptions : 4G模塊-數(shù)據(jù)回調(diào)接口 ** @key : 屏幕向4G模塊的發(fā)送請(qǐng)求 ** @value : 4G模塊返回的數(shù)據(jù) *********************************************************************--]] function on_air_resp_callback(key, value) ...... --****************************************************************** --條件: 4G初始化完成 --功能: 使用使用AT指令獲取信號(hào)強(qiáng)度和運(yùn)營(yíng)商。 --調(diào)用函數(shù):at_cops_csq() --函數(shù)功能:獲取信號(hào)強(qiáng)度和運(yùn)營(yíng)商 --調(diào)用函數(shù):at_tcp_client_cofig() --函數(shù)功能:TCP配置 --***************************************************************** if string.find(key,'+SAPBR=1,1') ~= nil and string.find(value,'OK') ~= nil then ....... at_tcp_client_cofig() end end --[[********************************************************************* ** Function name : at_tcp_client_cofig ** Descriptions : TCP配置 ** @return : nil,無(wú)返回值 ******************************************************************** --]] function at_tcp_client_cofig(connect) local function my_get_ip_cb(key, value) if string.find(key,'+CIFSR') ~= nil and value ~= nil then Tcp_ip = value set_text(sc_Tcp, 1, Tcp_ip) end end local function my_ip_state(key, value) air_log('my debugMsg key -> '..key) air_log('my debugMsg value -> '..value) if string.find(key,'+CIPSTATUS') ~= nil and string.find(value,'IP STATUS') ~= nil then Tcp_state = 1 air_log('at_tcp_client_cofig success !!!!!!') end end if connect == nil then connect = 0 end air_cmd_add('AT+CREG=1', 'OK', 1000, 3) --設(shè)置當(dāng)前GPRS注冊(cè)狀態(tài) air_cmd_add('AT+CGREG=1', 'OK', 1000, 3) --設(shè)置當(dāng)前GPRS注冊(cè)狀態(tài) air_cmd_add('AT+CGATT=1', 'OK', 1000, 3) --設(shè)置當(dāng)前GPRS附著狀態(tài) air_cmd_add('AT+CIPMUX='.. connect, 'OK', 1000, 3) --設(shè)置為單、多鏈接模式 --設(shè)置為快發(fā)模式(推薦使用這種模式) air_cmd_add('AT+CIPQSEND=1', 'OK', 1000, 3) air_cmd_add('AT+CSTT?', 'OK', 1000, 3) --啟動(dòng)任務(wù),查看APN air_cmd_add('AT+CSTT="CMIOT"', 'OK', 1000, 3) --啟動(dòng)任務(wù),設(shè)置APN air_cmd_add('AT+CIICR', 'OK', 1000, 3) --激活移動(dòng)場(chǎng)景 air_cmd_add('AT+CIFSR' , 'OK', 1000, 3, my_get_ip_cb) --查詢(xún)分配的IP地址 air_cmd_add('AT+CIPSTATUS' , 'STATE: IP STATUS', 1000, 3, my_ip_state) --查詢(xún)下鏈接狀態(tài) end
核心API函數(shù)
1) at_tcp_client_cofig(connect)
自定義函數(shù),TCP客戶(hù)端配置
- connect:0-單鏈接,非0多鏈接
相關(guān)AT指令:
本例程中,TCP配置涉及到相關(guān)指令有設(shè)置為單、多鏈接模式、快發(fā)模式、激活等,相關(guān)關(guān)AT指令,更多詳細(xì)的AT指令參考《Luat 4G模塊AT命令手冊(cè)V4.2.2.pdf》,如下所示:
1) 設(shè)置鏈接模式:
屏幕發(fā)送:AT+CIPMUX=0。設(shè)置單鏈接,非零(1/2)為多連接模式。
屏幕接收:OK
2) 設(shè)置移動(dòng)激活場(chǎng)景:
屏幕發(fā)送:AT+CIICR?
屏幕接收:OK
3) 查詢(xún)分配的IP地址:
屏幕發(fā)送:AT+CIFSR
屏幕接收:OK
3. 連接服務(wù)器
當(dāng)用戶(hù)輸入端口號(hào)后,點(diǎn)擊聯(lián)機(jī),調(diào)用at_tcp_client_connect()并設(shè)置服務(wù)器接收模式,代碼如程序清單 3所示:
程序清單 3 連接服務(wù)器
--[[********************************************************************* ** Function name : at_tcp_client_connect ** Descriptions : 設(shè)置接收模式 ** @head : 是否顯示頭部 ** @showtp : 是否顯示協(xié)議 ** @srip : 是否顯示IP、端口 ** @return : nil,無(wú)返回值 *********************************************************************--]] function at_set_tcp_recv_mode(head, showtp,srip) air_cmd_add('AT+CIPHEAD='..head, 'OK', 1000, 3) --顯示頭部 air_cmd_add('AT+CIPSHOWTP='..showtp, 'OK', 1000, 3) --顯示協(xié)議 air_cmd_add('AT+CIPSRIP='..srip, 'OK', 1000, 3) --顯示IP、端口 end --[[********************************************************************* ** Function name : at_tcp_client_connect ** Descriptions : 連接服務(wù)器 ** @mode : 連接模式,TCPUPD ** @server_ip : 服務(wù)器地址 ** @port : 服務(wù)器端口 ** @return : nil,無(wú)返回值 ********************************************************************--]] function at_tcp_client_connect(mode, server_ip, port) --連接服務(wù)器 air_cmd_add( 'AT+CIPSTART="'..mode..'",'..'"'..server_ip..'",'..port, 'OK', 1000, 3) --查詢(xún)當(dāng)前GPRS注冊(cè)狀態(tài) air_cmd_add('AT+CIPSTATUS', 'STATE: CONNECT OK', 1000, 3) end --[[********************************************************************* ** Function name : on_control_notify ** Descriptions : 系統(tǒng)回調(diào)函數(shù),用戶(hù)通過(guò)觸摸修改控件后,執(zhí)行此回調(diào)函數(shù)。 ** 點(diǎn)擊按鈕控件,修改文本控件、修改滑動(dòng)條都會(huì)觸發(fā)此事件。 ** @return : nil,無(wú)返回值 ********************************************************************--]] function on_control_notify(screen,control,value) if screen == sc_Tcp then if control == 4 and value == 0 and Tcp_state == 1 then Tcp_server_ip = get_text(sc_Tcp, 3) Tcp_server_port = get_text(sc_Tcp, 3) at_tcp_client_connect('TCP', Tcp_server_ip, Tcp_server_port) --連接服務(wù)器 at_set_tcp_recv_mode(1, 1, 1) --設(shè)置接收模式 ...... end end end
核心API函數(shù)
1) at_set_tcp_recv_mode(head, showtp,srip)
設(shè)置接收模式
- head: 是否顯示頭部
- showtp: 是否顯示協(xié)議
- srip: 是否顯示IP、端口
- return: nil,無(wú)返回值
2) at_tcp_client_connect(mode, server_ip, port)
連接服務(wù)器
- mode: 連接模式,TCPUPD
- server_ip : 服務(wù)器地址
- port : 服務(wù)器端口
相關(guān)AT指令:
1) 請(qǐng)求連接:
屏幕發(fā)送:AT+CIPSTART="TCP","60.166.18.9",7500。
屏幕接收:OK
2) 設(shè)置服務(wù)器數(shù)據(jù)包含頭:
屏幕發(fā)送:AT+CIPHEAD=1
屏幕接收:OK
3) 設(shè)置服務(wù)器協(xié)議包含協(xié)議:
屏幕發(fā)送:AT+CIPSHOWTP=1
屏幕接收:OK
4) 設(shè)置服務(wù)器協(xié)議包含IP、端口:
屏幕發(fā)送:AT+CIPSRIP=1
屏幕接收:OK
4. 發(fā)送數(shù)據(jù)到服務(wù)器
用戶(hù)輸入文本數(shù)據(jù)點(diǎn)擊發(fā)送后,調(diào)用at_tcp_send ()發(fā)送數(shù)據(jù)到服務(wù)端,代碼如程序清單 4所示:
程序清單 4 發(fā)送數(shù)據(jù)
--[[********************************************************************* ** Function name : on_control_notify ** Descriptions : 系統(tǒng)回調(diào)函數(shù),用戶(hù)通過(guò)觸摸修改控件后,執(zhí)行此回調(diào)函數(shù)。 ** 點(diǎn)擊按鈕控件,修改文本控件、修改滑動(dòng)條都會(huì)觸發(fā)此事件。 ** @return : nil,無(wú)返回值 *********************************************************************--]] function on_control_notify(screen,control,value) if screen == sc_Tcp then ...... local send_data = get_text(sc_Tcp, 5) at_tcp_send(send_data) ....... end end --[[********************************************************************* ** Function name : at_tcp_send ** Descriptions : TCP、發(fā)送數(shù)據(jù)到服務(wù)端 ** @str : 發(fā)送數(shù)據(jù) ** @return : nil,無(wú)返回值 ********************************************************************--]] function at_tcp_send(str) air_cmd_add('AT+CIPSEND='..string.len(str) , '>', 1000, 3) air_cmd_add(str, 'DATA ACCEPT', 1000, 3) end
核心API函數(shù)
1) at_tcp_send(str)
發(fā)送數(shù)據(jù)到服務(wù)器
str: 字符串
相關(guān)AT指令:
1) 發(fā)送數(shù)據(jù)(確定長(zhǎng)度):
屏幕發(fā)送:AT+CIPSEND=10
屏幕接收:>
2) 發(fā)送數(shù)據(jù)(數(shù)據(jù)內(nèi)容)
屏幕發(fā)送:1234567890
屏幕接收:DATA ACCEPT:10
5. 接收服務(wù)器的數(shù)據(jù)
本例程中,接收服務(wù)器的信息是含接收員(目標(biāo)服務(wù)器的IP、端口)、幀頭、協(xié)議類(lèi)型、數(shù)據(jù)內(nèi)容等,在函數(shù)at_set_tcp_recv_mode(head, showtp,srip)配置。程序清單如程序清單 5所示。
程序清單 5 接收服務(wù)器數(shù)據(jù)
--[[********************************************************************* ** Function name: split ** Descriptions : 切割字符串 ** @ str : 源字符串 ** @ pat : 分割符號(hào) *********************************************************************--]] function split(str, pat) local t = {} local last_end = 0 local s, e = string.find(str, pat, 1) --第一個(gè)分割號(hào) local i = 1 while s do table.insert(t, string.sub(str, last_end + 1, last_end + s - last_end - 1)) last_end = e s, e = string.find(str, pat, last_end + 1) i = i + 1 end if last_end <= #str then cap = string.sub(str, last_end + 1) table.insert(t, cap) end return t end --[[********************************************************************* ** Function name: on_air_resp_callback ** Descriptions : 4G模塊-數(shù)據(jù)回調(diào)接口 ** @key : 屏幕->4G模塊的發(fā)送請(qǐng)求 ** @value : 4G模塊->返回的數(shù)據(jù) *********************************************************************--]] function on_air_resp_callback(key, value) ...... if value ~= nil then if string.find(value,'FROM') ~= nil then --+RECV FROM: 60.166.12.210:7500 --分割成3份,分別為+RECV FROM、60.166.12.210、7500 local serverInfo = split(value,':') set_text(sc_Tcp, 7, serverInfo[2]) –- ip set_text(sc_Tcp, 8, serverInfo[3]) –-端口 elseif string.find(value,'IPD') ~= nil then --+IPD,TCP,10:123456789 --分割成2份,分別為+IPD,TCP,10、123456789 local serverData = split(value,':') set_text(sc_Tcp, 9, serverData[2]) -- 數(shù)據(jù)內(nèi)容 end end ...... end
相關(guān)AT指令:
1) 接收數(shù)據(jù)源(服務(wù)器IP、端口):
屏幕接收:+RECV FROM: 60.166.12.210:7500
2) 接收數(shù)據(jù)(幀頭+協(xié)議+數(shù)據(jù)長(zhǎng)度+數(shù)據(jù)內(nèi)容):
屏幕接收:+IPD,TCP,10:123456789
工程編譯成功后在輸出窗口會(huì)提示編譯成功,如圖5-5所示;
圖5-5編譯成功
在菜單欄中,文件→打開(kāi)工程目錄,在‘dciot_build’目錄的‘private’拷貝到SD卡中,如圖5-6和圖5-7所示;把SD卡接上串口屏后重新上電,等到提示燒錄工程成功后,拔掉SD卡重新上電即可。
圖5-6下載文件
圖5-7拷貝到SD卡