前言:很早就考虑过用 ESP8266 获取网络时间,以前都是用 ESP8266 刷机智云的 Gagent 固件,但无奈现在手头的 ESP-01 的 Flash 只有 1M,实在无法胜任。经过在网络上的不断探索,终于找到了用AT指令获取网络事件的方法。

提醒:ESP8266默认波特率为115200. 如果配置过程中返回 ERROR 不要惊慌,可能是模块已经处于该模式下了.

开始:

1.配置 ESP8266 入网

AT+CWMODE=1                     // station模式,设置成3也行
AT+RST // 重启模块
AT+CWJAP="ssid","password" // 连接AP 等待连接成功…

2.连接授时服务器

AT+CIPMUX=0                                // 设置WiFi模块为单路链接
AT+CIPSTART="UDP","1.cn.pool.ntp.org",123 // 链接到 NTP 服务器,时间服务器默认的端口号是 123,协议为UDP.
AT+CIPSEND=48 // 发送48byte的数据

若ESP8266返回'>'则继续
注意,严格遵照以下数据且使用16进制发送,切勿发送新行

E3 0 6 EC 0 0 0 0 0 0 0 0 31 4E 31 34 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

用16进制接收数据

3.接收数据

1.执行完上面两步,此时如果顺利的话会受到一大堆16进制数据,诸如:
41 54 2B 43 49 50 53 45 4E 44 3D 34 38 0D 0D 0A 0D 0A 4F 4B 0D 0A 3E 20 0D 0A 52 65 63 76 20 34 38 20 62 79 74 65 73 0D 0A 0D 0A 53 45 4E 44 20 4F 4B 0D 0A 0D 0A 2B 49 50 44 2C 34 38 3A 24 02 06 E9 00 00 00 52 00 00 08 F2 0A 45 02 22 E0 4F 57 31 79 AF 20 82 00 00 00 00 00 00 00 00 E0 4F 59 9C 2F 4A 40 07 E0 4F 59 9C 2F 4C 22 B9
2.此时需要找到数据中的关键帧,也就是服务器返回的48位时间数据,它们通常具有以下格式:(如果找不到的话请重试2中的3、4步)
①它前面的数据为"2B 49 50 44 2C 34 38 3A"(+IPD,48:),他后面没有东西;
②它通常以 24 开头.
3.对数据提取后编号,其中[40][41][42][43]为我们需要的时间数据,在本例中为"E0 4F 5C 00".
 
 
4.处理数据
①将”E04F5C00“转为十进制为3763297280,此即为1900距今的秒数。
②把这个时间减去2208988800(70年),得到标准的Unix时间戳。[3763297280-2208988800=1554308480]
③[1554308480/31556736+1970=2019],得到当下年份。
④计算月份和日期需要考虑平年闰年和每月天数,太麻烦我也没搞懂。
⑤[(1554308480/3600)%24+8=24],得到北京时间-时(别忘了满24归零)
⑥[(1554308480/60)%60=21],得到北京时间-分
⑦[1554308480%60=20],得到北京时间-秒,既当下时间是 24:21:20
⑧将时间戳(1554308480)输入 http://tool.chinaz.com/Tools/unixtime.aspx# 与计算结果进行比较。
 
5.关闭连接
AT+CIPCLOSE
 
参考资料:
1.本教程可以使用的 NTP Server
北京市中国教育和科研计算机网骨干网
1.cn.pool.ntp.org  
2.cn.pool.ntp.org
3.cn.pool.ntp.org
0.cn.pool.ntp.org
cn.pool.ntp.org
2.百度百科——unix时间戳
unix时间戳是从1970年1月1日(UTC/GMT的午夜)开始所经过的秒数,不考虑闰秒。
3.esp8266-01 AT命令通过向NTP服务器获取网络时间 "串口法”

https://www.geek-workshop.com/thread-27367-1-1.html
(出处: 极客工坊)

 
 
 
 
 

ESP8266- 使用AT指令获取网络时间的更多相关文章

  1. python获取网络时间和本地时间

    今天我们来看一下如何用python获取网络时间和本地时间,直接上代码吧,代码中都有注释. python获取网络时间 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 ...

  2. Lua获取网络时间

    作者:ani_di  版权所有,转载务必保留此链接 http://blog.csdn.net/ani_di Lua获取网络时间 网络授时服务是一些网络上的时间服务器提供的时间,一般用于本地时钟同步. ...

  3. QT+VS2013 * 获取网络时间

    使用qt函数获取网络时间 现在Qt Project Setting中的Qt Modules勾选NetWork,再导入头文件我也忘了叫什么了 QStringList net_time; QTcpSock ...

  4. Unity通过NTP获取网络时间

    最初通过qq时间服务器获得时间,经常出现有网络也获取失败的情况. 后面寻找解决办法,查找资料终于发现通过ntp时间服务器获取网络时间的方法.   首先游戏开始获得初始化网络时间,通常只获取一次,其他时 ...

  5. iOS获取网络时间与转换格式

      [NSDate date]可以获取系统时间,但是会造成一个问题,用户可以自己修改手机系统时间,所以有时候需要用网络时间而不用系统时间.获取网络标准时间的方法: 1.先在需要的地方实现下面的代码,创 ...

  6. Android获取网络时间的方法

    一.通过免费或者收费的API接口获取 1.免费 QQ:http://cgi.im.qq.com/cgi-bin/cgi_svrtime 淘宝:http://api.m.taobao.com/rest/ ...

  7. c#获取网络时间并同步本地时间

    通过TCP形式来获取NTP时间.主要代码如下: [DllImport("kernel32.dll")] private static extern bool SetLocalTim ...

  8. vc 获取网络时间

    方式1 : #include <WinSock2.h> #include <Windows.h> #pragma comment(lib, "WS2_32" ...

  9. java 通过网络 ntp 获取网络时间

    需要 commons-net-3.4.jar 库. import org.apache.commons.net.ntp.NTPUDPClient; import org.apache.commons. ...

随机推荐

  1. Kerberos认证流程简述

    摸鱼了很长一段时间,被大佬按在地上摩擦,一时间精神恍惚想不起来写点啥,正好回来碰巧给别人讲kerberos协议认证流程,结果讲来讲去把自己讲晕了,就非常尴尬 于是有了这篇文章(友情提示:无事莫装X,装 ...

  2. Jetpack Compose学习(2)——文本(Text)的使用

    原文: Jetpack Compose学习(2)--文本(Text)的使用 | Stars-One的杂货小窝 对于开发来说,文字最为基础的组件,我们先从这两个使用开始吧 本篇涉及到Kotlin和DSL ...

  3. [1.6W字]浏览器跨域请求的原理, 以及解决方法(可以纯前端实现) #flight.Archives011

    Title/ 浏览器跨域(CrossOrigin)请求的原理, 以及解决方案详细指南 #flight.Archives011 序: 最近看到又有一波新的创作活动了, 官方给出的话题中有一个" ...

  4. python中的logging日志

    logging使用 import logging import os from logging import handlers from constants.constants import Cons ...

  5. 【spring 注解驱动开发】Spring AOP原理

    尚学堂spring 注解驱动开发学习笔记之 - AOP原理 AOP原理: 1.AOP原理-AOP功能实现 2.AOP原理-@EnableAspectJAutoProxy 3.AOP原理-Annotat ...

  6. (int)a、&a、(int)&a、(int&)a的区别,很偏僻的题

    (int)a.&a.(int)&a.(int&)a的区别,很偏僻的题 #include <iostream> #include <stdio.h> #i ...

  7. Servlet学习之复习

    Servlet的注册与运行(Servlet程序通常需要存储在<web应用程序目录>\WEB-INF\classes\目录中) 1.注册Servlet:在web.xml文件中,一个<s ...

  8. Python的GPU编程实例——近邻表计算

    技术背景 GPU加速是现代工业各种场景中非常常用的一种技术,这得益于GPU计算的高度并行化.在Python中存在有多种GPU并行优化的解决方案,包括之前的博客中提到的cupy.pycuda和numba ...

  9. 利用Python快速绘制海报级别地图

    1 简介 基于Python中诸如matplotlib等功能丰富.自由度极高的绘图库,我们可以完成各种极富艺术感的可视化作品,关于这一点我在系列文章在模仿中精进数据可视化中已经带大家学习过很多案例了. ...

  10. 类的基础语法阅读【Python3.8官网文档】

    英文官方文档: https://docs.python.org/3.8/tutorial/classes.html 中文官方文档: https://docs.python.org/zh-cn/3.8/ ...