ESP8266学习笔记(11)——SNTP接口使用

article/2025/8/21 23:21:12

一、SNTP简介

简单网络时间协议(Simple Network Time Protocol),由 NTP 改编而来,主要用来同步因特网中的计算机时钟

二、SNTP接口

SNTP 接口位于 ESP8266_NONOS_SDK/include/sntp.h


三、初始化SNTP

设置三个时间服务器域名并初始化。

/**@brief 初始化SNTP服务@param 无@return 无
*/
void ICACHE_FLASH_ATTR
SNTP_Init(void)
{sntp_setservername(0,"0.cn.pool.ntp.org");sntp_setservername(1,"1.cn.pool.ntp.org");sntp_setservername(2,"2.cn.pool.ntp.org");sntp_init();
}

四、获取SNTP时间

4.1 获取时间字符串

/**@brief 获取SNTP时间@param pRealTime -[in&out] 实时时间@return 无
*/
void ICACHE_FLASH_ATTR
GetSntpTime(char *pRealTime)
{uint32_t time = sntp_get_current_timestamp();os_sprintf(pRealTime, "%s", sntp_get_real_time(time));os_sprintf(pRealTime, "%s", sntpTimeChangeToSimpleDateFormat(pRealTime));
}

由于通过 sntp_get_real_time()函数 获取出来的时间字符串格式为Thu Dec 27 22:40:21 2018,不是我想要的格式,所以需要重新转换格式。

4.2 SNTP时间转化为简单日期格式

typedef struct sntpData_t
{uint8 week;uint8 month;uint8 day;uint8 hour;uint8 minute;uint8 second;uint8 year;
} SntpData_t;/**@brief SNTP时间转化为简单日期格式@param pSntpRealTime -[in] 实时时间@return 简单日期格式时间字符串
*/
static char *ICACHE_FLASH_ATTR
sntpTimeChangeToSimpleDateFormat(char *pSntpRealTime)
{if(!pSntpRealTime){return "";}pSntpRealTime[24] = '\0';						// 不要年份后面的数据SntpData_t sntpData;uint8 dateType[7] = {3, 3, 2, 2, 2, 2, 4};		// 3-Fri 3-May 2-31 2-11: 2-21: 2-42 4-2019uint8 temp[5];uint8 i = 0, j = 0;while(*pSntpRealTime != '\0'){if(*pSntpRealTime == ' ' || *pSntpRealTime == ':'){pSntpRealTime++;i++;}else{os_memset(temp, '\0', 5);for(j = 0; j < dateType[i]; j++){temp[j] = *pSntpRealTime;pSntpRealTime++;}switch(i){case 0: // 周sntpData.week = checkWahtWeek(temp);break;case 1: // 月sntpData.month = checkWahtMonth(temp);break;case 2: // 日sntpData.day = checkWahtDay(temp);break;case 3: // 时sntpData.hour = checkWahtHour(temp);break;case 4: // 分sntpData.minute = checkWahtMinute(temp);break;case 5: // 秒sntpData.second = checkWahtSecond(temp);break;case 6: // 年sntpData.year = checkWahtYear(temp);break;default:break;}}}os_memset(pSntpRealTime, 0, 24);os_sprintf(pSntpRealTime, "20%x-%02x-%02x %02x:%02x:%02x",sntpData.year, sntpData.month,sntpData.day, sntpData.hour,sntpData.minute, sntpData.second);return pSntpRealTime;
}

4.3 解析年月日时分秒

/**@brief 检查星期几@param pWeek -[in] 待检测字符串@return 星期几
*/
static uint8 ICACHE_FLASH_ATTR
checkWahtWeek(char *pWeek)
{if(!pWeek){return 0;}uint8 week;if(strcmp(pWeek, "Mon") == 0){week = 1;									// 星期一}else if(strcmp(pWeek, "Tue") == 0){week = 2;									// 星期二}else if(strcmp(pWeek, "Wed") == 0){week = 3;									// 星期三}else if(strcmp(pWeek, "Thu") == 0){week = 4;									// 星期四}else if(strcmp(pWeek, "Fri") == 0){week = 5;									// 星期五}else if(strcmp(pWeek, "Sat") == 0){week = 6;									// 星期六}else if(strcmp(pWeek, "Sun") == 0){week = 7;									// 星期天}return week;
}/**@brief 检查几月份@param pMonth -[in] 待检测字符串@return 几月份
*/
static uint8 ICACHE_FLASH_ATTR
checkWahtMonth(char *pMonth)
{if(!pMonth){return 0;}uint8 month;if(strcmp(pMonth, "Jan") == 0){month = 1;									// 一月}else if(strcmp(pMonth, "Feb") == 0){month = 2;									// 二月}else if(strcmp(pMonth, "Mar") == 0){month = 3;									// 三月}else if(strcmp(pMonth, "Apr") == 0){month = 4;									// 四月}else if(strcmp(pMonth, "May") == 0){month = 5;									// 五月}else if(strcmp(pMonth, "Jun") == 0){month = 6;									// 六月}else if(strcmp(pMonth, "Jul") == 0){month = 7;									// 七月}else if(strcmp(pMonth, "Aug") == 0){month = 8;									// 八月}else if(strcmp(pMonth, "Sep") == 0){month = 9;									// 九月}else if(strcmp(pMonth, "Oct") == 0){month = 10;									// 十月}else if(strcmp(pMonth, "Nov") == 0){month = 11;									// 十一月}else if(strcmp(pMonth, "Dec") == 0){month = 12;									// 十二月}return month;
}/**@brief 检查几日@param pDay -[in] 待检测字符串@return 几日
*/
static uint8 ICACHE_FLASH_ATTR
checkWahtDay(char *pDay)
{if(!pDay){return 0;}uint8 day = (*pDay & 0x0f) << 4;day = day | (*(pDay+1) & 0x0f);return day;
}/**@brief 检查几时@param pHour -[in] 待检测字符串@return 几时
*/
static uint8 ICACHE_FLASH_ATTR
checkWahtHour(char *pHour)
{if(!pHour){return 0;}uint8 hour = (*pHour & 0x0f) << 4;hour = hour | (*(pHour+1) & 0x0f);return hour;
}/**@brief 检查几分@param pMinute -[in] 待检测字符串@return 几分
*/
static uint8 ICACHE_FLASH_ATTR
checkWahtMinute(char *pMinute)
{if(!pMinute){return 0;}uint8 minute = (*pMinute & 0x0f) << 4;minute = minute | (*(pMinute+1) & 0x0f);return minute;
}/**@brief 检查几秒@param pSecond -[in] 待检测字符串@return 几秒
*/
static uint8 ICACHE_FLASH_ATTR
checkWahtSecond(char *pSecond)
{if(!pSecond){return 0;}uint8 second = (*pSecond & 0x0f) << 4;second = second | (*(pSecond+1) & 0x0f);return second;
}/**@brief 检查几年@param pYear -[in] 待检测字符串@return 几年
*/
static uint8 ICACHE_FLASH_ATTR
checkWahtYear(char *pYear)
{if(!pYear){return 0;}uint8 year = (*(pYear+2) & 0x0f) << 4;year = year | (*(pYear+3) & 0x0f);return year;
}

五、使用方法

首先,在 user_main.cuser_init() 中调用 SNTP_Init() 初始化。

void ICACHE_FLASH_ATTR
user_init(void)
{···SNTP_Init();														// SNTP服务初始化···
}

在其他地方调用 GetSntpTime() 获取时间

uint8 time[25];
GetSntpTime(time);
os_printf("%s\n", time);

获取到时间格式为:
2019-07-31 17:01:01


• 由 Leung 写于 2019 年 7 月 31日

• 参考:esp8266_SNTP时间获取处理成BCD码
    ESP8266 Non-OS SDK API参考[7qq6]


http://chatgpt.dhexx.cn/article/VI8WbagP.shtml

相关文章

ESP32 SNTP配置

SNTP&#xff0c;Simple Network Time Protocol&#xff08;简单网络时间协议&#xff09;&#xff0c;用来同步时钟。 百度百科&#xff1a;SNTP SNTP协议采用客户端/服务器的工作方式&#xff0c;可以采用单播&#xff08;点对点&#xff09;或者广播&#xff08;一点对多点&…

通过sntp同步系统时间

通过sntp同步系统时间 小型物联网设备&#xff0c;很少有接口提供给用户进行数据交互&#xff0c;那么我们设备的系统时间只能够通过获取网络时间后&#xff0c;再更新到本地。那么&#xff0c;就少不了使用sntp协议。 ntp协议&#xff1a;NTP(Network Time Protocol&#xff…

2012系统sntp服务器,如何设置SNTP服务器,实现同步PLC时钟

在过程/生产自动化系统构架和运行时&#xff0c;有时需要实现对时间的精确控制&#xff0c;即系统中所有子系统(包括设备等)的时间必须保持同步。 作为自动化系统组成部分的 以Windows 7操作系统为例&#xff0c;将PC机配置为SNTP服务器端的操作步骤&#xff1a; [注意]操作前前…

ESP32学习笔记(41)——SNTP接口使用

一、SNTP简介 简单网络时间协议&#xff08;Simple Network Time Protocol&#xff09;&#xff0c;由 NTP 改编而来&#xff0c;主要用来同步因特网中的计算机时钟。 SNTP 协议是用来同步本地的时间到 unix 时间戳。通常嵌入式设备上电&#xff0c;连接 AP(access point)&…

物联网专题27:SNTP

什么是SNTP&#xff08;Simple Network Time Protocol&#xff09;&#xff1f;简单时钟控制协议&#xff0c;主要用来同步因特网中的计算机时钟。 SNTP&#xff0c;使用的默认端口号是 UDP123。 ESP8266中&#xff0c;SNTP相关的API&#xff1a; 1 设置SNTP服务器&#xff08…

ESP8266-----SNTP获取网络时间

目录 前言 user_init IP定时的回调函数 初始化SNTP SNTP定时回调函数 前言 介绍了8266如何获取网络时间 user_init 首先将8266设置为sta模式 void ICACHE_FLASH_ATTR user_init(void) {uart_init(115200,115200); // 初始化串口波特率os_delay_us(10000); // 等待串口…

微软 sntp服务器地址,电脑sntp服务器地址

电脑sntp服务器地址 内容精选 换一换 当创建文件系统后&#xff0c;您需要使用云服务器来挂载该文件系统&#xff0c;以实现多个云服务器共享使用文件系统的目的。本章节以Windows 2012版本操作系统为例进行NFS文件系统挂载&#xff0c;其他版本请参考以下主要步骤根据实际界面…

ESP32 SNTP设置

SNTP&#xff0c;Simple Network Time Protocol&#xff08;简单网络时间协议&#xff09;&#xff0c;用来同步时钟。 百度百科&#xff1a;[SNTP](https://baike.baidu.com/item/sntp/4749147?fraladdin) SNTP协议采用客户端/服务器的工作方式&#xff0c;可以采用单播&…

sntp服务器位置,sntp的服务器地址

sntp的服务器地址 内容精选 换一换 介绍常见的安全组配置示例。如下示例中,出方向默认全通,仅介绍入方向规则配置方法。不同安全组内的云耀云服务器内网互通仅允许特定 IP 地址远程连接云耀云服务器SSH远程连接Linux云耀云服务器RDP远程连接Windows云服务器公网ping云耀云服务…

sntp 校时问题

1、背景 由于项目中的数据对时间比较敏感&#xff0c;目前常常出现校时问题&#xff0c;导致时间偏差&#xff0c;出现曲线数据丢失和曲线数据重复等问题。 因此对sntp源码进行深入分析。 要了解SNTP&#xff0c;首先需要了解NTP协议。SNTP是NTP的子集&#xff0c;简化了NTP…

ESP8266_SNTP(Simple Network Time Protocol)

1、SNTP 简单网络时间协议 SNTP协议采用客户端/服务器的工作方式&#xff0c;以UDP方式通信&#xff0c;SNTP服务器通过接收GPS信号或自带的原子钟作为系统的时间基准。 网络中存在很多台SNTP服务器&#xff0c;客户端会选择几台SNTP服务器使用。如果一台SNTP服务器在工作过程…

WIFI学习六(SNTP)

简介 SNPT&#xff08;Simple Network Time Protocal简单网络时间协议&#xff09;用于跨广域网或局域网时间同步的协议&#xff0c;具有较高的精确度&#xff08;几十毫秒&#xff09;。SNTP是NTP协议的简化版 SNTP的工作方式 SNTP协议采用客户端/服务器的工作方式&#xff0…

SNTP简介

要了解SNTP&#xff0c;首先需要了解NTP协议。SNTP是NTP的子集&#xff0c;简化了NTP的许多算法和步骤&#xff0c;得到了效率&#xff0c;但时间的精度不如NTP&#xff0c;可是对于民用时间来说足够了&#xff0c;大概最多差距几秒的样子。 NTP&#xff08;Network Time Proto…

SNTP原理讲解 客户端 C语言实现

1.定义 SNTP(Simple Network Time Protocal简单网络时间协议)&#xff0c;用于跨广域网或局域网同步时间的协议&#xff0c;具有较高的精确度&#xff08;几十毫秒&#xff09; 这里给出SNTP的详细定义和解释&#xff0c;以及基于C语言的SNTP客户端实现代码&#xff1a;SNTP c…

使用SNTP协议获取时间

要了解SNTP,首先需要了解NTP协议。SNTP是NTP的子集,简化了NTP的许多算法和步骤,得到了效率,但时间的精度不如NTP,可是对于民用时间来说足够了,大概最多差距几秒的样子。 NTP(Network Time Protocol,网络时间协议)是由RFC 1305定义的时间同步协议,用来在分布式时间服…

sntp协议简介

SNTP(Simple Network Time Protocal简单网络时间协议)&#xff0c;用于跨广域网或局域网同步时间的协议&#xff0c;具有较高的精确度&#xff08;几十毫秒&#xff09;。SNTP是NTP协议的简化版&#xff0c;两者分别在RFC1305和RFC2030介绍。 SNTP工作方式 SNTP采用客户端/服务…

关于马尔可夫过程的一些学习笔记

①马尔可夫性质&#xff1a;已知“现在”的情况下&#xff0c;“未来”与“过去”彼此独立&#xff08;N1仅与N有关&#xff0c;与N以前的所有都无关&#xff09; ②马尔可夫过程&#xff1a;具有马尔可夫性质的随机过程 ③马尔可夫链&#xff1a;马尔可夫过程的原始模型&…

来聊聊马尔可夫过程

相信你对马尔科夫这个词一定不陌生&#xff0c;因为在人工智能机器学习领域&#xff0c;这个词是避不开的&#xff0c;如马尔可夫链&#xff08;Markov chain)&#xff0c;马尔科夫随机场(Markov random field)&#xff0c;马尔可夫过程(Markov process)&#xff0c;隐马尔可夫…

【算法学习】马尔可夫过程及经典例题讲解(含代码实现)

公众号关注 52DATA &#xff0c;获得更多数据分析知识,感谢支持—> 文章目录 马尔可夫过程1. 马尔可夫性2. 马尔可夫链2.1 转移概率矩阵&#xff08;随机矩阵&#xff09;2.2 状态概率2.3 平稳分布 3.一个很经典的例题帮助理解马尔科夫预测方法1.求状态转移概率2.运用状态概…

数学基础(8)-- 马尔可夫链与马尔可夫过程

目录 1. 简介 1.1 定义 1.2 变种 2. 瞬态演变 3. 马尔科夫链性质 3.1 可还原性 3.2 周期性 3.3 重现性 4. 有限状态空间 1. 简介 马尔可夫链&#xff08;英语&#xff1a;Markov chain&#xff09;&#xff0c;又称离散时间马可夫链&#xff08;discrete-time Markov…