乐鑫技术交流
直播中

李泽明

7年用户 1213经验值
私信 关注
[问答]

esp32获取时间戳的相关函数是哪个?

esp32 获取时间戳的相关函数是哪个,我用了sntp_get_current_timestamp这个函数,编译的时候说找不到,有没有相关的例程参考?

回帖(2)

杨斌

2024-6-11 10:11:35
 可以使用:

uint32_t esp_log_timestamp(void) 在日志输出中获取一个时间戳,以毫秒为单位。
char *esp_log_system_timestamp(void) 在日志输出中获取一个系统时间戳,以“HH:MM:SS.sss”格式表示。
举报

芒果冰

2024-6-11 16:59:56
ESP32 获取时间戳的相关函数是 `sntp_get_time`,而不是 `sntp_get_current_timestamp`。首先,确保你已经正确地初始化了 SNTP 库。以下是一个简单的示例,演示如何在 ESP32 上使用 SNTP 获取当前时间戳:

1. 首先,在 `CMakeLists.txt` 或 `platformio.ini` 文件中添加 SNTP 库:

   ```
   # CMakeLists.txt
   set(COMPONENT_REQUIRES esp32)
   set(COMPONENT_PRIV_REQUIRES lwip)
   set(COMPONENT_SRCDIRS .)
   set(COMPONENT_ADD_INCLUDEDIRS include)

   # platformio.ini
   lib_deps =
      ArduinoJson
      SNTP
   ```

2. 接下来,在代码中初始化 SNTP 并获取当前时间戳:

```cpp
#include
#include
#include

const char *ssid = "your_SSID";
const char *password = "your_PASSWORD";

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  // 等待 WiFi 连接
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.println("Connecting to WiFi...");
  }

  Serial.println("Connected to WiFi");

  // 初始化 SNTP
  sntp_setoperatingmode(SNTP_OPMODE_POLL);
  sntp_setservername(0, "pool.ntp.org");
  sntp_init();

  // 获取当前时间戳
  time_t now = 0;
  struct tm timeinfo = { 0 };
  while (now < 86409200) { // 86409200 代表 1997 年 1 月 1 日的时间戳
    Serial.println(".");
    delay(500);
    time_t now = sntp_get_current_timestamp();
  }

  // 将时间戳转换为 struct tm
  gmtime_r(&now, &timeinfo);

  Serial.println("Current time:");
  Serial.print("Year: ");
  Serial.println(1900 + timeinfo.tm_year);
  Serial.print("Month: ");
  Serial.println(1 + timeinfo.tm_mon);
  Serial.print("Day: ");
  Serial.println(timeinfo.tm_mday);
  Serial.print("Hour: ");
  Serial.println(timeinfo.tm_hour);
  Serial.print("Minute: ");
  Serial.println(timeinfo.tm_min);
  Serial.print("Second: ");
  Serial.println(timeinfo.tm_sec);
}

void loop() {
  // 这里可以添加其他代码
}
```

这个示例首先连接到 WiFi,然后初始化 SNTP 并获取当前时间戳。最后,将时间戳转换为 `struct tm` 格式并打印出来。请注意,你需要将 `ssid` 和 `password` 替换为你的 WiFi 网络信息。
举报

更多回帖

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