前言:很早就考虑过用 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. 【XXE学习】XML外部实体注入

    一.XML外部实体注入介绍 1.1 XXE简介 XML外部实体注入(XML External Entity Injection)也就是人们(mian shi guan )常说的XXE啦,见名知意,就是 ...

  2. MATLAB—数组运算及数组化编程

    文章目录 前言 一.数组的结构和创建 1.数组及其结构 2.行数组的创建 3.对数组构造的操作 二.数组元素编址及寻访 1.数组元素的编址 2.二维数组元素的寻访 三.数组运算 非数的问题 前言 编程 ...

  3. Linux下MySQL主从复制(Binlog)的部署过程

    什么是 MySQL 的主从复制 Mysql内建的复制功能是构建大型高性能应用程序的基础, 将Mysql数据分布到多个系统上,这种分布机制是通过将Mysql某一台主机数据复制到其它主机(slaves)上 ...

  4. xml的约束

    一.DTD约束xml 1.约束介绍 由于xml的标签由用户自己定义,因此在开发的时候,每个人都可以根据自己的需求来定义xml标签,这样导致项目中的xml难以维护,因此需要使用一定的规范机制来约束xml ...

  5. GC垃圾收集器

    垃圾收集器是垃圾收集算法的具体实现,是执行垃圾收集算法的,是守护线程. HotSport虚拟机采用分代收集(JVM规范并未对堆区进行划分),将堆分为年轻代和老年代,垃圾收集器也是这样组合使用的,不过已 ...

  6. flutter实现文字超出最大宽度显示省略号

    Container( width: 60, child: Text( '...', maxLines: 1, overflow: TextOverflow.ellipsis, ), ) 给Text外层 ...

  7. C++ Opencv图像直方图

    Mat image = imread("D:/ju.jpg"); imshow("素材图", image); int bins = 256; //直条为256 ...

  8. windows编译boost

    1. https://www.boost.org 下载boost源码 boost_1_73_0.zip解压. 2.准备编译前的配置,打开vs2017 x86 CMD工具,进入目录boost_1_73_ ...

  9. mfc HackerTools监控键盘按键

    string GetKey(int Key) { string KeyString = ""; //判断符号输入 const int KeyPressMask = 0x800000 ...

  10. Javascript - Vue - webpack中的组件、路由和动画

    引入vue.js 1.cnpm i vue -S 2.在mian.js中引入vue文件 import Vue from "vue"//在main.js中使用这种方式引用vue文件时 ...