演示视频
本文档适合大彩物联型所有带wifi的串口屏产品。
1.visualtft软件版本:v3.0.0.1176及以上的版本。
版本查看:
a) 打开visualtft软件启动页面如图21软件版本,右上角会显示的软件版本号;
图2-1软件版本
b) 打开visualtft,在软件右下角可以查看软件版本图22软件版本,
最新版本可登录http://www.gz-dc.com/进行下载。
图2-2软件版本
2. 串口屏硬件版本:v3.0.911.0 及以上的版本。
版本查看:
a) 查看屏幕背面版本号贴纸;
b) visualtft与屏幕联机成功后,右下角显示的版本号。
我司物联型串口屏引入了物联网的概念,可以通过wifi 远程更新串口屏工程和固件,本文主要介绍带wifi功能的物联型串口屏用于http协议远程升级工程、固件的教程。
物联型串口屏wifi模块使用的是台湾瑞昱realtek rtl8188eus芯片,该芯片的特点:
1. 超低功耗,高线性输出功率,150m usb 接口无线网卡模块;
2. 符合ieee802.11n标准,兼容ieee802.11g、ieee802.11b标准,提供usb2.0接口;
3. 支持最新的64/128位wep数据加密;支持wpa-psk/wpa2-psk,wpa/wpa2 安全机制;
wifi模块与服务器之间通讯采用tcp/ip协议,物联型串口屏还支持使用基于tcp/ip通信协议传递数据的ftp协议、http协议。
使用http 远程升级需要注意以下5点:
1. 固件版本需要是3.0.911.0以上(包括3.0.911.0版本);
2. 工程属性配置时,必须给c区分配空间,而且需要比升级文件大,比如升级文件7m,c区分配空间至少8m以上,如图3-1所示;
3. http 下载路径必须是"c:/dciot.pkg",否则下载成功后无法升级工程;
4. 升级文件必须小于35m否则下载的时候会导致屏幕重启;
5. 远程升级画面尽量简洁,不可以播放视频,音频等占内存的应用。
图3-1 分配空间
本章节主要讲述通过lua实现http远程升级串口屏的工程或者固件。本文将分为以下是4个阶段讲述教程demo是如何实现的:
1. 工程准备;
2. 工程配置与功能;
3. lua编写及调试;
在实现教程demo前需要作以下三个准备:
1. 硬件平台;
2. ui素材;
3. lua编辑器。
4.1.1 硬件平台
该例程使用大彩物联型7寸dc80480w070为验证开发平台。如图4-1所示。
图4-1 物联型7寸
4.1.2 素材准备
准备好相应的美工ui。如图4-2所示。
图4-2 素材准备
4.1.3 lua编辑器
上位机visualtft内部已集成了lua开发编译环境,点击菜单栏工具,选择lua编辑器,如图4-3所示。
图4-3 打开lua编辑器
lua编辑器的开发环境,如图4-4所示。
图4-4 lua编辑器界面
大彩科技针对lua脚本提供了丰富的api接口函数,具体函数可以查阅文档《lua脚本api v1.5》,如图4-5所示。
图4-5 api函数文档
本教程文档中所涉及到的部分的相关接口函数
1. 函数on_control_notify(screen,control,value)
注释:此函数可以在用户触摸修改控件后被回调。函数有三个参数:
注释:此函数可以在定时器超时后被回调。函数有一个参数:
3. 函数start_timer(timer_id, timeout, countdown, repeat)
注释:此函数可以启动定时器。函数有四个参数:
4. 函数stop_timer(timer_id),timer_id表示定时器id。
5. 函数set_value(screen,control,value)
注释:此函数可以设置控件数值。函数有三个参数:
6. 函数scan_ap()
注释:扫描无线热点,返回热点数目ap_count = scan_ap()
7. 函数http_download (taskid,uri,savepath)
注释:下载文件
8. 函数on_http_download (taskid, status)
注释:下载响应
注:更多api函数请参考文档《物联型lua脚本api_v1.0》和网站:www.runoob.com/lua
在我司提供参考资料中有关于串口屏http协议远程升级工程的示例工程,为了方便理解文档所提到的参数设置,在阅读文档的同时可以查看工程配置协助理解文档内容。实现wifi远程升级串口屏需要完成以下四个步骤:
1. 搭建云端服务器;(如果已有云端服务器可以跳过该步骤)
2. 配置串口屏网络参数;
3. http下载文件到c盘;
4. 控制屏幕复位,解压升级文件。
4.3.1 搭建云端服务器
服务器,也称伺服器,是提供计算服务的设备。服务器的构成包括处理器、硬盘、内存、系统总线等,和通用的计算机架构类似,但是由于需要提供高可靠的服务,因此在处理能力、稳定性、可靠性、安全性、可扩展性、可管理性等方面要求较高。
搭建服务器这一步比较复杂,如果没有服务器建议寻找专业的开发服务器团队进行开发,以节省开发项目的时间。另外,一般网页上的网站也支持http协议,开发者可以考虑将升级文件上传到自己公司米乐网页官网上,生成http下载链接。
4.3.2 配置串口屏网络参数
此步骤为配置串口屏默认的网络参数,工程中配置串口屏网络参数;
1. 双击图4-6中【工程窗口】中的工程名字,右边的【属性窗口】会显示该工程的属性;
图4-6 工程属性
2. 找到属性窗口中的【网络设置】和【高级设置】,如图4-7和图4-8所示;
注:此步骤请参考《大彩串口屏wifi使用教程_v1.1》,本文不再重复介绍。
图4-7 工程属性
图4-8 高级设置
4.3.3 扫描/选取wifi
建议将我司的示例工程的中wifi设置、扫描wifi和网络配置这三个画面直接移植作为固定模板使用,只修改图片风格不改变控件编号顺序,如果画面id改变,需要将lua脚本对应的画面id更改。示例工程wifi设置画面如图4-9所示;
图4-9 wifi设置画面
控件编号4,5设置为弹出键盘输入的文本框控件,可以手动输入wifi的账号密码,点击“连接设备”后调用lua的api函数get_text()获取wifi名称和wifi密码对应的文本框中内容再调用lua脚本中的set_wifi_cfg()函数修改默认连接的wifi设备,工程中lua脚本程序:
程序清单 1
--按下按钮会调用该函数,并把画面id和控件id,以及控件值传参进该函数 function on_control_notify(screen,control,value) …… if screen==1 and control==8 and value == 1 --按钮连接设备按下 then ssid = get_text(1,4) --获取文本框内容 psw = get_text(1,5) set_wifi_cfg(1,0,ssid,psw) --连接wifi,1网卡模式,0自动识别加密 save_network_cfg(); --保存设置 set_text(1,1,'连接中...') end …… end
点击“选取网络”,切换到扫描wifi的画面中,如图4-10所示;点击“扫描wifi”后调用lua脚本的api函数scan_ap()和get_ap_info()扫描可用的wifi设备,并将扫描出来的wifi名称显示在列表中,脚本程序如下:
图4-10 扫描wifi
程序清单 2
--扫描wifi与显示 function scan_ap_fill_list( ) ap_cnt = scan_ap() --扫描可用热点 for i=1,ap_cnt do ssid,security,quality = get_ap_info(i-1) --获取信息 set_text(2,i,ssid) --在列表中显示id end for i=ap_cnt,10 do set_text(2,i,"") --清空后面的 end end --控制控件 function on_control_notify(screen,control,value) --点击扫描热点 if screen==1 and control==7 or screen==2 and control==21 then scan_ap_fill_list() end …… end
扫描出所有的wifi设备名称后,选中其中一个设备名字后,返回到wifi配置画面中时,会自动填写选中的wifi设备的名称,输入wifi密码后点击 “连接设备”接入该wifi设备中。lua程序如下:
程序清单 3
--选取热点 function on_control_notify(screen,control,value) …… if screen==2 and control>=11 and control<=20 and value == 1 then ssid = get_text(2,(control-10)) --文本控件从1~10 set_text(1,4,ssid) --显示选中的ssid名称 end …… end
4.3.4 远程更新
调用lua 脚本下载pkg包,api函数参考上文4.2说明,工程画面配置如所示;
图4-11 画面配置
程序逻辑:点击远程更新按钮,调用http_download()函数将文件下载到c区,下载完成后触发回调函数on_http_download(),在回调函数中判断文件下载是否成功,成功后调用os.exit()复位串口屏
程序清单 4
function on_control_notify(screen,control,value) …… if screen==4 and control==1 --远程升级 then http_download(1,'http://video.gz-dc.com/dciot.pkg',c_dir) end ……. end function on_http_download (taskid, status) if taskid == 1 then if status == 0 then --下载失败 set_value(4,3,2) elseif status == 1 then --下载成功,存储失败 set_value(4,3,3) elseif status == 2 then --下载成功,存储成功 set_value(4,3,4) os.exit() --重启 end end end