找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2126|回复: 1
收起左侧

ESP32获取网络时间并显示源程序 74HC595驱动8个数码管

[复制链接]
ID:1035380 发表于 2022-6-17 13:55 | 显示全部楼层 |阅读模式
用74HC595驱动8个数码管,通过ESP32获取网络时间并显示!

运行实物

运行实物

代码截图

代码截图


源程序如下:
  1. #include <WiFi.h>
  2. #include <Arduino.h>
  3. #include<time.h>
  4. #include <WebServer.h>
  5. #include "disp.h"
  6. #define NTP1  "ntp1.aliyun.com"
  7. #define NTP2  "ntp2.aliyun.com"
  8. #define NTP3  "ntp3.aliyun.com"
  9. //填写WIFI入网信息
  10. String str =
  11. "<!DOCTYPE html><html><head><meta charset=\"UTF-8\"><meta name=\"viewport\"content=\"width=device-width, initial-scale=1.0\"><meta http-equiv=\"X-UA-Compatible\"content=\"ie=edge\"><title>daodanjishui的ESP32网页配网</title></head><body><form name=\"my\">显示--:<input type=\"text\"name=\"s\"placeholder=\"输入yys\"id=\"aa\"><br>显示数字:<input type=\"number\"name=\"p\"placeholder=\"输入的会显示在数码管\"id=\"bb\"><br><input type=\"button\"value=\"确定\"onclick=\"wifi()\"></form><script language=\"javascript\">function wifi(){var ssid=my.s.value;var password=bb.value;var xmlhttp=new XMLHttpRequest();xmlhttp.open(\"GET\",\"/HandleVal?ssid=\"+ssid+\"&password=\"+password,true);xmlhttp.send()}</script></body></html>";
  12. bool gang=0;
  13. int yys888=0;
  14. const char* ssid = "CMCC-M9JR";
  15. const char* password = "a3n6v83c";
  16. int ss=0,hh=0,mm=0;
  17. WebServer server(80);
  18. void setClock() {
  19.   struct tm timeinfo;
  20.     if (!getLocalTime(&timeinfo))
  21.     {//如果获取失败,就开启联网模式,获取时间
  22.          Serial.println("Failed to obtain time");
  23.          WiFi.disconnect(false);
  24.          WiFi.mode(WIFI_STA);//开启网络  
  25.          WiFi.begin(ssid, password);
  26.          while (WiFi.status() != WL_CONNECTED)
  27.     {
  28.         delay(500);
  29.         Serial.print(".");
  30.     }
  31.      configTime(8 * 3600, 0, NTP1, NTP2,NTP3);
  32.         return;
  33.     }
  34.     // Serial.println(&timeinfo, "%F %T %A"); // 格式化输出:2021-10-24 23:00:44 Sunday
  35.     // Serial.print(asctime(&timeinfo));//默认打印格式:Mon Oct 25 11:13:29 2021

  36. //String iii=asctime(&timeinfo);

  37. //String hhhn=iii.substring( 17,20 ) ;
  38. //qq=hhhn.toInt();
  39.     // WiFi.disconnect(true);   
  40. }

  41. void handleRoot() {
  42.   server.send(200, "text/html", str);
  43. }
  44. void HandleVal()
  45. {
  46.     String wifis = server.arg("ssid");
  47.     String wifip = server.arg("password");
  48.     yys888=wifip.toInt();
  49.     if (wifis=="yys") gang=1;
  50.     else gang=0;
  51.    
  52.     Serial.println(wifis);
  53.     Serial.println(wifip);
  54.     //WiFi.begin(wifis,wifip);
  55.   //  WiFi.begin(wifis.c_str(),wifip.c_str());
  56. }

  57. void handleNotFound() {
  58. // digitalWrite(LED_BUILTIN, 0);
  59.   String message = "File Not Found\n\n";
  60.   message += "URI: ";
  61.   message += server.uri();
  62.   message += "\nMethod: ";
  63.   message += (server.method() == HTTP_GET) ? "GET" : "POST";
  64.   message += "\nArguments: ";
  65.   message += server.args();
  66.   message += "\n";
  67.   for (uint8_t i = 0; i < server.args(); i++) {
  68.     message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
  69.   }
  70.   server.send(404, "text/plain", message);
  71. // digitalWrite(LED_BUILTIN, 1);
  72. }

  73. void setup()
  74. {
  75.       pinMode(latchPin,OUTPUT);
  76.       pinMode(clockPin,OUTPUT);
  77.       pinMode(dataPin,OUTPUT);   
  78.       Serial.begin(115200);
  79.       Serial.println();
  80.       //设置ESP32工作模式为无线终端模式
  81.      WiFi.mode(WIFI_STA);
  82.      WiFi.begin(ssid, password);
  83.     while (WiFi.status() != WL_CONNECTED)
  84.     {
  85.         delay(500);
  86.         Serial.print(".");
  87.     }
  88.     Serial.println("WiFi connected!");
  89.     configTime(8 * 3600, 0, NTP1, NTP2,NTP3);
  90.     setClock();
  91.       
  92.   Serial.println(ssid);
  93.   Serial.print("IP address: ");
  94.   Serial.println(WiFi.localIP());
  95.     // 从网络时间服务器上获取并设置时间
  96.     // 获取成功后芯片会使用RTC时钟保持时间的更新
  97.    // server.on("/HandleVal", HTTP_GET, HandleVal);
  98.    // server.onNotFound(handleNotFound);
  99.   //  WiFi.disconnect(true);
  100.   // WiFi.mode(WIFI_OFF);//关闭网络
  101.   //  Serial.println("WiFi disconnected!-----");  

  102. server.on ("/", HTTP_GET, handleRoot); // 绑定‘/pin’地址到handlePin方法处理
  103. server.on("/HandleVal", HTTP_GET, HandleVal);
  104. server.onNotFound(handleNotFound);

  105.   server.begin();
  106.   Serial.println("HTTP server started");
  107. }

  108. void disptime()
  109. {
  110.   

  111. if(gang==0){

  112. disp(3,10);disp(6,10);
  113. disp2(1,hh);
  114. disp2(4,mm);
  115. disp2(7,ss);
  116. }
  117. else if (gang==1)
  118.     {  
  119.       if(ss>30)
  120.       disp2(1,yys888);
  121.       else
  122.       disp2(5,yys888);   
  123.      }
  124.   }

  125. void getClock() {
  126.   struct tm timeinfo2;
  127.     if (!getLocalTime(&timeinfo2))
  128.     {

  129.     }
  130. String iii=asctime(&timeinfo2);
  131. String hhhn=iii.substring( 17,20 ) ;   //21:35:38
  132. ss=hhhn.toInt();
  133. String hhhn1=iii.substring( 14,17 ) ;
  134. mm=hhhn1.toInt();
  135. String hhhn2=iii.substring( 11,14 ) ;
  136. hh=hhhn2.toInt();
  137. disptime();

  138. }


  139. void loop()
  140. {
  141.   //setClock();
  142. getClock();
  143. server.handleClient();

  144. }
复制代码

DISP.H头文件:
  1. #ifndef DISP_H_
  2. #define DISP_H_

  3. int clockPin=22;
  4. int latchPin=23;
  5. int dataPin=21;
  6. int i,j;
  7. unsigned char num[]={0b00111111, //"0"
  8.                      0x06, //"1"
  9.                      0x5B, //"2"
  10.                      0x4F, //"3"
  11.                      0x66, //"4"
  12.                      0x6D, //"5"
  13.                      0X7D, //"6"
  14.                      0X07, //"7"
  15.                      0x7F, //"8"
  16.                      0X6F,  //"9"
  17.                      0b01000000, //"-"
  18.                      0,
  19. };
  20. unsigned char num1[]={0b11110111, //"1"
  21.                       0b11111011, //"2"
  22.                       0b11111101, //"3"
  23.                       0b11111110, //"4"
  24.                       0b01111111, //"5"
  25.                       0b10111111, //"6"
  26.                       0b11011111, //"7"
  27.                       0b11101111, //"8"
  28. };
  29. void disp(unsigned char i,unsigned char j){
  30.       
  31.       shiftOut(dataPin,clockPin,LSBFIRST,num1[i-1]);
  32.       shiftOut(dataPin,clockPin,MSBFIRST,num[j]);
  33.       digitalWrite(latchPin, HIGH);
  34.       delay(1);
  35.       digitalWrite(latchPin,LOW);  
  36. }
  37. void disp2(unsigned char k,int n){
  38. // int t=30;
  39.   int ge=(int)n%10;
  40.   int shi=((int)n/10)%10;
  41.   int bai=((int)n/100)%10;
  42.   int qian=((int)n/1000)%10;
  43.   if(n<100)
  44.    {  
  45.     disp(k,shi);
  46.     disp(k+1,ge);
  47.     }
  48.   else
  49.   {
  50.     disp(k,qian);
  51.     disp(k+1,bai);
  52.     disp(k+2,shi);
  53.     disp(k+3,ge);
  54.   }
  55. }
  56. void cleardisp()
  57. {
  58.   for(i=0;i<9;i++)
  59.   {
  60.     disp(i,11);
  61.    
  62.     }
  63. }



  64. #endif
复制代码


评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:215984 发表于 2022-12-3 17:16 | 显示全部楼层
太好了,正在寻找网络时钟的制作方法!
谢谢楼主!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表