ESP32使用NTP服务

#include <WiFi.h>
#include "time.h"

const char* ssid       = "xxx";
const char* password   = "xxxxxxxx";

const char* ntpServer = "us.pool.ntp.org";
const long  gmtOffset_sec = 3600*7;
const int   daylightOffset_sec = 3600;

void printLocalTime()
{
  struct tm timeinfo;
  if(!getLocalTime(&timeinfo)){
    Serial.println("Failed to obtain time");
    return;
  }
  Serial.println(&timeinfo, "%A, %B %d %Y %H:%M:%S");
}

void setup()
{
  Serial.begin(115200);
  
  //connect to WiFi
  Serial.printf("Connecting to %s ", ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
      delay(500);
      Serial.print(".");
  }
  Serial.println(" CONNECTED");
  
  //init and get the time
  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  printLocalTime();

  //disconnect WiFi as it's no longer needed
  WiFi.disconnect(true);
  WiFi.mode(WIFI_OFF);
}

void loop()
{
  delay(1000);
  printLocalTime();
}

使用NTP服务,核心是通过WIFI访问NTP服务器。

NTP服务器在全球有多个节点,当访问这些网址节点时,则返回最近节点的精确时间,在linux和windows系统中广泛使用。

用ESP32来访问这些节点,需要使用configTime来对时间进行设置,其中GMT是指时区,daylightoffset是指夏令时,因为中国在东八区,所以跟日期变更线差7个时区,只需要在GMT中设置3600*7即可,这样打印出来的时间即是东八区时间。

用这个功能即可做数字wifi时钟,成本可以很低。

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
ESP32Time是一个ESP32的库,可以让ESP32获取网络时间并进行时钟同步。使用ESP32Time可以方便地获取网络时间,而不需要使用RTC或其他时钟设备。 以下是使用ESP32Time的步骤: 1. 安装ESP32Time库:可以通过Arduino IDE的库管理器搜索并安装ESP32Time库。 2. 连接ESP32到WiFi网络:在程序中使用WiFi库连接ESP32到WiFi网络。 3. 初始化ESP32Time:在程序中使用ESP32Time库的begin()函数初始化ESP32Time。在begin()函数中,可以设置NTP服务器地址、时区等参数。 4. 获取网络时间:使用ESP32Time库的now()函数获取当前的网络时间。now()函数返回一个time_t类型的值,表示自1970年1月1日以来经过的秒数。 5. 使用网络时间:可以使用标准C库中的时间函数,如localtime()、strftime()等,对网络时间进行格式化和处理。 下面是一个使用ESP32Time的示例代码: ```cpp #include <WiFi.h> #include <ESP32Time.h> const char* ssid = "your_SSID"; const char* password = "your_PASSWORD"; void setup() { Serial.begin(115200); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.println("Connecting to WiFi..."); } Serial.println("Connected to WiFi"); // 初始化ESP32Time ESP32Time.begin("pool.ntp.org", 8); } void loop() { // 获取网络时间 time_t now = ESP32Time.now(); // 格式化时间 char buf[256]; strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S", localtime(&now)); // 输出时间 Serial.println(buf); delay(1000); } ``` 在这个示例中,ESP32连接到WiFi网络后,使用ESP32Time库连接到NTP服务器,并获取网络时间。然后,使用标准C库中的strftime()函数将网络时间格式化为字符串,并输出到串口。在loop()函数中,使用delay()函数延迟1秒,然后再次获取并输出网络时间。 这是一个简单的ESP32Time使用示例。通过使用ESP32Time库,可以轻松地获取网络时间并进行时钟同步。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值