码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • ESP32 之 ESP-IDF 教学(二十)—— SNTP校时


    本文章 来自原创专栏《ESP32教学专栏 (基于ESP-IDF)》,讲解如何使用 ESP-IDF 构建 ESP32 程序,发布文章并会持续为已发布文章添加新内容! 每篇文章都经过了精打细磨!

    ↓↓↓通过下方对话框进入专栏目录页↓↓↓
    CSDN 请求进入目录       _ O x

    是否进入ESP32教学导航(基于ESP-IDF)?

           确定


    文章目录

    • 一、简介
    • 二、示例
      • 1、场景一:最基础方式
      • 2、场景二:使用回调
      • 3、场景三:主动立刻触发时间同步

    一、简介

    SNTP 指 简单网络时间协议(Simple Network Time Protocol),一个合格的物联网设备,少不了一个准确的钟。通过SNTP,可以使ESP32设备通过网络校准本地时间。使用起来也非常简单!

    二、示例

    1、场景一:最基础方式

    最简单+基础的方式

    sntp_setoperatingmode(SNTP_OPMODE_POLL);
    sntp_setservername(0, "ntp.aliyun.com");
    
    sntp_init();
    
    • 1
    • 2
    • 3
    • 4

    但此时,你的ESP32要已联网,否则肯定是获取不了的。

    接下来,你可以通过sntp_get_sync_status()轮询检测同步是否完毕,官方示例提供了这样的代码。除此之外。我们也可以通过回调来完成。更新成功之后,我们就随时可以获取系统时间了:

    首先设置时区方法(这只影响下文时间转换,不影响时间同步。如果你有自己的方法,则可以通过自己的方式设置):

    设置时区:

    setenv("TZ", "CST-8", 1);
    tzset();
    
    • 1
    • 2

    获取时间

    // 获取系统时间戳
    time_t now = 0;
    time(&now);
    
    // 结合设置的时区,转换为tm结构体
    struct tm timeinfo = {0};
    localtime_r(&now, &timeinfo);
    
    // 转为字符串(方法随意,不一定要用strftime)
    char str[64];
    strftime(str, sizeof(str), "%c", &timeinfo);
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2、场景二:使用回调

    当sntp成功同步时间后,会有一个异步的回调通知应用做出相应更改,例如:在LVGL等UI框架上弹窗等。只需要下边的函数

    sntp_set_time_sync_notification_cb(/* 需要的函数指针 */);
    
    • 1

    需要的函数声明为形如:

    void 函数名(struct timeval* tv);
    
    • 1

    例如

    void fun(struct timeval* tv) {
        time_t now = 0;
        struct tm timeinfo = {0};
    
        time(&now);
        localtime_r(&now, &timeinfo);
    
        char str[64];
        strftime(str, sizeof(str), "%c", &timeinfo);
        ESP_LOGI("TAG", "time updated: %s", str);
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    3、场景三:主动立刻触发时间同步

    调用sntp_init()会立刻请求服务器同步一次时间。

    因此,我们需要主动同步时:
    先调用sntp_stop()、再调用sntp_init() 即可立刻同步一次时间。

    经过测试:一定要先stop!不然不会发起同步

  • 相关阅读:
    PTA 7-42 《图书目录管理系统》(初级修订版)
    day36(http协议 服务器软件的使用 PHP的简单了解 前后端交互 ajax 同步和异步)
    深度学习中的样本分类:如何区分正样本、负样本、困难样本和简单样本?
    滑动时间窗口的思想和实现,环形数组,golang
    什么样的人最适合做软件测试---喜欢找人帮忙办事的人
    java民宿运营管理网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    《动手学深度学习 Pytorch版》 6.4 多输入多输出通道
    分类模型评估的实际编码与逻辑回归可视化
    帅呆了!Kafka移除了Zookeeper!
    数据库系统原理与应用教程(075)—— MySQL 练习题:操作题 151-159(十九):综合练习
  • 原文地址:https://blog.csdn.net/m0_50064262/article/details/126690030
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号