赞
踩
ESP32连接到WiFi并获得Internet访问权限,可以通过向NTP服务器发送请求来获取当前时间。ESP32可以使用内置的NTP客户端库或第三方库来实现此功能。一旦获取了时间信息,ESP32可以使用其内置的Real-Time Clock(RTC)模块或外部RTC芯片来跟踪时间。
ESP32通过连接WiFi后得到当前时间,并且转换为unix时间戳类型,目的是使用mqtt时可以将发送信息时间上传等。
此代码需要包含以下库:WiFi、HTTPClient和time。
在开始使用代码之前,请确保已将WiFi的SSID和密码替换为您自己的网络。
#include <WiFi.h> #include <HTTPClient.h> #include <time.h> const char* ssid = "esp32"; const char* password = "guanzhuyixia!"; const char* ntpServer = "pool.ntp.org"; const long utcOffsetInSeconds = 28800; // Beijing: UTC +8 -- 获取东八区时间(默认以英国格林威治天文台所在地的本初子午线为基准线的) void setup() { Serial.begin(115200); while (!Serial); //连接wifi WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); //获取时间 configTime(utcOffsetInSeconds, 0, ntpServer); while (!time(nullptr)) { delay(1000); Serial.println("Waiting for time sync..."); } Serial.println("Time synced successfully"); } void loop() { time_t now = time(nullptr); Serial.print("Current time is: "); Serial.println(ctime(&now)); //打印时间 // Convert current time to Unix timestamp long unixTimestamp = static_cast<long>(now); //获取unix时间戳 Serial.print("Unix timestamp is: "); Serial.println(unixTimestamp); delay(1000); }
此示例中,我们使用static_cast将time_t类型的当前时间转换为long类型的Unix时间戳。然后,我们将Unix时间戳打印到串行监视器中。
在Unix操作系统中,时间戳表示从1970年1月1日00:00:00 UTC(协调世界时)开始经过的秒数。因此,将当前时间转换为时间戳可以帮助我们进行日期和时间计算。
在ESP32的Arduino环境中,time_t数据类型是一个整数,表示自1970年1月1日00:00:00 UTC以来经过的秒数。但是,由于long比time_t更具通用性,因此在转换时使用了static_cast将time_t强制转换为long。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。