嵌入式技术论坛
直播中

hsdou月半

8年用户 485经验值
擅长:MEMS/传感技术
私信 关注
[问答]

为什么使用AT CLIENT操作ESP8266却无法完成NTP时间同步呢

各位前辈:

这两天一直在使用ENV构建GD32的项目,其中主要是使用AT CLIENT操作ESP8266,通过AP模式与手机直接通信,通过STA模式连接到云。目前各种组件已经初始化成功,ESP8266能够正常联网,本以为可以大功时,却发现NTP无法同步。关于NTP配置的各种文档看了很多,使用都很简单,没有特殊的配置要求。但是搞了一下午没有任何进展。希望各位前辈帮忙分析。

1.jpg

如上图,组件全部加载成功,NTP已经设置为自动启动,但是超时。

1.jpg

我仔细看了ntp.c,没有发现问题,将AF_INET改为AF_AT更换最新的NTP.C版本都不能成功。

1.jpg

后来又将现有的程序简化,简化后报警依据,另外还出了新的报警。

1.jpg

AT SOCKET接收超时是否是造成NTP无法同步的真正原因。
AT+CIPDNS_CUR等等带有_CUR部分的AT指令,由于ESP8266固件问题,不支持,将_CUR部分删除,至少不打印报警信息。不清楚这部分是否有影响。

另外PING3个NTP服务器都能够正常通信,应该说通信已经建立,分析应该是AT SOCKET部分问题,但是目前水平有限,折腾多半天,没有任何进展,项目时间紧,希望高手们能多多帮助。谢谢!

回帖(5)

李燕

2022-10-9 14:38:23
抓个包看看到底是没发还是没收到呗,你这个Ping的时间也是错的吧。
举报

hsdou月半

2022-10-9 14:38:41
1.jpg
是的,跟windows的PING命令对比,确实时间不对,而且From的IP地址都是0也不对。
举报

hsdou月半

2022-10-9 14:38:53
您好,修改了目前的ESP固件,已经可以正常ping外网地址了。但是NTP还是无法同步,总是显示超时。
我查了记录,已经接收到了远程服务器回复的48个字节数据,说明AT指令发送、远程服务器回复、AT接收这些环节都是正常的。您看还有哪里没查到,问题出在哪里?谢谢!
1.jpg
但是目前NTP还是无法同步。通过截屏发现,已经获取到了回复的48个字节。
2.jpg
没有任何其它报错,但是无法进入if语句,直接进入else语句。

1.jpg
举报

李燕

2022-10-9 14:39:08
你看下 start 和 TIMEOUT 分别是多少?分析下是不是真的超时了还是判断错误。
或是参数太保守了,适当放宽裕些。
举报

hsdou月半

2022-10-9 14:39:20
问题已经彻底解决了。非常感谢!
1:除了自身问题,主要就是目前的AT8266设备驱动与最新的8266固件不兼容,当然也不确定我手里的固件是最新的,目前通过修改at_socket_esp8266.c和at_device_esp8266.c,可以兼容目前的版本。
2:不兼容造成了PING无法显示正确的时间和IP,也造成了PING baidu.com死机而其它地址不死机,还有NTP无法同步等等一系列问题。
3:将-CUR的命令修改,新版已经不支持;修改PING命令返回的解析方式,只取双引号中间的字符串;修改DOMIAN的解析方式,同PING。两个文件都要修改,否则NTP就会无法同步。通过下面的截图可以清晰的看到NTP无法同步的原因所在。
1.jpg
举报

更多回帖

发帖
×
20
完善资料,
赚取积分