使用ESP8266 WiFi module从NTP server获取时间8 p; j& M9 f- U/ F+ C0 w; F' _ 本次实验仅仅使用了AT指令 所以降低了编程难度 1.关于NTP的基本协议 可以参考Zero99的帖子4 I% C0 T' z1 ^ 3 D- d0 e% K$ D) }7 ]. s% E' { https://www.stmcu.org.cn/module/forum/thread-607936-1-1.html& @6 l) a g. s6 H* L) i 总结一下: NTP协议中计时时间 是从Jan/1/1900开始的。64bits长度的数据,高32bits是秒数,低32bits是秒的小数部分 3 r' O3 ~6 h, c/ x) `- u 1 U0 Q' C. g, E1 b' ^" W5 o 2.使用WiFi模块 和TTL-USB(USB转串口)正确的和WiFi模块相连; 要注意 GPIO0(片选pin)需要拉高 3.3V 使用5V会使EPS8266工作异常;0 s& M: d. a0 H7 ?/ r8 t, }4 j 因为本次使用AT指令的固件,所以在此之前要给WiFi模块烧录AT指令的固件。$ a& y7 {8 e8 Z1 l7 r/ U 硬件链接好之后打开串口助手,发送 AT 两个字符 WiFi模块会返回 OK。 这就说明模块正常工作了。 之后配置WiFi模块的工作模式 AT+CWMODE=3 把WiFi模块设置成SoftAP+station共存模式 AT+RST 重启生效 AT+CWJAP=”SSID”,”PASSWORD” // 链接router 链接成功 AT+CIPMUX=0 设置WiFi模块为单路链接 AT+CIPSTART="UDP","1.cn.pool.ntp.org",123 链接到NTP服务器 AT+CIPSEND=48 发送48byte的数据 返回OK > 然后以HEX的模式发送如下数据,数据大小为48bytes ! P1 X" @3 T+ W# P. j E3 00 06 EC 0000 00 00 00 00 00 00 31 4E 31 34 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 返回SEND OK 之后NTPserver返回报文 要用Hex模式 查看 大致为41 54 2B 43 4950 53 45 4E 44 3D 34 38 0D 0D 0A 0D 0A 4F 4B 0D 0A 3E 20E3 00 06 EC 00 00 00 00 00 00 00 00 31 4E 31 34 00 00 00 00 00 00 00 00 00 0000 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0D 0A 53 454E 44 20 4F 4B 0D 0A 0D 0A 2B 49 50 442C 34 38 3A 24 02 06 E9 00 00 05 ED 00 00 35 AD 82 85 01 0A DD 9C 6DA0 70 B1 3E D9 00 00 00 00 00 00 00 00 DD 9C 8B 43 41 AF 52 2F DD 9C 8B 43 41B0 74 89 0D 0A 4F 4B 0D0A 03 03 03) ?3 b4 V9 p1 T( ` 黄色背景为从1900/1/1到现在的秒数 8 ?: ]% S" s+ a: {$ m3. 给MCU 写程式 主要包括USART(用于和esp8266通讯) OLED(荧屏) DHT11程序(温湿度sensor) Timer(用于计算local time) 程式的大致思路是inital hardware->get time from NTP server->把网路时间换算 并且赋给当地时间->(timer IRQ)把local time累加->read DHT11->输出给荧屏时间和温湿度。 ) A% m7 G8 M8 y 源代码一个是F410RB的另一个是F103C8的 |
谢谢分享,刚好手上有个8266模块,已经可以读取时间了。 |
原创支持下! |
不错不错 |
多谢分享, |
刚好在摸索8266模块 感谢楼主分享 |
多谢分享 |
新人学习 |
多谢分享,正好在研究这方面的东西,刚好参考 |
感谢分享! |
好东西 |
需要找个 |
赞一个 正好需要 |