
6-4-自动对时的电子时钟.docx
9页- hlfhlirl. 『W I lnlu4.直接上程序源码吧,大家试着读一读:#include
#include char ssid[] = "ChinaNet-xxVP"; // your network SSID (name)char pass[] = "123456789"; // your network passwordIPAddress timeServerIP; // time.nist.gov NTP server addressconst char* ntpServerName = "图中的网址";unsigned int localPort = 2390; // local port to listen for UDP packetsconst int NTP_PACKET_SIZE = 48; // NTP time stamp is in the first 48 bytes of the message byte packetBuffer[ NTP_PACKET_SIZE]; //buffer to hold incoming and outgoing packetsWiFiUDP udp;void setup() {Serial.begin(115200);Serial.println();Serial.println();// We start by connecting to a WiFi networkSerial.print("Connecting to ");Serial.println(ssid);WiFi.mode(WIFI_STA);WiFi.begin(ssid, pass);while (WiFi.status() != WL_CONNECTED) {delay(500);Serial.print(".");}Serial.println("");Serial.println("WiFi connected");Serial.println("IP address: ");Serial.println(WiFi.localIP());Serial.println("Starting UDP");udp.begin(localPort);Serial.print("Local port: ");Serial.println(udp.localPort());} void loop() {//get a random server from the poolWiFi.hostByName(ntpServerName, timeServerIP);sendNTPpacket(timeServerIP);delay(1000);int cb = udp.parsePacket();if (!cb) {Serial.println("no packet yet");} else {udp.read(packetBuffer, NTP_PACKET_SIZE); // read the packet into the bufferunsigned long highWord = word(packetBuffer[40], packetBuffer[41]);unsigned long lowWord = word(packetBuffer[42], packetBuffer[43]);unsigned long epoch = highWord << 16 | lowWord;Serial.print("Seconds since Jan 1 1900 = ");Serial.println(epoch);int t = (epoch % 86400L) / 3600;int m = (epoch % 3600) / 60;int s = epoch % 60;String str=String(t) + ":";if(m<10) str += "0";str += String(m);str += ":";if(s<10) str += "0";str += String(s);Serial.print("The UTC time is ");Serial.println(str);delay(10000);}// send an NTP request to the time server at the given address void sendNTPpacket(IPAddress& address) {Serial.println("sending NTP packet...");// set all bytes in the buffer to 0memset(packetBuffer, 0, NTP_PACKET_SIZE);// Initialize values needed to form NTP request// (see URL above for details on the packets)packetBuff。
章节目录第一章 百度AI智能识别技术第二章 人脸识别技术第三章 Arduino 基础学习第四章 Arduino 进阶学习第五章 IOT 物联网第六章 WIFI与Arduino的结合第七章 阿里云IOT服务第八章 百度天工物联网第九章 APPInventor制作APP第十章 自己做的七七八八第^一章制作APPInventor自定义插件第十二章 实现局域网连接第十三章 项目应用——小学生百度天工第十四章 项目应用一一ESP32-cam摄像头模块第十五章 项目应用一一ESP32-cam摄像头模块二第十六章 项目应用一一WIFI模块手动配网第十七章 项目应用——红纳里斯的跨阵 M1第十八章 项目应用一一OLED液晶屏插件6-4-自动对时的电子时钟我们还记得之前用1602液晶屏和 DS1302 时钟模块,做过一个电子时钟吗? 我们在每次开始时,都要先给时钟调整时间今天我们如果用WeMos D1 UNO模块来做电子时钟,就不用调整时间了,就 像现在的都有的功能一样,只要我们通过WiFi连接上网,就可以从网上得到一 个标准时间,有了这个标准时间,我们就不用手动去调整时钟的时间啦这个就是 自动网络调时的功能。
一. 利用 NTP 库文件自动对时要获得网络时间,最简单的办法是利用NTP库文件我们需要在Arduino IDE中添加NTP的库文件如图“项目——加载库——管理库”打开库管理器,输入NTP稍等一会儿,就会出现 NTPClient 的库,点击信息,会出现版本号和安装按钮直接点击安装安装完成后,我们可以打开“文件——示例——NTPClient——bask"的示例文件,把这个文件编译,烧写到WiFi模块中,会在串口监视器中看到有时间打印出 来了这个时间是世界标准时间(0 时区,格林威治时间),如果是北京时间还要 加上 8 小时程序代码非常简单,就短短几行而已:#include
我们不用加载NTP 的库文件,也可以自己根据NTP的连接协议,自己写一个程序来获取日期NTP(Network Time Protocol)网络时间协议基于UDPESP8266也可以通过 建立与NTP服务的连接,来获取实时时间先看效果图把,把程序烧写到WiFi模块中,可以在串口监视器中看到网络标准时间:程序每隔10秒,会连接一次NTP服务器;会获得一个数字3794882565,这个是从1900年1月1日到现在经过的时间, 以秒为单位经过换算得到时间是 6 :02 : 45这个是世界标准时间,如果是北京时间还 要加上 8 小时我们这次只有换算时间,没有换算日期,如果需要也可以从上面的数字中算出日期来简单说一下换算的方法:一天有24小时,就是24 * 3600 = 86400 秒;3794882565 / 86400 = 43922 天 ... ... 21765 秒计算时间方法:21765 秒 = 6 小时 2 分钟 45 秒计算日期方法:从 1900-01-01 到 2019-12-31 一共是 43829 天(这期间有 29 个闰年)43922 - 42829 = 93 天,也就是2020年已经过了93天。
这样 1 月 31 天、2 月 29 天、3 月 31 天,又 2 天所以从 1900-01-01 再过了 43922天,又 6 小时 2 分钟 45 秒正好是 2020-04-03 的 14 时 2 分 45 秒(北京时间要加 8 小时)编写程序就是这样,一丝一毫都不能放过,都要计算得清清楚楚的■ 1^1 «:"FW'7*4dSir I u. r mUnll ir i DJ:5m I <1 REi'iXCSiuAii*攻 ucr :'Eid[- ka[UfLddriJf KrcJ*;Snr i il jrarrl Clacil |wrli al jrin|ln,uli LmlTHJK;Hhri hflElE^HAM IkCpSWHllMa !:IMwHTVMfXF:■ 丄■HolITf .n: t+1」:U«d wTliHi IF I ”*h・ QCWi:i «
