赞
踩
有很多方法可以架设HTTP文件服务器,我这里选最简单的方法:用现成的软件建立局域网服务器。软件也很多,我用的是 Http File Server2.4 Build 301 汉化绿色版绿色中文版
一.打开软件
二.把OTA专用的img文件w800_ota.img所在目录 《./bin/w800》 拉拽到软件的“Virtual File System”窗口:
三.查看本机IP,在浏览器输入 http:192.168.110.25/w800 (IP地址替换成自己的),能看到下面几个文件,说明架设服务器成功。
W801的SDK已经有基于http协议的OTA(空中升级)功能,且已经支持控制台命令测试。只要配置了《wm_demo.h》的相关宏定义就可以了。
#define DEMO_ON 1
#define DEMO_OFF 0
//demo console
#define DEMO_CONSOLE DEMO_ON
......
//connect demo
#define DEMO_CONNECT_NET (DEMO_ON && DEMO_CONSOLE)
......
//http demo
#define DEMO_HTTP (DEMO_ON && DEMO_CONSOLE)
......
OTA的前提是能联网,所以联网的命令也要开放。配置好DEMO_CONNECT_NET和DEMO_HTTP,编译,下载,运行:
出现上面红框中的命令就说明配置成功了。
先t-connect(“ssid”,“pwd”)配网,配网成功后进入下一步。
输入控制台指令:
t-httpfwup(http:192.168.110.25/w800/w800_ota.img)
调试口打印信息,更新完毕后自动重启(第12行开始是重启后的信息):
Location: http://192.168.110.25/w800/w800_ota.img content_length: 610648 download 1460 / 610648 download 2920 / 610648 download 4380 / 610648 download 5840 / 610648 ....... download 606788 / 610648 download 608835 / 610648 download 610280 / 610648 user taskV02 uart2 demo param=9600, 0, 0 Sequence Command Description ------------------------------------------------------------------------------------ 1 t-connect Test connecting ap;t-connect("ssid","pwd"); For open ap, pwd should be empty 2 t-oneshot Test Oneshot configuration 3 t-webcfg Test web server configuration 4 t-uart Test uart tx/rx; For example t-uart=(9600,0,0),baudrate 9600 ,parity none and 1 stop bit 5 t-httpfwup Test firmware update via HTTP, like this t-httpfwup=(http://192.168.1.100:8080/WM_W600_SEC.img) 6 t-httpget Test HTTP get method, like this t-httpget 7 t-httppost Test HTTP post method, like this t-httppost=(user=winnermicro) 8 t-httpput Test HTTP put method, like this t-httpput=(user=winnermicro) 9 t-mqtt Test mqtt 10 demohelp Display Help information ------------------------------------------------------------------------------------
这个更新速度比串口下载要快速和稳定。使用串口软件 《Upgrade_Tools_V1.4.8.exe》 下载过程中,如果切换到其他软件,很容易导致下载失败;所以我每次用串口下载,都是小心翼翼看着进度条(很无奈)。
在开发板上面增加一个按键,检测按键来触发OTA,以取代串口下载。以海凌科的《HLK-W801-kit-V1.0》开发板为例:
板上面有个 boot 按键,连接到 PA0,用它来触发OTA:
#define BOOT0_SCAN_TASK_PRIO (STACT_DETECT_TASK_PRIO + 1) #define IO_IN_BOOT0 WM_IO_PA_00 #define BOOT0_SCAN_TASK_STACK_SIZE 256 static OS_STK boot0ScanKey_task_stk[BOOT0_SCAN_TASK_STACK_SIZE]; void boot0ScanKey(void) { // 海凌科的《HLK-W801-kit-V1.0》开发板上,PA0有按键,使用这个按键来触发程序更新 int oldStat,newStat,cnt; tls_gpio_cfg(IO_IN_BOOT0, WM_GPIO_DIR_INPUT, WM_GPIO_ATTR_PULLHIGH); oldStat = newStat = cnt =0; while(1){ if(tls_gpio_read(IO_IN_BOOT0)){ cnt = 0; newStat = 0; }else{ cnt++; if(cnt > 9){ // 按键消抖 newStat = 1; } } if((oldStat == 1)&&(newStat == 0)){ // 松开按键时,触发OTA printf("boot0 key down\n"); vTaskDelay( 10 ); t_http_fwup("http://192.168.110.25/w800/w800_ota.img"); } oldStat = newStat; vTaskDelay( 10 ); } } void boot0ScanKeyDemo(void) { tls_os_task_create(NULL, NULL, boot0ScanKey, NULL, (void *)boot0ScanKey_task_stk, /* task's stack start address */ BOOT0_SCAN_TASK_STACK_SIZE * sizeof(u32), /* task's stack size, unit:byte */ BOOT0_SCAN_TASK_PRIO, NULL); }
在产品化的系统中使用OTA,必须有公网IP的http服务器。现在有很多云平台提供oss对象存储,新用户有1-3个月的免费试用期。下面以阿里云的oss对象存储为例说明。
我因为之前开通过,不是新用户,这次只能购买(5元,半年,40GB):
使用非常方便,参考官方文档《对象存储 OSS->快速入门->控制台快速入门》,上传好文件之后,是这样:
去到我们需要的文件:
查看文件的详情,获取url:
把这个URL放到我们的程序中去,就可以在产品中实现OTA。产品OTA升级也需要触发机制,可以是按键,遥控器,MQTT命令。
写到这里以为可以收工了,一看题目,还有ntp的内容。真辛苦。
在 《wm_demo.h》 中修改下面的宏定义,就可以通过控制台测试ntp。前提是已经配网成功。
//ntp demo
#define DEMO_NTP (DEMO_ON && DEMO_CONSOLE)
实际应用中,一般系统没有电池RTC,所以每次开机联网成功时,需要获取网络时间。如果设备长期不断电,可能每天要更新一次网络时间,消除W801自身RTC的误差。
使用ntp代码:
unsigned int t; //used to save time relative to 1970
struct tm *tblock;
t = tls_ntp_client();
printf("now Time : %s\n", ctime((const time_t *)&t));
tblock = localtime((const time_t *)&t); //switch to local time
//printf(" sec=%d,min=%d,hour=%d,mon=%d,year=%d\n",tblock->tm_sec,tblock->tm_min,tblock->tm_hour,tblock->tm_mon,tblock->tm_year);
tls_set_rtc(tblock);
需要的头文件:
#include "wm_rtc.h"
#include "wm_ntp.h"
然后在需要的地方通过下面的代码获取时间:
struct tm tblock;
tls_get_rtc(&tblock);
//printf("hh:mm:ss %02d:%02d:%02d\r\n",tblock.tm_hour,tblock.tm_min,tblock.tm_sec);
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。