当前位置: 首页 > news >正文

ESP32+Arduino入门(三):连接WIFI获取当前时间

ESP32内置了WIFI模块连接WIFI非常简单方便。

代码如下:

#include <WiFi.h>

const char* ssid = "WIFI名称";
const char* password = "WIFI密码";

void setup()
{
    Serial.begin(115200);
    WiFi.begin(ssid,password);
    while(WiFi.status() != WL_CONNECTED){
        // statement
        delay(500);
        Serial.println("Connecting to WiFi...");
    }

    Serial.println("Connected to the WiFi network");

}

void loop()
{
    
}

本次分享的是在OLED屏上显示当前时间的案例。

需要用到NTPClient。

需要先安装一下这个库。

image-20250410151043063

NTPClient 是一个客户端程序,它使用网络时间协议(NTP)从网络时间服务器获取当前时间。

网络时间协议(NTP):NTP 是一个互联网协议,用于在计算机系统之间同步时钟。

NTPClient timeClient(ntpUDP, "pool.ntp.org", 28800, 60000); // GMT+8 时区, 更新间隔 60 秒
  • pool.ntp.org 是一个公共 NTP 服务器池,它会将您的请求重定向到附近的 NTP 服务器。 这是一个方便且常用的选择,因为您不需要选择特定的 NTP 服务器。
  • 28800: 这是一个整数,表示时区偏移量,单位为秒。 在本例中,28800 秒等于 8 小时 (28800 / 3600 = 8)。 这表明代码被配置为使用 GMT+8 时区,例如中国标准时间 (CST)。
  • 60000: 这是一个整数,表示时间更新的间隔,单位为毫秒。 在本例中,60000 毫秒等于 60 秒。 这意味着 timeClient 对象配置为每 60 秒从 NTP 服务器更新一次时间。

还需要安装一个Time库。

image-20250410151431919

Arduino 环境中,Time是一个轻量级的库,主要用于处理 时间戳和 日期时间的计算、格式化和同步。

全部代码如下:

#include <U8g2lib.h>
#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <TimeLib.h>
// WiFi 设置
const char* ssid = "TP-LINK_C5A2";
const char* password = "15750849198yy";
// NTP 设置
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 28800, 60000); // GMT+8, 60秒更新一次
// OLED 设置
U8G2_SSD1306_128X32_UNIVISION_F_SW_I2C u8g2(U8G2_R0, /*SCL=*/0, /*SDA=*/1, /*RESET=*/U8X8_PIN_NONE);
void setup() {
  Serial.begin(115200);
  
  // 初始化 OLED
  u8g2.begin();
  u8g2.enableUTF8Print();
  u8g2.setFont(u8g2_font_wqy12_t_gb2312);
  
  // 连接 WiFi
  Serial.print("Connecting to WiFi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi connected");
  // 初始化 NTP
  timeClient.begin();
  while (!timeClient.update()) {
    delay(500);
    Serial.print(".");
  }
  setTime(timeClient.getEpochTime());
  Serial.println("NTP time synced");
}
void loop() {
  static unsigned long lastNtpUpdate = 0;
  unsigned long now = millis();
  // 每分钟同步一次 NTP 时间
  if (now - lastNtpUpdate >= 60000) {
    timeClient.update();
    setTime(timeClient.getEpochTime());
    lastNtpUpdate = now;
  }
  // 获取当前时间
  time_t t = now();
  char timeStr[20]; // 足够存储 "2023年12月31日 23:59:59"
  
  // 格式化时间字符串
  snprintf(timeStr, sizeof(timeStr), 
           "%04d年%02d月%02d日 %02d:%02d:%02d",
           year(t), month(t), day(t),
           hour(t), minute(t), second(t));
  // 显示时间
  u8g2.clearBuffer();
  u8g2.setCursor(0, (32 + u8g2.getMaxCharHeight()) / 2);
  u8g2.print(timeStr);
  u8g2.sendBuffer();
  
  delay(200); // 适当降低刷新率以减少闪烁
}

效果:

相关文章:

  • 埃隆·马斯克与开源:通过协作重塑创新
  • Python 中 `__init__` 方法的深入解析
  • Java工具类-assert断言
  • 嵌入式人工智能应用-第三章 opencv操作3 图像平滑操作 下
  • Linux 内存调优之系统内存全面监控
  • 教程:在Typora中显示拼音——附处理工具
  • 学术版 GPT 网页
  • 电商用户购物行为分析:基于K-Means聚类与分类验证的完整流程
  • Linux dmesg 命令详解
  • 深入理解 v-for 指令及其使用方法
  • AI绘制流程图
  • 【数据结构】之二叉树
  • 《嵌套调用与链式访问:C语言中的函数调用技巧》
  • 关于Genspark.ai的使用体验
  • Linux基础4
  • SMT贴片组装工艺优化与高效生产
  • 【说明书#1】Node.js 和 npm安装与使用
  • 波束形成(BF)从算法仿真到工程源码实现-第五节-线性约束最小方差波束形成算法(LCMV)
  • 3DMAX建筑可视化插件RetailStore零售商店生成器安装及使用方法详解
  • 基于MCP-Client实现Manus思路扩展 和Demo设计
  • 成都网站建设公司哪家好/网页设计与制作项目教程
  • 网站设计模板是什么/推广产品的方法和步骤
  • 西安企业网站搭建/百度指数怎么查
  • 深圳营销型网站建设公司选择哪家好/谷歌seo视频教程
  • 网站建设合同纠纷起诉书/重庆网站推广专家
  • 新零售b2b网站做的最好的/seo培训一对一