一、適用范圍
本文檔適合大彩PM系列串口屏產品使用。
二、開發環境版本
1VisualTFT軟件版本:V3.0.1.1112及以上的版本。
2串口屏硬件版本:M系列固件 >= V6.3.257.00。
三、概述
本例程中,介紹4G的HTTP下載的應用,通過下載圖片、視頻、音頻說明下載流程。
四、參考資料
1《LUA 腳本API V1.4》可通過以下鏈接下載物聯型開發包獲取:
http:/www.gz-dc.com/index.php?s=/List/index/cid/19.html
2《LUA基礎學習》可通過以下鏈接下載物聯型開發包獲取:
http:/www.gz-dc.com/index.php?s=/List/index/cid/19.html
3LUA腳本初學者可以通過下面鏈接進行學習。
http://www.runoob.com/lua/lua-arrays.html
4AT指令,可以通過下面子連接了解
Uhttp://www.openluat.com/Product/file/asr1802/Luat%204G模塊AT命令手冊V4.2.8.pdfU
5Air系列4G模塊AT版本HTTP應用說明(若連接失效請在LUAT社區中查找)
https://ask.openluat.com/article/626/0
五、教程實現
本文主要將以下2點進行說明:
1. 準備工程素材;
2. 配置串口屏工程;
5.1準備工程素材
5.1.1 準備工程素材
在實現例程前需要作以下3個準備:
1. 硬件平臺;
2. 軟件平臺;
3. UI素材;
該例程使用大彩M系列7寸串口屏DC80480M070_1111_0T為驗證開發平臺。如圖5-1所示;
圖5-1M系列7寸串口屏
其他尺寸的串口屏均可借鑒此教程。
5.1.2 軟件平臺
使用大彩自主研發的上位機軟件VisualTFT配置工程,登錄大彩官網下載。如圖5-2所示;
圖5-2下載軟件
5.2 配置串口屏工程
本文主要介紹以下2點:
(1)畫面配置
(2)LUA編輯
5.2.1畫面配置
在畫面ID0中,觸發下載、下載過程、4G信號值及運營商3部分組成。
觸發下載:3個按鈕控件,作為觸發下載條件。
- 控件ID1~3依次為圖片下載、視頻下載以及音頻下載。
下載過程:控件ID4~8作為下載過程的體現:
- 文本控件ID4用于顯示下載速度(min/Kb)
- 文本控件ID5顯示下載信息
- 進度條控件ID6為顯示下載進度
- 文本控件ID7用于顯示下載進度百分比
- 文本控件ID8顯示 ‘當前已下載大小/總下載大小’,單位Kb
4G信號和運營商:圖標控件控件ID10作為信號顯示、文本控件ID11用于顯示運營商。畫面配置如圖5-3所示:
注意:其他非關鍵控件不在一一介紹,下文不在累述
圖5-3畫面配置
5.2.2LUA編輯
本例程中,屏幕上電執行初始化操作,如加載4G AT 指令的庫、初始化4G模塊、定時獲取運營商和信號值等。
當用戶點擊圖片下載的時,調用air_http_download()開始下載文件。在下載回調函數on_http_download_file_cb()里進行數據存儲,顯示下載信息等。若該文件單次下載不完,會多次回調on_http_download_file_cb()函數,直至下載完畢,如圖5-4所示。
圖5-4下載流程
1初始化
調用系統函數on_init()執行代碼如程序清單 1所示:
因平臺限制,程序清單 1初始化 詳見http://www.gz-dc.com/article/id/6782.html
核心API函數
1)dofile (filename)
加載文件:本例程中加載4G AT 指令的庫
- filename: 文件名
設置串口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)air_hw_int()
4G AT 指令的庫函數,初始化4G模塊
6)at_cops_csq()
自定義封裝函數,獲取運行商和信號值
7)air_cmd_add(sendstr,ackstr,timeout,retry,callback)
屏幕向4G模塊發送AT指令
- sendstr:屏幕向4G模塊發送AT指令
- ackstr:4G模塊應答屏幕的請求
- timeou:應答超時
- retry:超時重發次數,可選
- callback:應答回調函數,可選
注:如果沒有設置超時重發次數,則超時時直接發送隊列中的下一條指令。
8)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模塊返回的數據
相關AT指令:
本例程中,涉及到獲取4G模塊初始化、運營商、信號值等AT交互指令回調的判斷,在on_air_resp_callback(key, value)回調函數中,判斷4G收發的相關AT指令,如下所示:
1)網絡數據是否激活:
屏幕發送:AT+SAPBR=1,1。在air_hw_int()函數里發送。
屏幕接收:OK。on_air_resp_callback(key, value)函數里執行4G返回數據的判斷
2) 獲取運營商:
屏幕發送:AT+COPS?。在at_cops_csq()函數了發送。
屏幕接收:OK。on_air_resp_callback(key, value)函數里執行4G返回數據的判斷
3) 獲取信號值:
屏幕發送:AT+CSQ。在at_cops_csq()函數了發送。
屏幕接收:OK。on_air_resp_callback(key, value)函數里執行4G返回數據的判斷
2HTTP下載
用戶點擊按鈕控件ID1~3,HTTP協議下載對應的圖片、視頻、音頻文件。文件,每次向服務器讀取7K大小文件,然后在下載回調函里,每次以2K字節的數據寫入文件,代碼如程序清單2所示:
因平臺限制,程序清單 2HTTP下載 詳見http://www.gz-dc.com/article/id/6782.html
核心API函數
1)air_http_download(url,break_size,user_callback)
4G庫函數,HTTP下載文件。
- url:HTTP下載資源連接,本例程中,將圖片、視頻以及音頻的資源路徑放在數組緩沖區中,如下所示:
local HttpDownFile_URITb = {'http://video.gz-dc.com/logo_480320_165kV2.jpg', 'http://video.gz-dc.com/video2_62M9s.mp4', 'http://video.gz-dc.com/music503k32s.mp3'}
- break_size:單次網絡下載的包大小,單位字節(BYTE),本例程中為7K
- user_callback:改形參是一個函數變量,HTTP下載應答屏幕的回調函數。名稱可自定義命名,如本例程為on_http_download_file_cb。
2)on_http_download_file_cb(key, value)
用戶自定義函數,HTTP下載回調函數。
- key:HTTP響應數據類型
- value:HTTP響應的內容
若key = ‘data_len’,表示HTTP下載的文件大小;value 表示為文件大小,單位byte。
若key = ‘data’,表示HTTP響應數據內容;value為數據內容,類型為字節數組,大小為air_http_download(url,break_size,user_callback)設置的break_size。
若key = ‘finish’,表示HTTP下載完成;value為文件總大小,單位byte
若key = ‘timeout’,表示HTTP下載超時。
若key = ‘dl_file_head_retry’,表示 HTTPACTION 查詢頭信息超時。若超時,內部已經處理了3次重發數據請求。
若key = ‘dl_file_read_retry’,表示 HTTPACTION 查詢讀取數據超時。若超時,內部已經處理了3次重發數據請求。
3)my_write_filedata(file, data, open_mode)
用戶自定義函數,寫文件。本例程,將4G HTTP下載返回的數據寫在文件中。
- file:存儲路徑,本例程中,將圖片、視頻以及音頻下載后的文件指定存儲在屏內(3為屏內盤符),路徑定義如下所示:
local HttpDownSave_FileTb = {'3:/image.jpg','3:/bench.mp4', '3:/my dream.mp 3'}
- data:存儲的數據,類型可以是‘數組’或‘字符串’,本例程中,4G HTTP下載返回的數據類型是數組
- open_mode:文件打開模式:本例程中,每次寫文件,將數據寫在文件尾。
注意:本文不再闡述文件讀寫的詳細說明,可參考相應的資料,如《Lua應用-文件讀寫V1.0.pdf》
4)load_surface(filename)
加載圖片到圖層。
- filename圖片文件路徑,支持JPEG/PNG
本例程中,當下載完成key=‘finish’時,且當前下載的是圖片文件(down_mode = 1),調用此API申請圖層繪圖,并調用redraw()刷新觸發on_draw()顯示。
注意:本文不再闡述繪圖的詳細說明,可參考相應的資料,如《LUA教程7-繪圖API使用說明.pdf》
5)destroy_surface(surface)
銷毀圖層,W系列支持、M系列 >= V6.1.241.00、F系列不支持
- surface圖層資源指針
6)play_sound(filename)
播放指定的聲音文件
- filenam:音頻文件路徑,支持MP3/WAV
本例程中,當下載完成key=‘finish’時,且當前下載的是音頻文件(down_mode = 3),調用此API播放音頻。若播放完畢,觸發音頻播放結束通知on_audio_callback(),在重復播放該音頻文件。
注意:本文不再闡述音頻的詳細說明,,可參考相應的資料,如 《M系列-播放SD卡里視頻、音頻文件 V1.0.pdf》
7)play_video(file,left,top,width,height)
播放指定的視頻文件
- file:文件路徑,支持MP4
- left:起始坐標x
- top:起始坐標y
- width:視頻顯示的寬度
- height:視頻顯示的高度
本例程中,當下載完成key=‘finish’時,且當前下載的是視頻文件(down_mode = 2),調用此API播放視頻,播放過程觸發on_video_notify(msg,v1, v2)。若msg=0,表示播放完畢,在重復播放該視頻文件。
注意:本文不再闡述視頻的詳細說明,,可參考相應的資料,如 《M系列-播放SD卡里視頻、音頻文件 V1.0.pdf》
8)on_video_notify(msg,v1, v2)
視頻播放回調函數
- msg:1-播放中,0-播放完畢
- v1:當前播放進度,當前已播時長,單位s
- v2:播放總進度, 當前視頻總時長,單位s
9)on_audio_callback(state)
聲音播放結束回調通知,state保留未使用。
10)on_draw(screen)
當界面的顯示內容需要更新時,系統自動調用此函數,用戶在此函數中添加自定義的繪圖操作。用戶繪制的內容疊加在畫面內容之上。此函數為系統回調函數,用戶不要直接調用。下面幾種情況會觸發此函數:
- 界面有動畫播放、視頻播放、RTC時間顯示的動態刷新;
- 用戶操作屏幕控件控件;
- 通過LUA腳本或串口指令更新控件;
- 通過執行redraw;
界面上有任何變化,都會觸發此函數
11)draw_surface(surface,dstx,dsty,width,height,srcx,srcy)
繪制圖層,相比于draw_image_file,此方法效率較高,W系列支持、M系列 >= V6.1.241.00支持(裁剪顯示)、F系列不支持
- surface圖層資源指針
- dstx圖片顯示X坐標
- dsty圖片顯示Y坐標
- width圖片顯示寬度[可選]
- height圖片顯示高度[可選]
- srcx圖片裁剪X坐標[可選]
- srcy圖片裁剪Y坐標[可選]
例如:
平鋪顯示:draw_surface(surface, dstx, dsty)
縮放顯示:draw_surface(surface, dstx, dsty, width, height),此方法M型不支持
裁剪顯示:draw_surface(surface, dstx, dsty, width, height ,srcx, srcy)
5.3下載工程
工程編譯成功后在輸出窗口會提示編譯成功,如圖5-5所示;
圖5-5編譯成功
在菜單欄中,文件→打開工程目錄,在‘dciot_build’目錄的‘private’拷貝到SD卡中,如圖5-6和圖5-7所示;把SD卡接上串口屏后重新上電,等到提示燒錄工程成功后,拔掉SD卡重新上電即可。
圖5-6量產向導
圖5-7拷貝到SD卡
-
4G
+關注
關注
15文章
5517瀏覽量
118980 -
HTTP
+關注
關注
0文章
504瀏覽量
31196 -
串口通信
+關注
關注
34文章
1624瀏覽量
55508
發布評論請先 登錄
相關推薦
評論