广州大彩串口屏论坛_大彩开发者交流论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 9096|回复: 0

大彩串口屏4G应用-HTTP定位和获取天气

[复制链接]

106

主题

139

帖子

9850

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
9850
发表于 2021-1-21 13:44:13 | 显示全部楼层 |阅读模式
本帖最后由 卡米拉 于 2021-1-21 14:06 编辑

HTTP定位和获取天气演示

一、适合范围
本文档适合大彩PM 4G系列串口屏产品使用。

二、适合范围
1. VisualTFT软件版本:V3.0.1.1112及以上的版本。
版本查看:
1) 打开VisualTFT软件启动页面如图2-1软件版本,右上角会显示的软件版本号;
图2-1软件版本

2) 打开VisualTFT,在软件右下角可以查看软件版本图22软件版本,最新版本可登录http://www.gz-dc.com/进行下载。
图2-2软件版本

2. 串口屏硬件版本: M系列固件 >= V6.3.257.00。
版本查看:
1) 查看屏幕背面版本号贴纸;
2) VisualTFT与屏幕联机成功后,右下角显示的版本号。



三、概述
本例程中,通过获取天气、定位来介绍4G的HTTP GET的应用。



四、参考资料
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

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

5、百度地图API逆地址解析:
http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad

6、济南易客云网络科技提供HTTP天气访问接口:
付费:https://www.tianqiapi.com/index/doc?version=v61
免费:https://www.tianqiapi.com/index/doc?version=v6


五、教程实现
本文主要将以下2点进行说明:
1. 准备工程素材;
2. 配置串口屏工程;

5.1 准备工程素材
5.1.1 准备工程素材
在实现例程前需要作以下3个准备:
1. 硬件平台;
2. 软件平台;
3. UI素材;
该例程使用大彩M系列7寸串口屏DC80480M070_1111_0T为验证开发平台。如图5-1所示;
图5-1  M系列7寸串口屏
其他尺寸的串口屏均可借鉴此教程。

5.1.2 软件平台
使用大彩自主研发的上位机软件VisualTFT配置工程,登录http://www.gz-dc.com/下载。如图5-2所示;
图5-2下载软件

5.2 配置串口屏工程
本文主要介绍以下2点:
(1) 画面配置
(2) LUA编辑

5.2.1 画面配置
在画面ID0中,SIM卡信息显示、地点、时间及天气4部分组成。
SIM卡信息:图标件ID1表示信号等级、文本控件ID2表示运营商、文本控件ID3用于显示SIM卡ID。
地点:文本控件ID7于显示所在的城市。
时间日期:文本控件ID5用于显示时间,文本控件ID6用于显示日期。
温度天气:文本控件ID8显示温度,文本控件ID9用于用于显示天气描述(多云、晴等),图标控件ID10显示多云等等的图标。
画面配置如图5-3所示:
注意:其他非关键控件不在一一介绍,下文不在累述
图5-3 画面配置

5.2..2 LUA编辑
本例程中,屏幕上电执行初始化操作,如加载4G AT 指令的库、初始化和4G模块的交互的函数、初始化4G模块、开启定时器获取运营商和信号值。
当4G模块初始化完成后,获取运营商/信号值以及获取经纬度。当4G模块返回对应经纬度后,根据经纬度得到所在城市,在根据城市获取该城市的气温以及天气状态。流程如下所示。

1. 初始化
调用系统函数on_init()执行代码如程序清单 1所示:
程序清单 1初始化
  1. --[[*********************************************************************
  2. ** Function name:  on_init
  3. ** Descriptions :  系统初始化时,执行此回调函数。
  4. *********************************************************************--]]
  5. function on_init()
  6.    
  7.     dofile(‘Air724at.lua') --加载 http.lua 文件
  8.     uart_set_baudrate3(115200) --设置与4G模块通讯的串口3的波特率为115200
  9.    
  10.     --设置4G库函数的命令发送函数,命令回调函数、调试信息打印函数
  11.     air_set_callback(on_air_send_cb,on_air_resp_callback,on_air_log_cb)
  12.     air_hw_int()     --4G模块初始化设置
  13.     air_get_iccid()  –- 获取卡号
  14.     --开启自动获取型号强度、时间、天气功能
  15.     start_timer(timerId_Sig_Weather, 1000 , 0, 0)
  16. end

  17. --[[*********************************************************************
  18. ** Function name:  on_timer
  19. ** Descriptions :  定时器超时回到调函数。
  20. ** @ timer_id    :  定时器ID
  21. *********************************************************************--]]
  22. function on_timer(timer_id)
  23.     on_air_timer(timer_id) --4G库函数的定时处理
  24.    
  25.     --自动获取型号强度、时间、天气的定时处理
  26.     if timer_id == timerId_Sig_Weather
  27.     then
  28.         --定时器计数,timer0_notify_cnt 每秒+1。计时长度30min
  29.         timer0_notify_cnt = timer0_notify_cnt + 1
  30.         if timer0_notify_cnt%15 == 0
  31.         then
  32.             --每15s调用一次,更新信号值
  33.             at_cops_csq()
  34.             --如果天气图标没有更新,则此处在调用一次
  35.             if get_value(screen_main,10) == 0
  36.             then
  37.                 get_wea_and_time()
  38.             end                                             
  39.         elseif timer0_notify_cnt > 1800                     
  40.         then                                                
  41.             --每30min调用一次,更新天气、时间、信号
  42.             get_wea_and_time()
  43.             --标志位清空,重新开始30min计时
  44.             timer0_notify_cnt = 0
  45.         end
  46.     end
  47. end
  48. --[[*********************************************************************
  49. ** Function name : at_cops_csq
  50. ** Descriptions  : 获取运营商信息、信号强度
  51. ** @return       : nil,无返回值
  52. *********************************************************************--]]
  53. function at_cops_csq()
  54.     air_cmd_add('AT+COPS?','OK',1000) –获取运营商
  55.     air_cmd_add('AT+CSQ'  ,'OK',1000) –获取信号
  56. end

  57. --[[*********************************************************************
  58. ** Function name:  on_air_resp_callback
  59. ** Descriptions :  4G模块-数据回调接口
  60. ** @key         :  屏幕->4G模块的发送请求
  61. ** @value       :  4G模块->返回的数据
  62. *********************************************************************--]]
  63. function on_air_resp_callback(key, value)  
  64.    
  65.     if value == nil
  66.     then
  67.         return              --value为空时退出
  68.     end
  69.    
  70.     --********************************************************************
  71.     --功能:    判断 key
  72.     --          如果 key 为空,则退出函数。
  73.     --          因为 key 为空时,下方 string.find( key , ‘’) 是不正确的使用。
  74.     --          以下key的处理必须不为空,
  75.     --********************************************************************
  76.     if key == nil
  77.     then
  78.         return
  79.     end
  80.    
  81.     --********************************************************************
  82.     --条件:    4G初始化完成
  83.     --功能:    使用使用AT指令获取信号强度和运营商。
  84.     --          使用 http get 请求天气、北京时间。
  85.     --调用函数:at_cops_csq()
  86.     --函数功能:获取信号强度和运营商
  87.     --调用函数:get_wea_and_time()
  88.     --函数功能:请求天气、北京时间
  89.     --********************************************************************
  90.     if string.find(key,'+SAPBR=1,1') ~= nil and string.find(value,'OK') ~= nil
  91.     then
  92.         set_text(screen_main, 16, '')
  93.         at_cops_csq()
  94.         get_wea_and_time()
  95.     end
  96.    
  97.     --********************************************************************
  98.     --条件:    4G模块返回卡号
  99.     --功能:    获取卡号并显示
  100.     --********************************************************************
  101.     if string.find(key,'+ICCID') ~= nil and string.find(value,'+ICCID') ~= nil
  102.     then
  103.         --****************************************************************
  104.         --value:            +ICCID: 89860117831003134201
  105.         --要提取的值:       89860117831003134201
  106.         --正则表达式:       '+ICCID: (%d*)'
  107.         --****************************************************************
  108.         local regular_e = '+ICCID: (%d*)' --正则表达式
  109.         local my_iccid = string.match( value, regular_e) --获取的值赋给 my_iccid
  110.         set_text( screen_main, 3, 'SIM卡号ICCID:'..my_iccid)
  111.     end
  112.    
  113.     --********************************************************************
  114.     --条件:    4G模块返回运营商信息
  115.     --功能:    设置串口波特率为 115200
  116.     --********************************************************************
  117.     if string.find(key,'+COPS')~=nil and string.find(value,'+COPS')~=nil
  118.     then
  119.         --****************************************************************
  120.         --value:            +COPS: 0,2,"46000",7
  121.         --要提取的值:       46000
  122.         --正则表达式:       '+COPS:.*,.*,"(%d*)"'
  123.         --****************************************************************
  124.         local regular_e = '+COPS:.*,.*,"(%d*)"' --正则表达式
  125.         --获取的值赋给 my_mobile_MCCMNC
  126.         local my_mobile_MCCMNC = string.match( value, regular_e )
  127.         set_text( screen_main, 2, mobile_MCCMNC[my_mobile_MCCMNC] )
  128.     end
  129.    
  130.     --*******************************************************************
  131.     --条件:    4G模块返回信号强度信息
  132.     --功能:    设置串口波特率为 115200
  133.     --*******************************************************************
  134.     if string.find(key,'+CSQ')~=nil and string.find(value,'+CSQ')~=nil
  135.     then
  136.         --***************************************************************
  137.         --value:            +CSQ: 15,99
  138.         --要提取的值:       15
  139.         --正则表达式:       '+CSQ: (.*),.*'
  140.         --***************************************************************
  141.         local regular_e = '+CSQ: (.*),.*' --正则表达式
  142.          --获取的值赋给 my_csq
  143.          local my_csq = tonumber(string.match(value,regular_e))
  144.         if my_csq<=11
  145.         then
  146.             set_value( screen_main, 1, 1) --设置信号图标显示第1帧
  147.         elseif my_csq>=12 and my_csq<=13
  148.         then
  149.             set_value( screen_main, 1, 2) --设置信号图标显示第2帧
  150.         elseif my_csq>=14 and my_csq<=15
  151.         then
  152.             set_value( screen_main, 1, 3) --设置信号图标显示第3帧
  153.         elseif my_csq>=16
  154.         then
  155.             set_value( screen_main, 1, 4) --设置信号图标显示第4帧
  156.         end
  157.     end
  158.     ......
  159. end

  160. --[[**********************************************************************
  161. ** Function name: on_uart_recv_data3
  162. ** Descriptions : 接收串口3数据回调函数,连接4G模块。
  163. **********************************************************************--]]
  164. function on_uart_recv_data3(packet)
  165.     --4G AT指令库API
  166.     on_air_recv_data(packet)
  167. 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模块应答屏幕的请求
  • timeou :应答超时
  • 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模块->屏幕,返回的数据

2. 获取经纬度
当4G初始化完成后,获取经纬度,代码如程序清单 2所示:
程序清单 2  获取经纬度
  1. <font size="2">--[[*********************************************************************
  2. ** Function name:  on_air_resp_callback
  3. ** Descriptions :  4G模块-数据回调接口
  4. ** @key           :  屏幕->4G模块的发送请求
  5. ** @value         :  4G模块->返回的数据
  6. *********************************************************************--]]
  7. function on_air_resp_callback(key, value)  
  8.    
  9.     ......
  10.     --********************************************************************
  11.     --条件:    4G初始化完成
  12.     --功能:    使用使用AT指令获取信号强度和运营商。
  13.     --          使用 http get 请求天气、北京时间。
  14.     --调用函数:at_cops_csq()
  15.     --函数功能:获取信号强度和运营商
  16.     --调用函数:get_wea_and_time()
  17.     --函数功能:请求天气、北京时间
  18.     --********************************************************************
  19.     if string.find(key,'+SAPBR=1,1') ~= nil and string.find(value,'OK') ~= nil
  20.     then
  21.         set_text(screen_main, 16, '')
  22.         at_cops_csq()
  23.         get_wea_and_time()
  24.     end
  25.    
  26.     ......
  27.     --*******************************************************************
  28.     --条件                   :    获取经纬度成功
  29.     --功能                   :    订阅主题
  30. --@local_longitude   :    经度
  31.    --@local_latitude    :    纬度
  32.     --********************************************************************
  33.     if string.find(key,'+CIPGSMLOC') ~= nil and
  34.         string.find(value,'+CIPGSMLOC') ~= nil
  35.     then
  36.         --**************************************************************
  37.         --value:+CIPGSMLOC: 0,31.241045,121.472313,18/11/08,15:37:30
  38.         --要提取的值:       31.241045
  39.         --                   121.472313
  40.         --正则表达式:       '+CIPGSMLOC: %d+,([0-9.]*),([0-9.]*),'
  41.         --***************************************************************
  42.         local local_latitude=''
  43.         local local_longitude=''
  44.         local regular_e = '+CIPGSMLOC: %d+,([0-9.]*),([0-9.]*),' --正则表达式
  45.         local local_latitude,local_longitude = string.match(value,regular_e)
  46.         --****************************************************************
  47.         --条件:    提取经纬度成功
  48.         --功能:    通过 baidu API 获取当前经纬度的地点
  49.         --****************************************************************
  50.         if local_latitude ~= nil and local_longitude ~= nil
  51.         then
  52.             --获取经纬度所表示的地点名称
  53.             baiduAPI_get_local(local_latitude,local_longitude)
  54.         end
  55.     end
  56. end

  57. --[[*********************************************************************
  58. ** Function name: get_local_latitude_longitude
  59. ** Descriptions : 获取当地经纬
  60. ** @return      : nil,无返回值
  61. *********************************************************************--]]
  62. function get_local_latitude_longitude()
  63.    
  64.     air_cmd_add('AT+CIPGSMLOC=1,1', 'OK', 5000)
  65. end</font>
复制代码

核心API函数
1) get_local_latitude_longitude()
    获取经纬度。屏幕向4G模块发送获取经纬度的AT指令’AT+CIPGSMLOC=1,1’,在on_air_resp_callback回调函数解析返回的数据。


3. 获取城市名
当获取经纬度后,根据经纬度,获取所在的城市,代码如程序清单 3所示:
程序清单 3  获取所在城市
  1. --[[*********************************************************************
  2. ** Function name:  on_air_resp_callback
  3. ** Descriptions :  4G模块-数据回调接口
  4. ** @key         :  屏幕->4G模块的发送请求
  5. ** @value       :  4G模块->返回的数据
  6. *********************************************************************--]]
  7. function on_air_resp_callback(key, value)  
  8.    
  9.     ......
  10.     --********************************************************************
  11.     --条件:    4G初始化完成
  12.     --功能:    使用使用AT指令获取信号强度和运营商。
  13.     --          使用 http get 请求天气、北京时间。
  14.     --调用函数:at_cops_csq()
  15.     --函数功能:获取信号强度和运营商
  16.     --调用函数:get_wea_and_time()
  17.     --函数功能:请求天气、北京时间
  18.     --********************************************************************
  19.     if string.find(key,'+SAPBR=1,1') ~= nil and string.find(value,'OK') ~= nil
  20.     then
  21.         set_text(screen_main, 16, '')
  22.         at_cops_csq()
  23.         get_wea_and_time()
  24.     end
  25.    
  26.     ......
  27.     -
  28.             baiduAPI_get_local(local_latitude,local_longitude)
  29.     ......
  30.     end
  31. end

  32. --[[*********************************************************************
  33. ** Function name   : baiduAPI_get_local
  34. ** Descriptions    : 通过baiduAPI转换经纬度为具体地点
  35. ** local_latitude  : 经度
  36. ** local_longitude : 纬度
  37. ** @return          : nil,无返回值
  38. ** 注意               : 本例程中使用的百度API的key/ak可能失效,
  39. **                      请自行在百度地图API上注册可靠的key/ak,
  40. **                      测试时,在key/ak属性中,设置IP白名单为0.0.0.0,即可使用
  41. ** 推荐的地图API     : 百度地图API逆地址解析:
  42. http://lbsyun.baidu.com/index.php?title=webapi/guide/webservice-geocoding-abroad
  43. *********************************************************************--]]
  44. function baiduAPI_get_local(local_latitude,local_longitude)
  45. --本例程中使用的百度API的key/ak可能失效,请自行在百度地图API上注册可靠的key/ak
  46.     air_http_get(
  47. 'http://api.map.baidu.com/reverse_geocoding/v3/?ak=IsOA0q3nApEHtpcojvh5k4GHNkKHhqT0&output=json&coordtype=wgs84ll&location='..local_latitude..','..local_longitude,
  48.         baiduAPI_get_local_cb)
  49. end

  50. --[[*********************************************************************
  51. ** Function name : my_find_ChinaShi
  52. ** Descriptions  : 转换城市名(UTF-8),如’广州市‘转换为’广州
  53. ** CityAddr       : 城市名称
  54. ** @return        : nil,无返回值
  55. *********************************************************************--]]
  56. function my_get_newCity(CityAddr)
  57.    
  58.     local strlen = string.len(CityAddr)
  59.     local find_data  = 0
  60.     local new_CityAddr = CityAddr
  61.    
  62.     for i = (strlen - 3), strlen
  63.     do
  64.         --转换城市名字符串为16进制数
  65.         find_data = (find_data << 8) | string.byte(CityAddr, i, i)   
  66.     end
  67.    
  68.     if (find_data & 0xFFFFFF) == 0xE5B882
  69.     then
  70.         --转换城市名
  71.         new_CityAddr = string.sub(CityAddr, 1, (strlen - 3))
  72.     end
  73.    
  74.     return new_CityAddr
  75. end

  76. --[[*********************************************************************
  77. ** Function name:  baiduAPI_get_local_cb
  78. ** Descriptions:   baiduAPI请求的回调函数
  79. *********************************************************************--]]
  80. function baiduAPI_get_local_cb(key,value)
  81.     local string_time_ball=''
  82.    
  83.     if key=='data' then
  84.         string_time_ball = table2str(value)  --表转换为字符串
  85.         local jsondata=cjson.decode(string_time_ball) --json解析
  86.         --提取表里的城市名(UTF-8)
  87.         local local_city = jsondata['result']['addressComponent']["city"]
  88.         local_city = my_get_newCity i(local_city) --转换城市名
  89.         http_get_wea_and_time(local_city)     --获取指定城市的天气和北京时间
  90.     end
  91. end
复制代码

核心API函数
1) baiduAPI_get_local ()
函数内部封装4G AT指令集HTTP Get资源请求函数air_http_get(),本例程中根据百度提供的资源接口,拼接经纬度发送请求。若百度响应改请求,则触发回到平baiduAPI_get_local_cb()函数。

4. 获取时间/天气
当获取经中文城市名称后,获取所在的该城市的温度和天气,代码程序清单 4所示:

程序清单 4  获取天气
  1. --[[*******************************************************************
  2. --本例程中使用的天气API的key可能失效,请自行搜索可靠的天气API
  3. --推荐在网络上购买付费的天气API,如济南易客云网络科技提供HTTP天气访问接口
  4. --如 https://www.tianqiapi.com/index/doc?version=v61
  5. --免费天气API,如 https://www.tianqiapi.com/index/doc?version=v6
  6. --xue、lei、shachen、wu、bingbao、yun、yu、yin、qing
  7. *******************************************************************--]]
  8. local wea = { ['unknow']=0,['xue']=1, ['lei']=2,['shachen']=3,
  9.                  ['wu']=4,['bingbao']=5,['yun']=6,['yu']=7,['yin']=8,
  10.                  ['qing']=9, ['yunnight']=10, ['qingnight']=11}

  11. local wea_chinese = { ['unknow']='未知',['xue']='雪',['lei']='雷',
  12.                      ['shachen']='沙尘暴',['wu']='有雾',['bingbao']='冰雹',
  13.                      ['yun']='多云', ['yu']='下雨', ['yin']='阴天',
  14.                      ['qing']='晴天',['yunnight']='多云',['qingnight']='晴天' }
  15.                   
  16. --[[*********************************************************************
  17. ** Function name:  on_get_wea_cb
  18. ** Descriptions:   获取指定城市的天气和北京时间的回调函数
  19. *********************************************************************--]]
  20. function on_get_wea_cb(key,value)
  21.     local jsonstring_wea_ball=''
  22.     local jsondata_string = ''
  23.     local city,wea_img,tem = 0,0,0
  24.    
  25.     if key=='data' then
  26.         jsonstring_wea_ball = table2str(value) --表转换为字符串
  27.         local jsondata = cjson.decode(jsonstring_wea_ball) --解析JSON数据
  28.         city = jsondata.city --获取城市,UTF8编码
  29.         wea_img = jsondata.wea_img --获取天气
  30.         tem = jsondata.tem --获取温度
  31.         set_text(screen_main,7,city) --显示城市名(UTF-8)
  32.         set_value(screen_main,10,wea[wea_img]) --设置天气图标
  33.         ---获取当前时间用于显示晚上的图标
  34.         yearwea,monwea,daywea,hourwea,minwea,secwea,weekwea=
  35.                 get_date_time()
  36.         if wea_img == 'yun' or wea_img == 'qing'
  37.         then
  38.             if hourwea <= 6 and hourwea >= 19
  39.             then
  40.                 if wea_img == 'yun'
  41.                 then
  42.                     --显示晚上多云的图标
  43.                     set_value(screen_main,10,wea['yunnight'])
  44.                 end
  45.                 if wea_img == 'qing'
  46.                 then
  47.                     --显示晚上晴的图标
  48.                     set_value(screen_main,10,wea['qingnight'])
  49.                 end
  50.             end
  51.         end
  52.         --设置天气中文名称
  53.         set_text(screen_main,9,wea_chinese[wea_img])
  54.         set_text(screen_main,8,tem) --设置温度
  55.         set_text(screen_main,16,'')
  56.         set_visiable(screen_main, 16, 0)
  57.     end
  58. end

  59. --[[*****************************************************************
  60. ** Function name:  on_get_time_cb
  61. ** Descriptions :  获取时间回调函数
  62. ** @key         :  屏幕->4G模块的发送请求
  63. ** @value       :  4G模块->返回的数据
  64. ** @return      :  nil,无返回值
  65. *****************************************************************--]]
  66. function on_get_time_cb(key, value)
  67.     --*****************************************************************
  68.     --value:         
  69. {"sysTime2":"2020-08-15 14:52:12","sysTime1":"20200815145212"}
  70.     --要提取的值:      2020-08-15 14:52:12
  71.     --对应正则表达式:  '"sysTime2":"(%d*)-(%d*)-(%d*) (%d*):(%d*):(%d*)"'
  72.     --*****************************************************************
  73.     local string_time_ball=''
  74.     local get_year, get_mon, get_day, get_hour, get_min, get_sec = 0
  75.     local regular_e = '"sysTime2":"(%d*)-(%d*)-(%d*) (%d*):(%d*):(%d*)"'                    --正则表达式
  76.    
  77.     if key=='data'
  78.         then
  79.        --表转换为字符串
  80.         string_time_ball = table2str(value)
  81.         get_year, get_mon, get_day, get_hour, get_min, get_sec = string.match( string_time_ball, regular_e)--获取字符串中的时间
  82.         set_date_time(get_year, get_mon, get_day, get_hour, get_min, get_sec)
  83.     end
  84. end

  85. --[[*****************************************************************
  86. ** Function name: http_get_time
  87. ** Descriptions : 获取时间
  88. ** @return       : nil,无返回值
  89. ** 注意            : 本例程中使用的获取时间的连接,可能会失效,请自行搜索可靠连接
  90. **                   可以使用 'AT+CIPGSMLOC=1,1' 指令获取大致的北京时间,此方法得到的时间有可能有误差
  91. *****************************************************************--]]
  92. function http_get_time()
  93.     --本例程中使用的获取时间的连接,可能会失效,请自行搜索可靠连接
  94.     air_http_get(
  95.         'http://quan.suning.com/getSysTime.do',
  96.         on_get_time_cb)
  97. end
  98. --[[*********************************************************************
  99. ** Function name:  http_get_wea_and_time
  100. ** Descriptions:   获取指定城市的天气和北京时间
  101. ** 本例程中使用的天气API的key可能失效,请自行搜索可靠的天气API
  102. ** 推荐在网络上购买付费的天气API,如济南易客云网络科技提供HTTP天气访问接口
  103. ** 如 https://www.tianqiapi.com/index/doc?version=v61
  104. ** 免费天气API,如 https://www.tianqiapi.com/index/doc?version=v6
  105. *********************************************************************--]]
  106. function http_get_wea_and_time(local_city)
  107.     if local_city~=nil
  108.     then
  109.         set_text(screen_main,16,'正在获取天气...')
  110.         http_get_time()
  111. --本例程中使用的天气API可能失效,请自行搜索可靠的天气API
  112.         air_http_get(
  113. 'https://tianqiapi.com/api?version=v61&appid=37231943&appsecret=2BJ3teqj&city='..local_city,
  114.             on_get_wea_cb,
  115.             'USER_DEFINED',
  116.             'ntent-Type: application/x-www-form-urlencoded'
  117.             )  
  118.     end
  119. end
复制代码

核心API函数
1) http_get_wea_and_tim e()
函数内部封装4G AT指令集HTTP Get资源请求函数air_http_get(),本例程中根据济南易客云网络科技提供付费和免费的资源接口。其中免费的访问获取次数是200次/天,付费的是5000次/天。该服务器响应请求自动回调on_get_wea_cb处理响应的信息。同理,获取同步云端时间调用http_get_time()即可。

5.3 下载工程
在菜单栏中,文件→打开工程目录,在‘dciot_build’目录的‘private’文件夹拷贝到SD卡中,如图5-4和图5-5所示;把SD卡接上串口屏后重新上电,等到提示烧录工程成功后,拔掉SD卡重新上电即可。
图5-4下载文件

图5-5拷贝到SD卡



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
销售与技术支持:(020)82186683-601
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|广州大彩串口屏论坛_大彩开发者交流论坛

GMT+8, 2024-12-28 16:41 , Processed in 0.059523 second(s), 19 queries .

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表