返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >ESP32获取网络时间
  • 271
分享到

ESP32获取网络时间

网络php开发语言 2023-09-05 08:09:55 271人浏览 八月长安
摘要

一:目的 时间是软硬件系统或设备中比较重要的东西,特别是需要和外部进行交互时就更加需要用到有个统一的时间了。目前来说只要能联网的设备的时间主要是从网络时间服务器(NTP)上获取的,这篇文章将对此做个简单的说明。 二:基础说明 在Arduin

一:目的

时间是软硬件系统或设备中比较重要的东西,特别是需要和外部进行交互时就更加需要用到有个统一的时间了。目前来说只要能联网的设备的时间主要是从网络时间服务器(NTP)上获取的,这篇文章将对此做个简单的说明。

二:基础说明

Arduino core for the ESP32中获取网络时间是非常简单的,只要下面几步就行:

  • 使用STA或ETH模式连上互联网;
  • 使用下面函数从网络时间服务器上获取并设置时间:

      void configTime(long gmtOffset_sec, int daylightOffset_sec, const char* server1, const char*        server2 = nullptr, const char* server3 = nullptr)

      网络时间服务器最常用的主机名是 pool.ntp.org ;
      通过网络时间服务器获得的时间是世界协调时间(UTC)/格林尼治时间(GMT),不同地区          的时间可以通过时区换算, gmtOffset_sec 参数就是用来修正时区的,比如对于我们东八区(        UTC/GMT+08:00)来说该参数就需要填写 8 * 3600 ;
       如果使用夏令时 daylightOffset_sec 就填写3600,否则就填写0;

设置完成后就可以使用下面函数读取当前时间了: 

  bool getLocalTime(struct tm * info, uint32_t ms = 5000)
  ms 为该操作超时时间,超时则返回false;
  info 是一个 struct tm 结构体对象,用于接收当前时间; 

三:示例演示 

在Arduino core for the ESP32中获取网络时间是非常简单的,只要先连上网,然后就可以调用库中封装的方法获取网络时间了。下面是个简单的示例演示: 

#include const char *ssid = "********";    //你的网络名称const char *passWord = "********"; //你的网络密码const char *ntpServer = "pool.ntp.org";const long gmtOffset_sec = 8 * 3600;const int daylightOffset_sec = 0;void printLocalTime(){    struct tm timeinfo;    if (!getLocalTime(&timeinfo))    {        Serial.println("Failed to obtain time");        return;    }    Serial.println(&timeinfo, "%F %T %A"); // 格式化输出}void setup(){    Serial.begin(115200);    Serial.println();    WiFi.begin(ssid, password);    while (WiFi.status() != WL_CONNECTED)    {        delay(500);        Serial.print(".");    }    Serial.println("WiFi connected!");    // 从网络时间服务器上获取并设置时间    // 获取成功后芯片会使用RTC时钟保持时间的更新    configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);    printLocalTime();    WiFi.disconnect(true);    WiFi.mode(WIFI_OFF);    Serial.println("WiFi disconnected!");}void loop(){    delay(1000);    printLocalTime();}

 

 

         

四:额外说明

      网络时间服务器

可用的网络时间服务器主要有下面一些:

 

 

 

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

 该结构体可以格式化输出,格式化规则如下:

%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 每周的第几天,星期一为第一天 (值从0到6,星期一为0)%U 第年的第几周,把星期日做为第一天(值从0到53)%V 每年的第几周,使用基于周的年%w 十进制表示的星期几(值从0到6,星期天为0)%W 每年的第几周,把星期一做为第一天(值从0到53)%x 标准的日期串%X 标准的时间串%y 不带世纪的十进制年份(值从0到99)%Y 带世纪部分的十进制年份%z,%Z 时区名称,如果不能得到时区名称则返回空字符

 五:获取时间并在0.96OLED屏中显示时间

 

#include  // 使用 I2C 的库#include  //Adafruit 库写入显示器#include #include const char *ssid = "nova6";    //你的网络名称const char *password = "zdx123456"; //你的网络密码 #define SCREEN_WIDTH 128 // 使用的是 128×64 OLED 显示屏#define SCREEN_HEIGHT 64 //  // Declaration for an SSD1306 display connected to I2C (SDA, SCL pins)//  I2C 通信协议Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, -1);// (-1) 参数表示您的 OLED 显示器没有 RESET 引脚 void testscrolltext(void); //函数声明 const char *ntpServer = "pool.ntp.org";const long gmtOffset_sec = 8 * 3600;const int daylightOffset_sec = 0;void printLocalTime(){    struct tm timeinfo;    if (!getLocalTime(&timeinfo))    {        Serial.println("Failed to obtain time");        return;    }    Serial.println(&timeinfo, "%F %T %A"); // 格式化输出    display.clearDisplay();// 清除显示    display.setTextSize(2);// 设置文本大小    display.setTextColor(WHITE);// 设置文本颜色    display.setCursor(0, 30);//设置显示坐标    // Display static text    display.println(&timeinfo, "%F %T");//}void setup() {  Serial.begin(115200);//115200 的波特率初始化串行监视器以进行调试  WiFi.begin(ssid, password);  while (WiFi.status() != WL_CONNECTED)    {        delay(500);        Serial.print(".");    }  Serial.println("WiFi connected!");  if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C))  //0x3D 0x3c  0x78 0x7A // Address 0x3D for 128x64   {     Serial.println(F("SSD1306 allocation failed"));    for(;;);  }  delay(2000);  display.clearDisplay();// 清除显示//  display.clearDisplay();// 清除显示//  display.setTextSize(3);// 设置文本大小//  display.setTextColor(WHITE);// 设置文本颜色//  display.setCursor(0, 30);//设置显示坐标//  // Display static text//  display.println("naiva");////    display.setTextColor(WHITE);// 设置文本颜色//  display.setCursor(20, 0);//设置显示坐标//  display.println("haha");// //  display.display(); // 屏幕上实际显示文本   configTime(gmtOffset_sec, daylightOffset_sec, ntpServer);   printLocalTime();} //void configTime(long gmtOffset_sec, int daylightOffset_sec, const char* server1, const char* server2 = nullptr, const char* server3 = nullptr) int i = 0; void loop() {//  //testscrolltext();//  display.clearDisplay();//  display.setTextSize(1); // //  display.setTextColor(WHITE);//  display.setCursor(10, 0);//  display.println(F("naiva"));//  display.display();      ////  delay(100);//  display.startscrollright(0x00, 0x0F);//  从左到右滚动文本//  delay(4000);//  display.stopscroll();// 停止滚动//  delay(1000);//  display.startscrollleft(0x00, 0x0F);//  从右到左滚动文本//  delay(4000);//  display.stopscroll();//  delay(1000);  printLocalTime();  display.setTextColor(WHITE);// 设置文本颜色  display.setCursor(20, 0);//设置显示坐标  display.println(i);//   display.display(); // 屏幕上实际显示文本  i = i+1;  delay(1000);} void testscrolltext(void) {  display.clearDisplay();   display.setTextSize(2); // Draw 2X-scale text  display.setTextColor(WHITE);  display.setCursor(10, 0);  display.println(F("NAIVA415"));  display.display();      // Show initial text  delay(100);   // Scroll in various directions, pausing in-between:  display.startscrollright(0x00, 0x0F);  delay(2000);  display.stopscroll();  delay(1000);  display.startscrollleft(0x00, 0x0F);  delay(2000);  display.stopscroll();  delay(1000);  display.startscrolldiagright(0x00, 0x07);  delay(2000);  display.startscrolldiagleft(0x00, 0x07);  delay(2000);  display.stopscroll();  delay(1000);}  

来源地址:https://blog.csdn.net/xingstar521/article/details/131748026

--结束END--

本文标题: ESP32获取网络时间

本文链接: https://www.lsjlt.com/news/395040.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • ESP32获取网络时间
    一:目的 时间是软硬件系统或设备中比较重要的东西,特别是需要和外部进行交互时就更加需要用到有个统一的时间了。目前来说只要能联网的设备的时间主要是从网络时间服务器(NTP)上获取的,这篇文章将对此做个简单的说明。 二:基础说明 在Arduin...
    99+
    2023-09-05
    网络 php 开发语言
  • android-获取网络时间、获取特定时区时间、时间同步的方法
    最近整理出android-获取网络时间、获取特定时区时间、时间同步的方法。具体如下: 方法一: SimpleDateFormat dff = new SimpleDateFo...
    99+
    2022-06-06
    方法 Android
  • Android获取系统时间以及网络时间
    项目开发中,很多时候会用到android的时间,罗列一下获取的时间的方式,和大家共同学习进步 一、获取系统时间  1.通过Calendar类来获取系统当前的时间 ...
    99+
    2022-06-06
    系统时间 系统 Android
  • python 获取网络时间及修改本地时间
     本本经常时间错乱,偶闲暇之作,专为同步本本时间。以前有朋友提到日期时间设置里面的有些时间服务器。限于不同的网络,有时候这些时间服务器不一定能用。因此这次选择的是www.baidu.com这个大家都能用吧。接下来上python...
    99+
    2023-01-31
    时间 网络 python
  • Android编程获取网络时间实例分析
    本文实例讲述了Android编程获取网络时间的方法。分享给大家供大家参考,具体如下: 在网上看到的最常见的方式有: public static void main(Strin...
    99+
    2022-06-06
    Android
  • Python获取网络时间戳的两种方法详解
    目录方法一代码实现调用方法返回结果方法二代码实现调用方法返回结果在我们进行注册码的有效期验证时,通常使用获取网络时间的方式来进行比对。 以下为获取网络时间的几种方式。 方法一 需要的...
    99+
    2024-04-02
  • Python 获取时间戳
    Python 获取时间通过 time 模块 如下代码,是通过获取当前的时间,按照格式输出 Python默认获取当前的时间返回的都是时间的元组,下面是元组的,字符串时间的一个转换输出 # -*- coding:utf-8 -*-...
    99+
    2023-01-31
    时间 Python
  • Android 获取网络权限
    在 AndroidManifest.xml 加入网络权限 在  application 中加入如下代码 android:requestLegacyExternalStorage="true" android:networkS...
    99+
    2023-09-02
    android android studio ide
  • sqlserver 获取当前时间
    select 'T'+(replace(replace(replace(replace(convert(varchar(23),getdate(),121),'-',''),' ',''),':'...
    99+
    2024-04-02
  • mysql获取时间方式
    目录1、获取指定时间2、获取当前时间:年-月-日 时:分:秒2.1、函数 now() :2.2、函数 SYSDATE()2.3 、函数 current_timestamp()2.4、...
    99+
    2024-04-02
  • python获取当前时间
    获取当前时间datetime datetime.datetime.now()# datetime.datetime(2023, 3, 29, 20, 10, 19, 634442) 获取当前年月日 d...
    99+
    2023-09-05
    python
  • Java获取当前时间
    目录 1、Java.util.Date2、System.currentTimeMillis()3、Calendar类 1、Java.util.Date Date date = new Date(); 通过Date类来获取当前时间...
    99+
    2023-08-17
    java 开发语言
  • c#怎么获取时间
    如何在 c# 中获取时间?c# 中获取当前时间的方法有:1. datetime 类型,提供特定日期和时间信息;2. timespan 类型,表示时间间隔;3. 环境类,提供 utc 时间...
    99+
    2024-05-14
    c#
  • sql时间怎么获取
    获取 sql 中的时间有多种方法:使用 now() 函数返回当前系统时间戳。使用 getdate() 函数(microsoft sql server)。使用 current_timest...
    99+
    2024-06-03
    mysql oracle
  • oracle如何获取时间
    在 oracle 中获取时间有以下方法:current_timestamp:返回当前系统时间,精确到秒。systimestamp:比 current_timestamp 更准确,精确到纳...
    99+
    2024-06-12
    oracle
  • Python网络爬虫之获取网络数据
    目录使用 Python 获取网络数据编写爬虫代码使用 IP 代理总结Python 语言的优势在于其功能强大,可以用于网络数据采集、数据分析等各种应用场景。本篇文章将介绍如何使用 Py...
    99+
    2023-05-18
    Python获取网络数据 Python爬取数据
  • nodejs如何获取时间戳与时间差
    Nodejs中获取时间戳的方法有很多种,例如: 1.new Date().getTime() 2.Date.now() 3.process.uptime() 4....
    99+
    2022-06-04
    时间差 时间 nodejs
  • golang时间及时间戳的获取转换
    目录一、获取时间1.1 获取当前时间1.2 获取之前/之后的时间获取1分钟之前的时间戳获取一小时之前的时间获取1小时后的时间二、获时间戳2.1 获取当前时间戳2.2 时间转时间戳2....
    99+
    2024-04-02
  • 获取 ESP32/ESP8266 MAC 地址并更改 (Arduino IDE)
    本指南介绍如何使用 Arduino IDE 获取 ESP32 或 ESP8266 开发板的 MAC 地址。我们还展示了如何更改开发板的 MAC 地址。 什么是 MAC 地址? MAC 地址代表媒体访问控制地址,它是识别网络上每个设备...
    99+
    2023-09-03
    macos
  • linux如何获取时间戳
    linux中获取时间戳的方法:1、打开linux终端;2、在终端命令行中输入“date”命令进行获取时间戳即可。具体操作步骤:在linux系统桌面中使用快捷键【Ctrl+Alt+T】打开linux终端命令行模式。在linux终端命令行中输入...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作