用74HC595驅動8個數碼管,通過ESP32獲取網絡時間并顯示!
51hei圖片_20220617135526.jpg (64.77 KB, 下載次數: 36)
下載附件
運行實物
2022-6-17 13:55 上傳
A1.PNG (101.46 KB, 下載次數: 33)
下載附件
代碼截圖
2022-6-17 13:51 上傳
源程序如下:
- #include <WiFi.h>
- #include <Arduino.h>
- #include<time.h>
- #include <WebServer.h>
- #include "disp.h"
- #define NTP1 "ntp1.aliyun.com"
- #define NTP2 "ntp2.aliyun.com"
- #define NTP3 "ntp3.aliyun.com"
- //填寫WIFI入網信息
- String str =
- "<!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>";
- bool gang=0;
- int yys888=0;
- const char* ssid = "CMCC-M9JR";
- const char* password = "a3n6v83c";
- int ss=0,hh=0,mm=0;
- WebServer server(80);
- void setClock() {
- struct tm timeinfo;
- if (!getLocalTime(&timeinfo))
- {//如果獲取失敗,就開啟聯網模式,獲取時間
- Serial.println("Failed to obtain time");
- WiFi.disconnect(false);
- WiFi.mode(WIFI_STA);//開啟網絡
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(500);
- Serial.print(".");
- }
- configTime(8 * 3600, 0, NTP1, NTP2,NTP3);
- return;
- }
- // Serial.println(&timeinfo, "%F %T %A"); // 格式化輸出:2021-10-24 23:00:44 Sunday
- // Serial.print(asctime(&timeinfo));//默認打印格式:Mon Oct 25 11:13:29 2021
- //String iii=asctime(&timeinfo);
- //String hhhn=iii.substring( 17,20 ) ;
- //qq=hhhn.toInt();
- // WiFi.disconnect(true);
- }
- void handleRoot() {
- server.send(200, "text/html", str);
- }
- void HandleVal()
- {
- String wifis = server.arg("ssid");
- String wifip = server.arg("password");
- yys888=wifip.toInt();
- if (wifis=="yys") gang=1;
- else gang=0;
-
- Serial.println(wifis);
- Serial.println(wifip);
- //WiFi.begin(wifis,wifip);
- // WiFi.begin(wifis.c_str(),wifip.c_str());
- }
- void handleNotFound() {
- // digitalWrite(LED_BUILTIN, 0);
- String message = "File Not Found\n\n";
- message += "URI: ";
- message += server.uri();
- message += "\nMethod: ";
- message += (server.method() == HTTP_GET) ? "GET" : "POST";
- message += "\nArguments: ";
- message += server.args();
- message += "\n";
- for (uint8_t i = 0; i < server.args(); i++) {
- message += " " + server.argName(i) + ": " + server.arg(i) + "\n";
- }
- server.send(404, "text/plain", message);
- // digitalWrite(LED_BUILTIN, 1);
- }
- void setup()
- {
- pinMode(latchPin,OUTPUT);
- pinMode(clockPin,OUTPUT);
- pinMode(dataPin,OUTPUT);
- Serial.begin(115200);
- Serial.println();
- //設置ESP32工作模式為無線終端模式
- WiFi.mode(WIFI_STA);
- WiFi.begin(ssid, password);
- while (WiFi.status() != WL_CONNECTED)
- {
- delay(500);
- Serial.print(".");
- }
- Serial.println("WiFi connected!");
- configTime(8 * 3600, 0, NTP1, NTP2,NTP3);
- setClock();
-
- Serial.println(ssid);
- Serial.print("IP address: ");
- Serial.println(WiFi.localIP());
- // 從網絡時間服務器上獲取并設置時間
- // 獲取成功后芯片會使用RTC時鐘保持時間的更新
- // server.on("/HandleVal", HTTP_GET, HandleVal);
- // server.onNotFound(handleNotFound);
- // WiFi.disconnect(true);
- // WiFi.mode(WIFI_OFF);//關閉網絡
- // Serial.println("WiFi disconnected!-----");
- server.on ("/", HTTP_GET, handleRoot); // 綁定‘/pin’地址到handlePin方法處理
- server.on("/HandleVal", HTTP_GET, HandleVal);
- server.onNotFound(handleNotFound);
-
- server.begin();
- Serial.println("HTTP server started");
- }
- void disptime()
- {
-
- if(gang==0){
-
- disp(3,10);disp(6,10);
- disp2(1,hh);
- disp2(4,mm);
- disp2(7,ss);
- }
- else if (gang==1)
- {
- if(ss>30)
- disp2(1,yys888);
- else
- disp2(5,yys888);
- }
- }
- void getClock() {
- struct tm timeinfo2;
- if (!getLocalTime(&timeinfo2))
- {
- }
- String iii=asctime(&timeinfo2);
- String hhhn=iii.substring( 17,20 ) ; //21:35:38
- ss=hhhn.toInt();
- String hhhn1=iii.substring( 14,17 ) ;
- mm=hhhn1.toInt();
- String hhhn2=iii.substring( 11,14 ) ;
- hh=hhhn2.toInt();
- disptime();
- }
- void loop()
- {
- //setClock();
- getClock();
- server.handleClient();
- }
復制代碼
DISP.H頭文件:
- #ifndef DISP_H_
- #define DISP_H_
- int clockPin=22;
- int latchPin=23;
- int dataPin=21;
- int i,j;
- unsigned char num[]={0b00111111, //"0"
- 0x06, //"1"
- 0x5B, //"2"
- 0x4F, //"3"
- 0x66, //"4"
- 0x6D, //"5"
- 0X7D, //"6"
- 0X07, //"7"
- 0x7F, //"8"
- 0X6F, //"9"
- 0b01000000, //"-"
- 0,
- };
- unsigned char num1[]={0b11110111, //"1"
- 0b11111011, //"2"
- 0b11111101, //"3"
- 0b11111110, //"4"
- 0b01111111, //"5"
- 0b10111111, //"6"
- 0b11011111, //"7"
- 0b11101111, //"8"
- };
- void disp(unsigned char i,unsigned char j){
-
- shiftOut(dataPin,clockPin,LSBFIRST,num1[i-1]);
- shiftOut(dataPin,clockPin,MSBFIRST,num[j]);
- digitalWrite(latchPin, HIGH);
- delay(1);
- digitalWrite(latchPin,LOW);
- }
- void disp2(unsigned char k,int n){
- // int t=30;
- int ge=(int)n%10;
- int shi=((int)n/10)%10;
- int bai=((int)n/100)%10;
- int qian=((int)n/1000)%10;
- if(n<100)
- {
- disp(k,shi);
- disp(k+1,ge);
- }
- else
- {
- disp(k,qian);
- disp(k+1,bai);
- disp(k+2,shi);
- disp(k+3,ge);
- }
- }
- void cleardisp()
- {
- for(i=0;i<9;i++)
- {
- disp(i,11);
-
- }
- }
- #endif
復制代碼
|