Arduino ESP32 获取网络时间并同步本地RTC时钟


  • 相关篇《Arduino ESP32 最简单直接获取网络时间方法》

在 ArduinoESP32核心支持库当中已经包含相关的获取时间的库,获取网络时间后,就可以不依赖网络,重复去获取时间,如果长时间运行,可以设置间隔时间同步NTP时间,只要访问本地时间的相关函数能正常调用,就没有问题。

使用读取本地时间,好处就是不需要频繁去获取NTP时间,占用网络资源,最大节省资源,适合低功耗下运行,保证时间运行准确。只要开机运行获取一次网络时间后,就可以关闭网络,后面读取本地时间,可以最大限度的不依赖网络来获取时间。

  • 调试了一天,掉坑里去了,在访问本地时间的时候,有些看似不重要的细节,往往很容易掉到坑里去。

最容易掉坑的地方!

在获取本地时间的时候,一定要先判断一下getLocalTime()布尔类型函数的返回值:

struct tm timeInfo; //声明一个结构体if (!getLocalTime(&timeInfo)){ //一定要加这个条件判断,否则内存溢出Serial.println("Failed to obtain time");return;}

这一点不像ESP8266库那样,只要申请了时间结构体的变量,就随便可以直接调用本地时间。

  • 如果想将访问到的本地时间,来作为OLED显示输出的话,读取本地时间特别要注意,很容易造成内存溢出,导致系统重启,所以操作相关的时间函数时,特别要小心。
  • 如果只是作为串口打印输出的话,可以参考《Arduino ESP32 最简单直接获取网络时间方法》,就可以,格式化打印时间和操作数据还是有差别的。拿到本地String类型的时间数据,你可以用这个数据用到其他地方。

调试了一天最终无bug的程序!(不容易啊!)

#include <Arduino.h>
#include <WiFi.h>#define NTP1 "ntp1.aliyun.com"
#define NTP2 "ntp2.aliyun.com"
#define NTP3 "ntp3.aliyun.com"
//填写WIFI入网信息
const char *ssid = "MERCURY_D268G";                                                                                // WIFI账户
const char *password = "pba5ayzk";                                                                                 // WIFI密码
const String WDAY_NAMES[] = {"星期天", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"};                //星期
const String MONTH_NAMES[] = {"Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"}; //月份//time_t now; //实例化时间
void setClock()
{struct tm timeInfo; //声明一个结构体if (!getLocalTime(&timeInfo)){ //一定要加这个条件判断,否则内存溢出Serial.println("Failed to obtain time");return;}//Serial.print(asctime(&timeInfo)); //默认打印格式:Mon Oct 25 11:13:29 2021String date = WDAY_NAMES[timeInfo.tm_wday];Serial.println(date.c_str());// sprintf_P(buff1, PSTR("%04d-%02d-%02d %s"), timeInfo.tm_year + 1900, timeInfo.tm_mon + 1, timeInfo.tm_mday, WDAY_NAMES[timeInfo.tm_wday].c_str());String shuju = String(timeInfo.tm_year + 1900); //年shuju += "-";shuju += timeInfo.tm_mon + 1; //月shuju += "-";shuju += timeInfo.tm_mday; //日shuju += " ";shuju += timeInfo.tm_hour; //时shuju += ":";shuju += timeInfo.tm_min;shuju += ":";shuju += timeInfo.tm_sec;shuju += " ";shuju += WDAY_NAMES[timeInfo.tm_wday].c_str(); //星期Serial.println(shuju.c_str());
}void setup()
{Serial.begin(115200);Serial.println();//设置ESP32工作模式为无线终端模式WiFi.mode(WIFI_STA);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}Serial.println("WiFi connected!");configTime(8 * 3600, 0, NTP1, NTP2, NTP3);
}void loop()
{Serial.println("Waiting 10s before the next round...");delay(10000);setClock();// printLocalTime();
}
  • 串口打印输出

Arduino ESP32 获取网络时间并同步本地RTC时钟相关推荐

  1. esp32获取网络时间和天气

    @[esp32获取网络时间和天气] esp32获取网络时间和天气 目录 一.库的获取 二.esp32连接wifi 三.oled显示 四.汉字或图片取模放在oled中显示 五.esp32获取网络时间 六 ...

  2. 获取网络时间并刷新本地时间(源码2)

    因为上次那个获取网络时间失效了(使用的是37端口),获取网络时间并刷新本地时间(源码1) 所以网上又找了一份代码,使用的是123端口,虽然没有测试成功,这里也做下记录,估计是本机环境问题,过两天再进行 ...

  3. Arduino ESP32 获取网络数据(HTTP POST方式)

    Arduino ESP32 获取网络数据(HTTP POST方式) 相关篇<Arduino ESP32 获取网络数据(HTTP GET方式)> <Arduino ESP32 获取网络 ...

  4. Arduino ESP32 获取网络数据(HTTP GET方式)

    Arduino ESP32 获取网络数据(HTTP GET方式) 相关篇<Arduino ESP32 获取网络数据(HTTP POST方式)> <Arduino ESP32 获取网络 ...

  5. Arduino ESP32 通过getString方法获取网络时间和气象数据

    Arduino ESP32-通过getString方法获取网络时间和气象数据 国家气象数据API接口:http://www.weather.com.cn/data/sk/101010100.html ...

  6. python获取网络时间_python获取网络时间和本地时间

    今天我们来看一下如何用python获取网络时间和本地时间,直接上代码吧,代码中都有注释. python获取网络时间获取网络时间 def getBeijinTime(): ""&qu ...

  7. ESP32通过WIFI获取网络时间

    title: ESP32通过WIFI获取网络时间 一.这里首先要知道esp32的wifi如何连接,才能获取到网络服务器的时间 不知道wifi怎么连接的这里有相关链接--esp32wifi连接网络 二. ...

  8. Unity判断PC本地的网络连接状态、获取网络时间

    Unity判断PC本地的网络连接状态 [DllImport("winInet.dll")]//引用外部库 private static extern bool InternetGe ...

  9. ESP32-C3 ESP-IDF 配置smartconfig 和 sntp 获取网络时间

    ESP32-C3 ESP-IDF 配置smartconfig 和 sntp 获取网络时间 /* Esptouch exampleThis example code is in the Public D ...

最新文章

  1. 人机猜拳(这是最近的一个总结)
  2. 宁波海关连续查获走私白糖1700余吨
  3. java ast 添加注解_基于AST的组件化自动插桩方案
  4. idea console中文乱码_Python3的字符编码乱码问题解决思路
  5. CSS3常用动画总结
  6. 计组-CISC和RISC的基本概念
  7. th:text=“${user?.name}“ ${?.}
  8. uvm_reg_defines——寄存器模型(四)
  9. 腾讯内部转岗_腾讯微博即将关停,网友:竟然还活着?
  10. 很多大企业都在用的Pentaho 商业分析软件中存在多个严重缺陷
  11. 数学与编程——概率论与数理统计
  12. 用网络访问控制(NAC)解决网络安全问题
  13. find 命令查找-o参数的理解
  14. WIN7旗舰版下安装Vs2015
  15. 用于爬取知乎某个话题下的精华问题中所有回答的爬虫
  16. 張學友 - Private Corner 新专辑1.29
  17. UEFI edk2>edksetup.bat --nt32,build,无法解析的符号解决办法
  18. 勘误《新概念》III
  19. 软件一般是用什么语言开发的
  20. MybatisPlus:使用SQL保留字(关键字)

热门文章

  1. Web API接口开发和测试
  2. Banana Pi BPI-R2 Pro 开源路由器采用瑞芯微Rockchip RK3568芯片方案设计
  3. 错误码400原因总结
  4. 增加购物车商品数量【项目 商城】
  5. Java反射原理和实际用法
  6. Linux生产环境运行flask
  7. pythontkinter键盘_Python笔记之Tkinter(Key键盘事件)
  8. 批量抓取微信朋友圈 Java_微信朋友圈转疯了(golang写小爬虫抓取朋友圈文章)...
  9. 卓有成效的管理者|木深读书笔记
  10. LLaMA模型文件 (搬运工)