用SNTP得到时间后,如何拆分来判断???
本帖最后由 杀进丧尸城 于 2016-11-11 16:51 编辑很多项目都会用到定时任务,所以这个还是比较重要,希望亲们一起解决一下。
我现在用的是ESP8266_12F那个模块,soc模式开发;数据点,代码都是在机智云个人项目里自动生成的
设备连接一切都没有问题,就是在代码中没有执行操作,请看下面代码:
里面都是空的,点亮一个灯很简单,直接写引脚电平就可以了。但是要设定时间,怎么执行呢,我该怎么执行命令啊!
在网上看见一个SNTP获取网络时间同步的:
ip_addr_t *addr = (ip_addr_t *)os_zalloc(sizeof(ip_addr_t));
sntp_setservername(0, "us.pool.ntp.org"); // set server 0 by domain name
sntp_setservername(1, "ntp.sjtu.edu.cn"); // set server 1 by domain name
addr->addr=210<<24 | 72<<16 | 145<<8 | 44;
sntp_setserver(2, addr); // set server 2 by IP address
sntp_init();//SNTP 初始化
sntp_get_current_timestamp();//查询当前距离基准时间(1970.01.01 00:00:00 GMT + 8)的时间戳,单位:秒
os_free(addr);
看见这里我又有疑问了,我得到这个数据后,我又能做什么呢?我收到APP执行命令后,我又该做什么呢?
应该说起来,机智云自动生成的代码里面都有获取时间戳的,我们只需要拿到addr跟valueTime对比就可以执行了吧;
请同僚们给我点思路,开导开导我吧!!!
控制类的是最好实现的,按照数据点数据控制相关的传感器或IO就可以了。
像定时任务这种,复杂度稍高一些的功能,就不能再像IO操作一样了。需要自己实现相关的逻辑处理。
拿定时任务来说,数据点操作这里只是把数据拿到,比如时间数据,循环设置数据。可以开启一个秒级或分钟级定时器(根据你的定时精度来)来检测定时时间。
在定时器执行函数里比较当前时间和设定时间,如相等,执行开机任务。
如果想实现周重复,那么就要满足周设定和时间相同两个条件时才执行开发任务。
一般不建议做太频繁的定时操作,比如明明是秒级的,定义一个毫秒的定时器,是不合适的。 再有就是这种操作跟SoC方式还是MCU方式区别并不大。 yujietian 发表于 2016-10-27 16:55
控制类的是最好实现的,按照数据点数据控制相关的传感器或IO就可以了。
像定时任务这种,复杂度稍高一些的 ...
那在自动生成的代码里面是没有自动获取时间的么,这个是不是需要自己写;我要获取到网络时间才可以跟设定的时间做判定啥 soc模式开发,可以生成ESP的代码吗?我今天一天都是生成失败,请重试 tianzuoan 发表于 2016-11-2 14:40
soc模式开发,可以生成ESP的代码吗?我今天一天都是生成失败,请重试
你只要建立了数据点就可以再服务开发里面生成代码的啊,里面有MCU和SOC两种模式,如下图:
如果还是不行,可以问问在线服务中的人工服务:
杀进丧尸城 发表于 2016-11-4 09:38
你只要建立了数据点就可以再服务开发里面生成代码的啊,里面有MCU和SOC两种模式,如下图:
如果还是不行 ...
多点击几次重试后可以了,谢谢! 问:我得到了这个时间,这个变量是一个32位的值,我怎么才能把它拆分成:星期、年、月、日、时、分、秒来进行判断啊???
我必须要拆分这个变量才可以分别与APP发来的时、分、秒等进行对比,才可以操作外设的。
保存时间的变量:
uint32 current_stamp;
current_stamp = sntp_get_current_timestamp();
os_printf("sntp: %d, %s \n",current_stamp, sntp_get_real_time(current_stamp));
本帖最后由 杀进丧尸城 于 2016-11-16 15:52 编辑
还是不对 我发现一个问题:他们这个时间是这样算的,########## time: 1479279956########## time: Wed Nov 16 15:05:56 2016
其中“1479279956“=2016-1970=(46年*365天*24小时*3600秒)+(46年/4*24*3600)+28800+365秒=1451689556
再加上2016年的11个月就是11*30*24*3600=28512000
28512000+1451689556=1480201556
1480201556-1479279956=921600秒=
921600秒/3600秒/24小时=10.6左右,相差10天左右。
说了这么多,”Wed Nov 16 15:05:56 2016“这个字符串我怎么拆分,或者说”1479279956“我怎么计算成时间;烦躁
本帖最后由 杀进丧尸城 于 2016-11-17 17:00 编辑
?????????????????????????
打印出来是这样的:
难不成我真的要把字符串转换成数组的形式在进行对比么;这样整起就悲剧了,有没有更好的方法啊
试过拆分“sntp_get_real_time(time+28800)”这个字符串了,不行,只要一操作这个函数就会使设备重启:
为什么非要拆分?时间截就可以用来定时了。
而且gizwitsGetTimeStamp()之后,年月日时间其实已经出来了,只是机智云给你返回了时间截,没返回年月日时间。仔细看_tm结构体。
混吉 发表于 2016-12-16 17:24
为什么非要拆分?时间截就可以用来定时了。
而且gizwitsGetTimeStamp()之后,年月日时间其实已经出来了,只 ...
我搞明白了,不用拆分;直接调用那个结构图里的年月日就可以了,多谢哈 我来回个帖
因为我不想每次更新时间都和ntp同步一次,所以写了一个本地的时钟自己跑,然后通过sntp_get_real_time()获取字串,然后拆分。
拆分字串用的是 os_memcpy( )函数
页:
[1]