Arduino ESP32 最简单直接获取网络时间方法

Arduino ESP32 最简单直接获取网络时间方法


✨在 ArduinoESP32核心支持库当中已经包含相关的获取时间的库,所有获取网络时间,只需要连接好网络,调用相关的库函数即可实现NTP时间的获取,免去的额外加载扩展库的头文件。

🧲实施条件

  • ESP32需要在:WiFi.mode(WIFI_STA);模式下,配网并接入网络。
  • 使用下面函数从网络时间服务器上获取并设置时间:
configTime(long gmtOffset_sec, int daylightOffset_sec, const char* server1, const char* server2 = nullptr, const char* server3 = nullptr)

参数说明:
gmtOffset_sec 参数就是用来修正时区的,比如对于我们东八区(UTC/GMT+08:00)来说该参数就需要填写 8 * 3600 ;
daylightOffset_sec使用夏令时 daylightOffset_sec 就填写3600,否则就填写0;

通过网络时间服务器获得的时间是世界协调时间(UTC)/格林尼治时间(GMT),不同地区的时间可以通过时区换算.

  • 设置完成后就可以使用下面函数读取当前时间了:
bool getLocalTime(struct tm * info, uint32_t ms = 5000)

参数说明:
ms 为该操作超时时间,超时则返回false;
info 是一个 struct tm 结构体对象,用于接收当前时间;

  • 获取成功后芯片会使用RTC时钟保持时间的更新,这时候,就可以不依赖网络了,可以关闭网络,运行时读取本地同步过的时间。

🎯具体获取时间的代码

/**ESP32 最简单直接获取网络时间方法
*/#include <WiFi.h>#define NTP1  "ntp1.aliyun.com"
#define NTP2  "ntp2.aliyun.com"
#define NTP3  "ntp3.aliyun.com"//填写WIFI入网信息
const char* ssid     = "MERCURY_D268G";     // WIFI账户
const char* password = "pba5ayzk"; // WIFI密码void setClock() {struct tm timeinfo;if (!getLocalTime(&timeinfo)){//如果获取失败,就开启联网模式,获取时间Serial.println("Failed to obtain time");//    WiFi.disconnect(false);WiFi.mode(WIFI_STA);//开启网络  WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}configTime(8 * 3600, 0, NTP1, NTP2,NTP3);return;}Serial.println(&timeinfo, "%F %T %A"); // 格式化输出:2021-10-24 23:00:44 SundaySerial.print(asctime(&timeinfo));//默认打印格式:Mon Oct 25 11:13:29 2021//   WiFi.disconnect(true);//断开网络连接,关闭网络
}void setup()
{Serial.begin(115200);Serial.println();//设置ESP32工作模式为无线终端模式WiFi.mode(WIFI_STA);WiFi.begin(ssid, password);while (WiFi.status() != WL_CONNECTED){delay(500);Serial.print(".");}Serial.println("WiFi connected!");configTime(8 * 3600, 0, NTP1, NTP2,NTP3);setClock();// 从网络时间服务器上获取并设置时间// 获取成功后芯片会使用RTC时钟保持时间的更新//    WiFi.disconnect(true);//断开wifi网络
//    WiFi.mode(WIFI_OFF);//关闭网络Serial.println("WiFi disconnected!");
}void loop()
{Serial.println("Waiting 10s before the next round...");delay(10000);setClock();
}
  • 🎉串口打印信息
    在这里插入图片描述

🧲默认的时间格式输出:asctime(&timeinfo),如果像将该数据传递给其他地方使用,可以使用char*变量来接收。例如:char* timelist=asctime(&timeinfo);需要注意的是,并不能使用const char* timelist2 =(&timeinfo, "%F %T %A");来接收这种格式化的数据,得到的将是%F %T %A的字符串结果。

🎄struct tm结构体与格式化输出

通过一个结构体将时间数据拆解成段,满足不同需求的显示。

  • struct tm结构体
struct tm {
int tm_sec; // 秒,取值0~59;
int tm_min; // 分,取值0~59;
int tm_hour; // 时,取值0~23;
int tm_mday; // 月中的日期,取值1~31;
int tm_mon; // 月,取值0~11;
int tm_year; // 年,其值等于实际年份减去1900;
int tm_wday; // 星期,取值0~6,0为周日,1为周一,依此类推;
int tm_yday; // 年中的日期,取值0~365,0代表1月1日,1代表1月2日,依此类推;
int tm_isdst; // 夏令时标识符,实行夏令时的时候,tm_isdst为正;不实行夏令时的进候,tm_isdst为0;不了解情况时,tm_isdst()为负
};
  • 格式化输出(只能在申明tm结构体函数内调用执行)

Serial.println(&timeinfo, "%F %T %A"); // 格式化输出:2021-10-24 23:00:44 Sunday Serial.print(asctime(&timeinfo));//默认打印格式:Mon Oct 25 11:13:29 2021

%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的后两位数字
%d 十进制表示的每月的第几天
%D 月//%e 在两字符域中,十进制表示的每月的第几天
%F 年--%g 年份的后两位数字,使用基于周的年
%G 年分,使用基于周的年
%h 简写的月份名
%H 24小时制的小时
%I 12小时制的小时
%j 十进制表示的每年的第几天
%m 十进制表示的月份
%M 十时制表示的分钟数
%p 本地的AM或PM的等价显示
%r 12小时的时间
%R 显示小时和分钟:hh:mm
%S 十进制的秒数
%t 水平制表符
%T 显示时分秒:hh:mm:ss
%u 每周的第几天,星期一为第一天 (值从06,星期一为0%U 第年的第几周,把星期日做为第一天(值从053%V 每年的第几周,使用基于周的年
%w 十进制表示的星期几(值从06,星期天为0%W 每年的第几周,把星期一做为第一天(值从053%x 标准的日期串
%X 标准的时间串
%y 不带世纪的十进制年份(值从099%Y 带世纪部分的十进制年份
%z,%Z 时区名称,如果不能得到时区名称则返回空字符

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1621473.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

TCN-时间卷积网络

目录 一、引言 二、时序卷积神经网络 2.1 因果卷积&#xff08;Causal Convolution&#xff09; 2.2 膨胀卷积&#xff08;Dilated Convolution&#xff09; 2.3 残差链接&#xff08;Residual Connections&#xff09; 三、讨论和总结 1. TCN的优点 2. TCN的缺点 参考…

DBeaver的安装和使用:windows版

DBeaver官网下载地址&#xff1a;https://dbeaver.io/download/ 下载完成后&#xff0c; 进入傻瓜式安装&#xff1a; 这里会进入重复界面&#xff0c;一样点击下一步即可 选择安装目录&#xff0c;尽量不要选C盘&#xff0c; 我的电脑只有c盘&#xff0c; 没办法 等待安装完成…

这款远程桌面软件开源了

相信在七八年前&#xff0c;大部分读者都使用 QQ 远程控制电脑。到后面&#xff0c;才接触到一些好用的远程控制产品&#xff0c;比如 Teamviewer、向日葵等。 最近&#xff0c;自己装的远程控制产品试用期到了&#xff0c;便想到去 GitHub 找找有没有可以替代的开源项目&#…

Modbus转Profinet网关在大型自动化仓储项目应用案例

在自动化仓储项目中&#xff0c;Modbus是一种常见的通信协议&#xff0c;用于连接各种设备&#xff0c;例如传感器、PLC和人机界面。然而&#xff0c;Modbus协议只支持串行通信&#xff0c;并且数据传输速度较慢。为了提高通信效率和整体系统性能&#xff0c;许多大型仓储项目选…

LeetCode-455-分发饼干-贪心算法

题目描述&#xff1a; 假设你是一位很棒的家长&#xff0c;想要给你的孩子们一些小饼干。但是&#xff0c;每个孩子最多只能给一块饼干。 对每个孩子 i&#xff0c;都有一个胃口值 g[i]&#xff0c;这是能让孩子们满足胃口的饼干的最小尺寸&#xff1b;并且每块饼干 j&#xff…

手机怎么解决同ip多账号_游戏工作室如何实现手游多开多窗口多IP

经常能看到的一个画面就是游戏工作室&#xff0c;一台电脑许多个手机游戏窗口同时进行&#xff0c;需求量1台程序运行好几个微端。或是相同应用程序开启好几个窗口。那样做能够节约成本&#xff0c;不用多个设备。 但他们全是公用相同网络ip地扯得&#xff0c;那麼如何来防止由…

【产品文档】团队介绍PPT模板

今天和大家免费分享团队介绍的PPT模板。团队介绍是向他人展示团队的实力、专业性和能力的重要方式。通过一个有力的团队介绍&#xff0c;您可以突出团队的成员、经验、技能和取得的成就&#xff0c;从而增加信任、吸引合作伙伴、客户或投资者的兴趣 【模板预览】 动态演示效果…

【交换机 挑选】什么交换机适合游戏工作室

【交换机 挑选】如何选择合适的交换机&#xff1f;什么交换机适合游戏工作室&#xff1f;交换机作为局域网数据转发的核心设备&#xff0c;其性能及功能决定着局域网的可管理性和数据转发性能&#xff0c;选择交换机时ONV/光网视小编建议可以从以下几方面去考虑&#xff1a;1.端…

“钩子”、体验和思考人生,一家瑞典游戏工作室如何站稳脚跟,又不被自己的野心呛到

“瑞典夏天短&#xff0c;冬夜漫漫&#xff0c;我想大家就窝在家里做游戏了。” Minecraft、《战地》、《城市&#xff1a;天际线》、Candy Crush……你曾玩过或当前在玩的很多游戏都是瑞典出产。为什么瑞典人这么擅长做游戏&#xff1f;Anton Albiin 给出了一个有点冷的回答。…

c++游戏工作室,不容错过

zzz工作室&#xff0c;链接zzz07.ysepan.com 在这里&#xff0c;你可以聊天留言&#xff0c;可以贴上自己的小游戏或自己的文章&#xff0c;可以下载教程和其他小游戏&#xff0c;也可以做题哟(&#xff3e;&#xff35;&#xff3e;)ノ~&#xff39;&#xff2f;。并且在目前…

SaaS | 金山软件西山居游戏工作室

SaaS | 金山软件西山居游戏工作室 原创&#xff1a; 鲁迅本人 鲁迅都说好 3天前 想了想金山软件还是得放到SaaS&#xff0c;以后比较好归类。 主要三个关注点吧 剑侠IP带来的流量是否能长此以往经久不衰端游转手游是趋势&#xff0c;转换是否成功腾讯入股代理&#xff0c;渠…

游戏工作室

各位玩家大家中午好&#xff0c;工作室对游戏内的影响是非常巨大的&#xff0c;我们会一直严厉打击工作室及其相关账号。如果某部分账号是工作室的获利账号我们查出来以后也会进行封停处理。当然&#xff0c;账号被封停的原因不仅仅是工作室&#xff0c;还有因为使用外挂等第三…

手游游戏工作室内部OA管理系统免费安装教程

1. 安装配置&#xff0c;下载OA源码 ①&#xff1a;安装宝塔&#xff08;https://www.bt.cn/&#xff09;系统&#xff0c;配置环境 ②&#xff1a;下载溪谷工作室OA免费版 溪谷软件工作室OA管理系统免费下载地址-游戏公会管理-游戏公会运营推广资讯-游戏工作室OA &#xff08…

专业游戏后端引擎“坚果矩阵” 解初创游戏工作室的燃眉之急

2020年新冠疫情肆虐全球对各行各业都造成了不同程度的冲击&#xff0c;在这种经济形势下游戏行业反倒获得了逆势增长&#xff0c;玩家在线时长大幅上升&#xff0c;中国游戏市场实际销售收入增长超20%。仅2020年上半年中国新增注册游戏企业超4.42万家&#xff0c;平均每天新增注…

手机游戏辅助和游戏工作室的相关性

说起游戏辅助,特别是手游辅助,最大的需求群体算是游戏工作室了。游戏工作室是中国游戏产业链上重要的一环,他们需要使用游戏辅助工具,配合手机群控软件,批量进行手机游戏,如自动刷金币,自动跑图,自动刷极,自动挂机等操作, 多则上百台手机同时操作,效率极高。 Total Control集手…

K8S最新版本集群部署(v1.28) + 容器引擎Docker部署(上)

温故知新 &#x1f4da;第一章 前言&#x1f4d7;背景&#x1f4d7;目的&#x1f4d7;总体方向 &#x1f4da;第二章 基本环境信息&#x1f4d7;机器信息&#x1f4d7;软件信息&#x1f4d7;部署用户kubernetes &#x1f4da;第三章 Kubernetes各组件部署&#x1f4d7;安装kube…

Vue:插槽,与自定义事件

1.插槽slot <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> </head> <body> <div id"app"><!-- <p>列表书籍</p>--> <!-- …

我的世界java版游戏狗,我的世界Minecraft Java版17w46a公布

我的世界Minecraft Java版17w46a公布。每周快照是Minecraft的测试机制&#xff0c;主要用于下一个正式版的特性预览。然而&#xff0c;每周快照主要用于新特性展示&#xff0c;通常存在大量漏洞。因此对于普通玩家建议仅做测试尝鲜用。使用测试版打开存档前请务必备份。适用于正…

游戏思考04总结:针对帧、状态、物理同步的总结(之前写的太长,现在简略下)

文章目录 一、什么是帧同步&#xff08;1&#xff09;帧同步定义&#xff08;lockstep&#xff09;&#xff08;2&#xff09;帧同步实现方法&#xff08;1&#xff09;确定性锁步同步Deterministic Lockstep&#xff08;2&#xff09;乐观帧锁定Bucket Synchronization&#x…

c++系列之指针

今天不是做题系列&#xff0c;是知识系列啦。 说到指针&#xff0c;我们初学这一定会气的牙痒痒把&#xff0c;笔者也是&#xff0c;这么我好久而不得呀&#xff0c;今天来让我们聊聊指针。 其一 首先&#xff0c;我们明确的知道&#xff0c;假如我们开一个变量&#xff0c;…