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

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

大彩串口屏4G應(yīng)用-HTTP定位和獲取天氣

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

HTTP定位和獲取天氣演示


一、適合范圍


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




二、適合范圍


1. VisualTFT軟件版本:V3.0.1.1112及以上的版本。

版本查看:

1) 打開VisualTFT軟件啟動(dòng)頁面如圖2-1軟件版本,右上角會(huì)顯示的軟件版本號(hào);

圖片 

圖2-1軟件版本


2) 打開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的HTTP GET的應(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命令手冊(cè)V4.2.8.pdf

5



百度地圖API逆地址解析:

http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad

6



濟(jì)南易客云網(wǎng)絡(luò)科技提供HTTP天氣訪問接口:

付費(fèi):https://www.tianqiapi.com/index/doc?version=v61

免費(fèi):https://www.tianqiapi.com/index/doc?version=v6




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

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

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

2. 配置串口屏工程;







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

5.1.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)證開發(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) 畫面配置

(2) LUA編輯

5.2.1 畫面配置

在畫面ID0中,SIM卡信息顯示、地點(diǎn)、時(shí)間及天氣4部分組成。

SIM卡信息:圖標(biāo)件ID1表示信號(hào)等級(jí)、文本控件ID2表示運(yùn)營(yíng)商、文本控件ID3用于顯示SIM卡ID。

地點(diǎn):文本控件ID7于顯示所在的城市。

時(shí)間日期:文本控件ID5用于顯示時(shí)間,文本控件ID6用于顯示日期。

溫度天氣:文本控件ID8顯示溫度,文本控件ID9用于用于顯示天氣描述(多云、晴等),圖標(biāo)控件ID10顯示多云等等的圖標(biāo)。

畫面配置如圖5-3所示:

注意:其他非關(guān)鍵控件不在一一介紹,下文不在累述

圖片

圖5-3 畫面配置


5.2..2 LUA編輯 

本例程中,屏幕上電執(zhí)行初始化操作,如加載4G AT 指令的庫、初始化和4G模塊的交互的函數(shù)、初始化4G模塊、開啟定時(shí)器獲取運(yùn)營(yíng)商和信號(hào)值。

當(dāng)4G模塊初始化完成后,獲取運(yùn)營(yíng)商/信號(hào)值以及獲取經(jīng)緯度。當(dāng)4G模塊返回對(duì)應(yīng)經(jīng)緯度后,根據(jù)經(jīng)緯度得到所在城市,在根據(jù)城市獲取該城市的氣溫以及天氣狀態(tài)。流程如下所示。

圖片


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庫函數(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()  –- 獲取卡號(hào)
    --開啟自動(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庫函數(shù)的定時(shí)處理
    
    --自動(dòng)獲取型號(hào)強(qiáng)度、時(shí)間、天氣的定時(shí)處理
    if timer_id == timerId_Sig_Weather
    then
        --定時(shí)器計(jì)數(shù),timer0_notify_cnt 每秒+1。計(jì)時(shí)長(zhǎng)度30min
        timer0_notify_cnt = timer0_notify_cnt + 1 
        if timer0_notify_cnt%15 == 0
        then
            --每15s調(diào)用一次,更新信號(hào)值
            at_cops_csq()
            --如果天氣圖標(biāo)沒有更新,則此處在調(diào)用一次
            if get_value(screen_main,10) == 0
            then
                get_wea_and_time() 
            end                                             
        elseif timer0_notify_cnt > 1800                     
        then                                                
            --每30min調(diào)用一次,更新天氣、時(shí)間、信號(hào)
            get_wea_and_time()
            --標(biāo)志位清空,重新開始30min計(jì)時(shí)
            timer0_notify_cnt = 0 
        end
    end
end
--[[*********************************************************************
** Function name : at_cops_csq
** Descriptions  : 獲取運(yùn)營(yíng)商信息、信號(hào)強(qiáng)度
** @return       : nil,無返回值
*********************************************************************--]]
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)  
    
    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指令獲取信號(hào)強(qiáng)度和運(yùn)營(yíng)商。
    --          使用 http get 請(qǐng)求天氣、北京時(shí)間。
    --調(diào)用函數(shù):at_cops_csq()
    --函數(shù)功能:獲取信號(hào)強(qiáng)度和運(yùn)營(yíng)商
    --調(diào)用函數(shù):get_wea_and_time()
    --函數(shù)功能:請(qǐng)求天氣、北京時(shí)間
    --********************************************************************
    if string.find(key,'+SAPBR=1,1') ~= nil and string.find(value,'OK') ~= nil 
    then
        set_text(screen_main, 16, '')
        at_cops_csq()
        get_wea_and_time()
    end
    
    --********************************************************************
    --條件:    4G模塊返回卡號(hào)
    --功能:    獲取卡號(hào)并顯示
    --********************************************************************
    if string.find(key,'+ICCID') ~= nil and string.find(value,'+ICCID') ~= nil 
    then
        --****************************************************************
        --value:            +ICCID: 89860117831003134201
        --要提取的值:       89860117831003134201
        --正則表達(dá)式:       '+ICCID: (%d*)' 
        --****************************************************************
        local regular_e = '+ICCID: (%d*)' --正則表達(dá)式
        local my_iccid = string.match( value, regular_e) --獲取的值賦給 my_iccid
        set_text( screen_main, 3, 'SIM卡號(hào)ICCID:'..my_iccid)
    end
    
    --********************************************************************
    --條件:    4G模塊返回運(yùn)營(yíng)商信息
    --功能:    設(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] )
    end
    
    --*******************************************************************
    --條件:    4G模塊返回信號(hào)強(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è)置信號(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指令庫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)行商和信號(hào)值

 

6) 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ù),可選

注:如果沒有設(shè)置超時(shí)重發(fā)次數(shù),則超時(shí)時(shí)直接發(fā)送隊(duì)列中的下一條指令。

 

7) 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)函數(shù)設(shè)置。

  • key    :屏幕->4G模塊,發(fā)送請(qǐng)求的AT指令
  • value  :4G模塊->屏幕,返回的數(shù)據(jù)


2. 獲取經(jīng)緯度

當(dāng)4G初始化完成后,獲取經(jīng)緯度,代碼如程序清單 2所示:


程序清單 2  獲取經(jīng)緯度

--[[*********************************************************************
** 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)商。
    --          使用 http get 請(qǐng)求天氣、北京時(shí)間。
    --調(diào)用函數(shù):at_cops_csq()
    --函數(shù)功能:獲取信號(hào)強(qiáng)度和運(yùn)營(yíng)商
    --調(diào)用函數(shù):get_wea_and_time()
    --函數(shù)功能:請(qǐng)求天氣、北京時(shí)間
    --********************************************************************
    if string.find(key,'+SAPBR=1,1') ~= nil and string.find(value,'OK') ~= nil 
    then
        set_text(screen_main, 16, '')
        at_cops_csq()
        get_wea_and_time()
    end
    
    ......
    --*******************************************************************
    --條件                   :    獲取經(jīng)緯度成功
    --功能                   :    訂閱主題
--@local_longitude   :    經(jīng)度
   --@local_latitude    :    緯度
    --********************************************************************
    if string.find(key,'+CIPGSMLOC') ~= nil and
        string.find(value,'+CIPGSMLOC') ~= nil
    then
        --**************************************************************
        --value:+CIPGSMLOC: 0,31.241045,121.472313,18/11/08,15:37:30
        --要提取的值:       31.241045
        --                   121.472313
        --正則表達(dá)式:       '+CIPGSMLOC: %d+,([0-9.]*),([0-9.]*),' 
        --***************************************************************
        local local_latitude=''
        local local_longitude=''
        local regular_e = '+CIPGSMLOC: %d+,([0-9.]*),([0-9.]*),' --正則表達(dá)式
        local local_latitude,local_longitude = string.match(value,regular_e) 
        --****************************************************************
        --條件:    提取經(jīng)緯度成功
        --功能:    通過 baidu API 獲取當(dāng)前經(jīng)緯度的地點(diǎn)
        --****************************************************************
        if local_latitude ~= nil and local_longitude ~= nil
        then
            --獲取經(jīng)緯度所表示的地點(diǎn)名稱
            baiduAPI_get_local(local_latitude,local_longitude) 
        end
    end
end

--[[*********************************************************************
** Function name: get_local_latitude_longitude
** Descriptions : 獲取當(dāng)?shù)亟?jīng)緯
** @return      : nil,無返回值
*********************************************************************--]]
function get_local_latitude_longitude()
    
    air_cmd_add('AT+CIPGSMLOC=1,1', 'OK', 5000)
end

▲下滑查看

核心API函數(shù)

1) get_local_latitude_longitude()

    獲取經(jīng)緯度。屏幕向4G模塊發(fā)送獲取經(jīng)緯度的AT指令’AT+CIPGSMLOC=1,1’,在on_air_resp_callback回調(diào)函數(shù)解析返回的數(shù)據(jù)。

 

3. 獲取城市名

當(dāng)獲取經(jīng)緯度后,根據(jù)經(jīng)緯度,獲取所在的城市,代碼如程序清單 3所示:


程序清單 3  獲取所在城市

--[[*********************************************************************
** 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)商。
    --          使用 http get 請(qǐng)求天氣、北京時(shí)間。
    --調(diào)用函數(shù):at_cops_csq()
    --函數(shù)功能:獲取信號(hào)強(qiáng)度和運(yùn)營(yíng)商
    --調(diào)用函數(shù):get_wea_and_time()
    --函數(shù)功能:請(qǐng)求天氣、北京時(shí)間
    --********************************************************************
    if string.find(key,'+SAPBR=1,1') ~= nil and string.find(value,'OK') ~= nil 
    then
        set_text(screen_main, 16, '')
        at_cops_csq()
        get_wea_and_time()
    end
    
    ......
    - 
            baiduAPI_get_local(local_latitude,local_longitude) 
    ......
    end
end

--[[*********************************************************************
** Function name   : baiduAPI_get_local
** Descriptions    : 通過baiduAPI轉(zhuǎn)換經(jīng)緯度為具體地點(diǎn)
** local_latitude  : 經(jīng)度
** local_longitude : 緯度
** @return          : nil,無返回值
** 注意               : 本例程中使用的百度API的key/ak可能失效,
**                      請(qǐng)自行在百度地圖API上注冊(cè)可靠的key/ak,
**                      測(cè)試時(shí),在key/ak屬性中,設(shè)置IP白名單為0.0.0.0,即可使用
** 推薦的地圖API     : 百度地圖API逆地址解析:
http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad
*********************************************************************--]]
function baiduAPI_get_local(local_latitude,local_longitude)
--本例程中使用的百度API的key/ak可能失效,請(qǐng)自行在百度地圖API上注冊(cè)可靠的key/ak
    air_http_get(
'http://api.map.baidu.com/reverse_geocoding/v3/?ak=IsOA0q3nApEHtpcojvh5k4GHNkKHhqT0&output=json&coordtype=wgs84ll&location='..local_latitude..','..local_longitude,
        baiduAPI_get_local_cb)
end

--[[*********************************************************************
** Function name : my_find_ChinaShi
** Descriptions  : 轉(zhuǎn)換城市名(UTF-8),如’廣州市‘轉(zhuǎn)換為’廣州
** CityAddr       : 城市名稱
** @return        : nil,無返回值
*********************************************************************--]]
function my_get_newCity(CityAddr)
   
    local strlen = string.len(CityAddr)
    local find_data  = 0
    local new_CityAddr = CityAddr
    
    for i = (strlen - 3), strlen
    do
        --轉(zhuǎn)換城市名字符串為16進(jìn)制數(shù)
        find_data = (find_data << 8) | string.byte(CityAddr, i, i)   
    end
    
    if (find_data & 0xFFFFFF) == 0xE5B882
    then
        --轉(zhuǎn)換城市名
        new_CityAddr = string.sub(CityAddr, 1, (strlen - 3))
    end
    
    return new_CityAddr
end

--[[*********************************************************************
** Function name:  baiduAPI_get_local_cb
** Descriptions:   baiduAPI請(qǐng)求的回調(diào)函數(shù)
*********************************************************************--]]
function baiduAPI_get_local_cb(key,value)
    local string_time_ball=''
    
    if key=='data' then
        string_time_ball = table2str(value)  --表轉(zhuǎn)換為字符串
        local jsondata=cjson.decode(string_time_ball) --json解析
        --提取表里的城市名(UTF-8)
        local local_city = jsondata['result']['addressComponent']["city"]
        local_city = my_get_newCity i(local_city) --轉(zhuǎn)換城市名
        http_get_wea_and_time(local_city)     --獲取指定城市的天氣和北京時(shí)間
    end
end

▲下滑查看


核心API函數(shù)

1) baiduAPI_get_local ()

函數(shù)內(nèi)部封裝4G AT指令集HTTP Get資源請(qǐng)求函數(shù)air_http_get(),本例程中根據(jù)百度提供的資源接口,拼接經(jīng)緯度發(fā)送請(qǐng)求。若百度響應(yīng)改請(qǐng)求,則觸發(fā)回到平baiduAPI_get_local_cb()函數(shù)。

 

4. 獲取時(shí)間/天氣

當(dāng)獲取經(jīng)中文城市名稱后,獲取所在的該城市的溫度和天氣,代碼程序清單 4所示:


程序清單 4  獲取天氣

--[[*******************************************************************
--本例程中使用的天氣API的key可能失效,請(qǐng)自行搜索可靠的天氣API
--推薦在網(wǎng)絡(luò)上購買付費(fèi)的天氣API,如濟(jì)南易客云網(wǎng)絡(luò)科技提供HTTP天氣訪問接口
--如 https://www.tianqiapi.com/index/doc?version=v61
--免費(fèi)天氣API,如 https://www.tianqiapi.com/index/doc?version=v6
--xue、lei、shachen、wu、bingbao、yun、yu、yin、qing
*******************************************************************--]]
local wea = { ['unknow']=0,['xue']=1, ['lei']=2,['shachen']=3, 
                 ['wu']=4,['bingbao']=5,['yun']=6,['yu']=7,['yin']=8,
                 ['qing']=9, ['yunnight']=10, ['qingnight']=11}

local wea_chinese = { ['unknow']='未知',['xue']='雪',['lei']='雷',
                     ['shachen']='沙塵暴',['wu']='有霧',['bingbao']='冰雹', 
                     ['yun']='多云', ['yu']='下雨', ['yin']='陰天',
                     ['qing']='晴天',['yunnight']='多云',['qingnight']='晴天' }
                  
--[[*********************************************************************
** Function name:  on_get_wea_cb
** Descriptions:   獲取指定城市的天氣和北京時(shí)間的回調(diào)函數(shù)
*********************************************************************--]]
function on_get_wea_cb(key,value)
    local jsonstring_wea_ball=''
    local jsondata_string = ''
    local city,wea_img,tem = 0,0,0
    
    if key=='data' then
        jsonstring_wea_ball = table2str(value) --表轉(zhuǎn)換為字符串
        local jsondata = cjson.decode(jsonstring_wea_ball) --解析JSON數(shù)據(jù)
        city = jsondata.city --獲取城市,UTF8編碼
        wea_img = jsondata.wea_img --獲取天氣
        tem = jsondata.tem --獲取溫度
        set_text(screen_main,7,city) --顯示城市名(UTF-8)
        set_value(screen_main,10,wea[wea_img]) --設(shè)置天氣圖標(biāo)
        ---獲取當(dāng)前時(shí)間用于顯示晚上的圖標(biāo)
        yearwea,monwea,daywea,hourwea,minwea,secwea,weekwea=
                get_date_time()
        if wea_img == 'yun' or wea_img == 'qing' 
        then
            if hourwea <= 6 and hourwea >= 19 
            then
                if wea_img == 'yun' 
                then
                    --顯示晚上多云的圖標(biāo)
                    set_value(screen_main,10,wea['yunnight'])
                end
                if wea_img == 'qing' 
                then
                    --顯示晚上晴的圖標(biāo)
                    set_value(screen_main,10,wea['qingnight']) 
                end
            end
        end
        --設(shè)置天氣中文名稱
        set_text(screen_main,9,wea_chinese[wea_img])
        set_text(screen_main,8,tem) --設(shè)置溫度
        set_text(screen_main,16,'')
        set_visiable(screen_main, 16, 0)
    end
end

--[[*****************************************************************
** Function name:  on_get_time_cb
** Descriptions :  獲取時(shí)間回調(diào)函數(shù)
** @key         :  屏幕->4G模塊的發(fā)送請(qǐng)求
** @value       :  4G模塊->返回的數(shù)據(jù)
** @return      :  nil,無返回值
*****************************************************************--]]
function on_get_time_cb(key, value)
    --*****************************************************************
    --value:         
{"sysTime2":"2020-08-15 14:52:12","sysTime1":"20200815145212"}
    --要提取的值:      2020-08-15 14:52:12
    --對(duì)應(yīng)正則表達(dá)式:  '"sysTime2":"(%d*)-(%d*)-(%d*) (%d*):(%d*):(%d*)"' 
    --*****************************************************************
    local string_time_ball=''
    local get_year, get_mon, get_day, get_hour, get_min, get_sec = 0
    local regular_e = '"sysTime2":"(%d*)-(%d*)-(%d*) (%d*):(%d*):(%d*)"'                    --正則表達(dá)式
    
    if key=='data' 
	then
       --表轉(zhuǎn)換為字符串
        string_time_ball = table2str(value) 
        get_year, get_mon, get_day, get_hour, get_min, get_sec = string.match( string_time_ball, regular_e)--獲取字符串中的時(shí)間
        set_date_time(get_year, get_mon, get_day, get_hour, get_min, get_sec)
    end
end

--[[*****************************************************************
** Function name: http_get_time
** Descriptions : 獲取時(shí)間
** @return       : nil,無返回值
** 注意            : 本例程中使用的獲取時(shí)間的連接,可能會(huì)失效,請(qǐng)自行搜索可靠連接
**                   可以使用 'AT+CIPGSMLOC=1,1' 指令獲取大致的北京時(shí)間,此方法得到的時(shí)間有可能有誤差
*****************************************************************--]]
function http_get_time()
    --本例程中使用的獲取時(shí)間的連接,可能會(huì)失效,請(qǐng)自行搜索可靠連接
    air_http_get(
        'http://quan.suning.com/getSysTime.do',
        on_get_time_cb)
end
--[[*********************************************************************
** Function name:  http_get_wea_and_time
** Descriptions:   獲取指定城市的天氣和北京時(shí)間
** 本例程中使用的天氣API的key可能失效,請(qǐng)自行搜索可靠的天氣API
** 推薦在網(wǎng)絡(luò)上購買付費(fèi)的天氣API,如濟(jì)南易客云網(wǎng)絡(luò)科技提供HTTP天氣訪問接口
** 如 https://www.tianqiapi.com/index/doc?version=v61
** 免費(fèi)天氣API,如 https://www.tianqiapi.com/index/doc?version=v6
*********************************************************************--]] 
function http_get_wea_and_time(local_city)
    if local_city~=nil 
    then
        set_text(screen_main,16,'正在獲取天氣...')
        http_get_time()
--本例程中使用的天氣API可能失效,請(qǐng)自行搜索可靠的天氣API
        air_http_get(
'https://tianqiapi.com/api?version=v61&appid=37231943&appsecret=2BJ3teqj&city='..local_city,
            on_get_wea_cb,
            'USER_DEFINED',
            'ntent-Type: application/x-www-form-urlencoded'
            )  
    end
end

▲下滑查看

核心API函數(shù)

1) http_get_wea_and_tim e()

函數(shù)內(nèi)部封裝4G AT指令集HTTP Get資源請(qǐng)求函數(shù)air_http_get(),本例程中根據(jù)濟(jì)南易客云網(wǎng)絡(luò)科技提供付費(fèi)和免費(fèi)的資源接口。其中免費(fèi)的訪問獲取次數(shù)是200次/天,付費(fèi)的是5000次/天。該服務(wù)器響應(yīng)請(qǐng)求自動(dòng)回調(diào)on_get_wea_cb處理響應(yīng)的信息。同理,獲取同步云端時(shí)間調(diào)用http_get_time()即可。







5.3 下載工程

在菜單欄中,文件打開工程目錄,在dciot_build’目錄的‘private’文件夾拷貝到SD卡中,5-45-5所示;把SD卡接上串口屏后重新上電,等到提示燒錄工程成功后,拔掉SD卡重新上電即可。

圖5-4下載文件

 

圖5-5拷貝到SD卡