基于基于esp32的联网获取时间-Arduino中文社区 - Powered by Discuz!

Arduino中文社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 10129|回复: 5

基于基于esp32的联网获取时间

[复制链接]
发表于 2020-1-5 22:30 | 显示全部楼层 |阅读模式
突然突发奇想想做一个基于esp32的小作品,可以联网获取时间的。
首先,在这里感谢“单片机菜鸟”博哥的代码支持。
https://blog.csdn.net/dpjcn1990/article/details/92830098

[mw_shl_code=arduino,true]#include <ESP8266WiFi.h>//想要在ESP32模块上使用,只需要把头文件更改为<WiFi.h>

void smartConfig()
{
  WiFi.mode(WIFI_STA);
  Serial.println("\r\nWait for Smartconfig");
  delay(2000);// 等待配网
  WiFi.beginSmartConfig();

while (1)
  {
    Serial.print(".");
    delay(500);
    if (WiFi.smartConfigDone())
    {
      Serial.println("SmartConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      WiFi.setAutoConnect(true);  // 设置自动连接
      break;
    }
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void setup()
{
  Serial.begin(115200);
  smartConfig();
}

void loop()
{
  delay(100);
  Serial.println("loop");
}[/mw_shl_code]

这里就是博哥的源代码,写的也是够详细的。这里就是博哥的一键配网的源代码。已经附上博哥CSDN博客地址。
在这里说明一点,这个代码在更改头文件后,可以在ESP8266和ESP32中随意切换使用。

下面联网获取时间的代码部分
[mw_shl_code=arduino,true]#include <WiFi.h>
//想要在ESP8266模块上使用,只需要把头文件更改为<ESP8266WiFi.h>

#include "time.h"

const char* ssid       = "YOUR_SSID";
const char* password   = "YOUR_PASS";

const char* ntpServer = "pool.ntp.org";
const long  gmtOffset_sec = 3600;//这里采用UTC计时,中国为东八区,就是 8*60*60
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();
}[/mw_shl_code]

这个代码位于esp32开发板自带的示例中。
pool.ntp.org为获取时间得接口,可以尝试更多得接口。比如微软的time.windows.com,美国国家标准与技术研究院的time.nist.gov(笔者未曾尝试是否可行)

由于代码使用的UTC计时方式,换算成中国的东八区,就是 8*60*60



最后附上修改,合并的代码
[mw_shl_code=arduino,true]#include <WiFi.h>
//想要在ESP32模块上使用,只需要把头文件更改为<WiFi.h>

#include <time.h>

const char* ntpServer = "pool.ntp.org";
const long  gmtOffset_sec = 28800;
const int   daylightOffset_sec = 28800;

void smartConfig()
{
  WiFi.mode(WIFI_STA);
  Serial.println("\r\nWait for Smartconfig");
  delay(2000);// 等待配网
  WiFi.beginSmartConfig();

while (1)
  {
    Serial.print(".");
    delay(500);
    if (WiFi.smartConfigDone())
    {
      Serial.println("SmartConfig Success");
      Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
      Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
      WiFi.setAutoConnect(true);  // 设置自动连接
      break;
    }
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}


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);
    smartConfig();
  }

{
    while (WiFi.status() != WL_CONNECTED)
   {
      delay(500);
      Serial.print(".");
  }

  configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);
  printLocalTime();
}
}
void loop()
{
  delay(1000);
  printLocalTime();
}[/mw_shl_code]



代码简单易懂,待我继续研究后,添加一个oled屏。

发表于 2020-1-6 09:53 | 显示全部楼层
大佬牛逼哈哈哈哈
发表于 2020-6-7 18:02 | 显示全部楼层
你好请问#include <time.h>,和getLocalTime(&timeinfo)是哪个库里的,我操作的时候显示getLocalTime()是没有定义的
发表于 2020-8-2 16:17 | 显示全部楼层
莫知 发表于 2020-6-7 18:02
你好请问#include ,和getLocalTime(&timeinfo)是哪个库里的,我操作的时候显示getLocalTime()是没有定义 ...

esp32示例自带的
发表于 2021-2-2 20:52 | 显示全部楼层
你好,我是一名esp32开发新手,最近两天才接触esp32,想在ttgo上显示时间,如果你愿意的话,我们可以一起讨论嘛
发表于 2021-2-2 20:53 | 显示全部楼层
你好,我是一名esp32开发新手,最近两天才接触esp32,想在ttgo上显示时间,如果你愿意的话,我们可以一起讨论嘛
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|Archiver|手机版|Arduino中文社区

GMT+8, 2024-11-28 10:34 , Processed in 0.184769 second(s), 15 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表