收藏官网首页
查看: 7823|回复: 14

[问答] 用SNTP得到时间后,如何拆分来判断???

10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
发表于 2016-10-24 15:35:24 | 显示全部楼层 |阅读模式
汉枫LPB120模块
本帖最后由 杀进丧尸城 于 2016-11-11 16:51 编辑

很多项目都会用到定时任务,所以这个还是比较重要,希望亲们一起解决一下。

我现在用的是esp8266_12F那个模块,soc模式开发;数据点,代码都是在机智云个人项目里自动生成的
设备连接一切都没有问题,就是在代码中没有执行操作,请看下面代码:
N`53{S{}5J_H[1LY4B34SQR.png

里面都是空的,点亮一个灯很简单,直接写引脚电平就可以了。但是要设定时间,怎么执行呢,我该怎么执行命令啊!

在网上看见一个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对比就可以执行了吧;
请同僚们给我点思路,开导开导我吧!!!




57

主题

156

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2016-10-27 16:55:14 | 显示全部楼层
控制类的是最好实现的,按照数据点数据控制相关的传感器或IO就可以了。

像定时任务这种,复杂度稍高一些的功能,就不能再像IO操作一样了。需要自己实现相关的逻辑处理。

拿定时任务来说,数据点操作这里只是把数据拿到,比如时间数据,循环设置数据。可以开启一个秒级或分钟级定时器(根据你的定时精度来)来检测定时时间。

在定时器执行函数里比较当前时间和设定时间,如相等,执行开机任务。
如果想实现周重复,那么就要满足周设定和时间相同两个条件时才执行开发任务。

一般不建议做太频繁的定时操作,比如明明是秒级的,定义一个毫秒的定时器,是不合适的。

57

主题

156

帖子

716

积分

高级会员

Rank: 4

积分
716
发表于 2016-10-27 16:56:35 | 显示全部楼层
再有就是这种操作跟SoC方式还是MCU方式区别并不大。

10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
 楼主| 发表于 2016-10-27 21:24:46 | 显示全部楼层
yujietian 发表于 2016-10-27 16:55
控制类的是最好实现的,按照数据点数据控制相关的传感器或IO就可以了。

像定时任务这种,复杂度稍高一些的 ...

那在自动生成的代码里面是没有自动获取时间的么,这个是不是需要自己写;我要获取到网络时间才可以跟设定的时间做判定啥

2

主题

140

帖子

897

积分

高级会员

Rank: 4

积分
897
发表于 2016-11-2 14:40:34 | 显示全部楼层
校园创客福利
soc模式开发,可以生成ESP的代码吗?我今天一天都是生成失败,请重试

10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
 楼主| 发表于 2016-11-4 09:38:25 | 显示全部楼层
tianzuoan 发表于 2016-11-2 14:40
soc模式开发,可以生成ESP的代码吗?我今天一天都是生成失败,请重试

你只要建立了数据点就可以再服务开发里面生成代码的啊,里面有MCU和SOC两种模式,如下图:

生成后

生成后

如果还是不行,可以问问在线服务中的人工服务:

在线服务

在线服务

2

主题

140

帖子

897

积分

高级会员

Rank: 4

积分
897
发表于 2016-11-4 11:00:39 | 显示全部楼层
杀进丧尸城 发表于 2016-11-4 09:38
你只要建立了数据点就可以再服务开发里面生成代码的啊,里面有MCU和SOC两种模式,如下图:
如果还是不行 ...

多点击几次重试后可以了,谢谢!

10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
 楼主| 发表于 2016-11-11 16:58:16 | 显示全部楼层
问:我得到了这个时间,这个变量是一个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));



J0A$@@}HNM1S$@X[`Q3@P~3.png


10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
 楼主| 发表于 2016-11-16 15:51:44 | 显示全部楼层
校园创客福利
我发现一个问题:他们这个时间是这样算的,########## 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“我怎么计算成时间;烦躁

10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
 楼主| 发表于 2016-11-17 16:58:18 | 显示全部楼层
本帖最后由 杀进丧尸城 于 2016-11-17 17:00 编辑

%MKI)1{ZQLC`EO068RC6V]3.png ?????????????????????????
5_[UFF7UG(8[JFO36AP`305.png 打印出来是这样的:
4VIU]XR77A453NS9P`S4VUB.png


难不成我真的要把字符串转换成数组的形式在进行对比么;这样整起就悲剧了,有没有更好的方法啊


10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
 楼主| 发表于 2016-11-18 11:42:44 | 显示全部楼层
试过拆分“sntp_get_real_time(time+28800)”这个字符串了,不行,只要一操作这个函数就会使设备重启: $U%JSY7BJW@SA05[4~69F~Q.png SN_RSMK~V13{$$TMWRN01)9.png

2

主题

10

帖子

203

积分

中级会员

Rank: 3Rank: 3

积分
203
发表于 2016-12-16 17:24:47 | 显示全部楼层
为什么非要拆分?时间截就可以用来定时了。
而且gizwitsGetTimeStamp()之后,年月日时间其实已经出来了,只是机智云给你返回了时间截,没返回年月日时间。仔细看_tm结构体。
QQ图片20161216172402.png

10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
 楼主| 发表于 2017-3-17 16:34:39 | 显示全部楼层
混吉 发表于 2016-12-16 17:24
为什么非要拆分?时间截就可以用来定时了。
而且gizwitsGetTimeStamp()之后,年月日时间其实已经出来了,只 ...

我搞明白了,不用拆分;直接调用那个结构图里的年月日就可以了,多谢哈

5

主题

28

帖子

321

积分

中级会员

Rank: 3Rank: 3

积分
321
发表于 2018-7-29 08:19:36 | 显示全部楼层
注册成为机智云开发者,手机加虚拟设备快速开发
我来回个帖
因为我不想每次更新时间都和ntp同步一次,所以写了一个本地的时钟自己跑,然后通过sntp_get_real_time()获取字串,然后拆分。
拆分字串用的是 os_memcpy( )函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

© 2011-2017 Gizwits ( 粤ICP备11090211号 )

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