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

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

10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
跳转到指定楼层
楼主
发表于 2016-10-24 15:35:24 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
教您5分钟接入机智云,实现傻瓜式开发
本帖最后由 杀进丧尸城 于 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对比就可以执行了吧;
请同僚们给我点思路,开导开导我吧!!!




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
5#
发表于 2016-11-2 14:40:34 | 只看该作者
校园创客福利
soc模式开发,可以生成ESP的代码吗?我今天一天都是生成失败,请重试

10

主题

71

帖子

828

积分

高级会员

Rank: 4

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

你只要建立了数据点就可以再服务开发里面生成代码的啊,里面有MCU和SOC两种模式,如下图:
如果还是不行,可以问问在线服务中的人工服务:

2

主题

140

帖子

897

积分

高级会员

Rank: 4

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

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

10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
8#
 楼主| 发表于 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));






10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
10#
 楼主| 发表于 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
11#
 楼主| 发表于 2016-11-17 16:58:18 | 只看该作者
本帖最后由 杀进丧尸城 于 2016-11-17 17:00 编辑

?????????????????????????
打印出来是这样的:



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


10

主题

71

帖子

828

积分

高级会员

Rank: 4

积分
828
QQ
12#
 楼主| 发表于 2016-11-18 11:42:44 | 只看该作者
试过拆分“sntp_get_real_time(time+28800)”这个字符串了,不行,只要一操作这个函数就会使设备重启:

2

主题

10

帖子

203

积分

中级会员

Rank: 3Rank: 3

积分
203
13#
发表于 2016-12-16 17:24:47 | 只看该作者
为什么非要拆分?时间截就可以用来定时了。
而且gizwitsGetTimeStamp()之后,年月日时间其实已经出来了,只是机智云给你返回了时间截,没返回年月日时间。仔细看_tm结构体。

QQ图片20161216172402.png (15.82 KB, 下载次数: 1865)

QQ图片20161216172402.png

10

主题

71

帖子

828

积分

高级会员

Rank: 4

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

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

5

主题

28

帖子

321

积分

中级会员

Rank: 3Rank: 3

积分
321
15#
发表于 2018-7-29 08:19:36 | 只看该作者
免费使用STM32、APP自动代码生成工具
我来回个帖
因为我不想每次更新时间都和ntp同步一次,所以写了一个本地的时钟自己跑,然后通过sntp_get_real_time()获取字串,然后拆分。
拆分字串用的是 os_memcpy( )函数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

加入Q群 返回顶部

版权与免责声明 © 2006-2024 Gizwits IoT Technology Co., Ltd. ( 粤ICP备11090211号 )

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