4469|4

2

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

如何修改ESP8266的日期时间 [复制链接]

请那位玩ESP8266的朋友,如何在没有网络的情况下修改它的日期时间,由于ESP8266在有网时SNTP是自动校准,当没有网时它的时间是1970.1.1  8:0:0,所以我想用手机的日期时间发送给ESP8266来修改它的日期时间,但不知道如何修改,请各位好友帮忙。
此帖出自stm32/stm8论坛

最新回复

在8266里面要实现时间校准什么或者用app什么修改时间,需要自己实现很多函数功能,我上面那个就是把esp8266接受到年月日分秒换算为格林威治时间秒数,你再把这个秒的变量放到一个1s的定时器或者rtc中计数,你还需要设计一个将格林威治时间秒数换算为年月日时分秒的函数,这样也方便你把要上报的数据+时间组包成JSON格式上报云端或者app  详情 回复 发表于 2017-8-17 16:53
点赞 关注
 

回复
举报

3

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
你好,请问问题解决了吗?
此帖出自stm32/stm8论坛
 
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

板凳
 
首先你都没网,用手机app发送给ESP8266?走的是局域网?你定义一个时间格式发送过去,再调用相应的时间函数扔到RTC里面呗或者用定时器也行。

/*******************************************************************
*  函数功能:将当前时间(如:2015-11-9 09:49:25)转换为格林威治时间  格林威治时间:从1970年1月1日开始到现在的秒数
*  输入参数:curData 当前时间
*  输出结果:格林威治时间(单位:秒)
*/  
uint32 ICACHE_FLASH_ATTR TimerSwitch( htlj_rtc_time_t curData )  
{  
       unsigned short curyear;         // 当前年份 16位  
       int cyear = 0;                  // 当前年和1970年的差值  
       int cday = 0;                   // 差值年转变为天数  
       int curmonthday = 0;            // 当前月份转变为天数  
   
       //当前年份  
       curyear= curData.year+2000;  
       //无效年份判断  
       if(curyear < 1970 || curyear > 9000 )  
              return 0;  
       //计算差值并计算出当前年份差值对应的天数  
       cyear= curyear - 1970;  
       cday= cyear/4*(365*3+366);  
       //计算平年和闰年 对应的相应差值年的天数 1970-平 1971-平 1972-闰 1973-平  
       if(cyear%4 >= 3 )  
              cday += (cyear%4-1)*365 + 366;  
       else  
              cday += (cyear%4)*365;  
   
       //当前月份对应的天数  当月的天数不算  
       switch(curData.month )  
       {  
              case 2:  curmonthday = 31;  break;  
              case 3:  curmonthday = 59;  break;  
              case 4:  curmonthday = 90;  break;  
              case 5:  curmonthday = 120; break;  
              case 6:  curmonthday = 151; break;  
              case 7:  curmonthday = 181; break;  
              case 8:  curmonthday = 212; break;  
              case 9:  curmonthday = 243; break;  
              case 10: curmonthday = 273; break;  
              case 11: curmonthday = 304; break;  
              case 12: curmonthday = 334; break;  
              default: curmonthday = 0;   break;  
       }  
       //平年和闰年月份对应天数 闰年天数+1  
       if((curyear%4 == 0) && (curData.month >= 3) )  
              curmonthday+= 1;  
       //总天数加上月份对应的天数 加上当前天数-1 当天的时间不算  
       cday += curmonthday;  
       cday += (curData.date-1);     
       //返回格林威治时间秒数  
       return(uint32)(((cday*24+curData.hr)*60+curData.min)*60+curData.sec);   
}  
此帖出自stm32/stm8论坛
 
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 

回复

3238

帖子

5

TA的资源

五彩晶圆(中级)

4
 
在8266里面要实现时间校准什么或者用app什么修改时间,需要自己实现很多函数功能,我上面那个就是把esp8266接受到年月日分秒换算为格林威治时间秒数,你再把这个秒的变量放到一个1s的定时器或者rtc中计数,你还需要设计一个将格林威治时间秒数换算为年月日时分秒的函数,这样也方便你把要上报的数据+时间组包成JSON格式上报云端或者app
此帖出自stm32/stm8论坛
 
个人签名淘宝:https://viiot.taobao.com/Q群243090717
多年专业物联网行业经验,个人承接各类物联网外包项目
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

5
 
你好,发送给ESP8266的日期时间是读取手机系统当前日期时间并转换后发送的,格式为:(年+月+日+时*60+分)=总数为字符串(如:2017+8+20+8*60+8)=2533现在就是不知道怎样把这个字符串转换给ESP8266使用,请您给我实例支持,感谢您回复。
此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表