调试ESP32 SNTP时间同步官方例程时,遇到轮询15次仍然不成功的问题,问题是偶现的,大概20%左右的概率出现。
原因:推测是服务器访问不稳定导致
解决办法:设置多个服务器,并且减少服务器轮询的时间(基于esp_idf_5.0.6,其他版本可能有细微的差异)
1、设置最大NTP服务器数量为4
设置路径 sdkconfig:Component config -> LWIP ->SNTP -> Maximum number of NTP servers
2、通过sntp_setservername设置多个服务器ip
sntp_setservername(0, "210.72.145.44"); // 国家授时中心服务器 IP 地址
sntp_setservername(1, "ntp1.aliyun.com"); //阿里云ntp1服务
sntp_setservername(2, "pool.ntp.org");
sntp_setservername(3, "1.cn.pool.ntp.org");
3、修改轮询服务器的时间,从15s改成1s
修改路径:esp_idf_5.0.6\esp-idf-v5.0.6\components\lwip\lwip\src\include\lwip\apps\sntp_opts.h lin 164
修改完成后重新编译烧录就没再复现问题了。(如果没生效,退出eclipse后重新打开编译,还不行的话直接删除项目的整个build文件夹,重新编译)