中文字幕天堂手机版-欧美一区二区色大片在线观看-丰满人妻视频一区二区三区-美女视频黄的免费的91

您的位置:首頁(yè)   >  關(guān)于我們  >  新聞動(dòng)態(tài)

大彩串口屏4G應(yīng)用- TCP單連接

發(fā)布人:大彩科技發(fā)布日期:2021-10-21


一、適合范圍


本文檔適合大彩PM 4G系列串口屏產(chǎn)品使用。





二、開(kāi)發(fā)環(huá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





五、教程實(shí)現(xiàn)


本文主要將以下2點(diǎn)進(jìn)行說(shuō)明:

1. 準(zhǔn)備工程素材;

2. 配置串口屏工程;






5.1 準(zhǔn)備工程素材

在實(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 下載軟件






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






5.3 下載工程

工程編譯成功后在輸出窗口會(huì)提示編譯成功,如圖5-5所示;

圖片

圖5-5編譯成功


在菜單欄中,文件→打開(kāi)工程目錄,在‘dciot_build’目錄的‘private’拷貝到SD卡中,如圖5-6和圖5-7所示;把SD卡接上串口屏后重新上電,等到提示燒錄工程成功后,拔掉SD卡重新上電即可。

圖片

圖5-6下載文件

圖片

圖5-7拷貝到SD卡