這是一款類似 HUD(抬頭顯示器,又稱平視顯示器)的時鐘,通過 WiFi 獲取當前時間。它基于 ESP32 控制器,使用四個常見的 8×8 點陣顯示單元,由 MAX7219 芯片驅動。
組件清單
8×8 點陣顯示單元(MAX7219)× 4
ESP32 微控制器 × 1
1mm 厚,165 x 75mm 亞克力板 × 1
3D 打印外殼
外殼打印沒有支撐,采用丙烯酸板。
具體數值為:W=165mm,H=75mm。
最后可使用啞光黑色油漆涂抹外殼。我使用了極低反射率的油漆(MUSOU BLACK),涂滿裝置和機身的上。
3D 打印文件,在項目文件庫中下載。
https://make.quwj.com/project/458
安裝 ESP32 微控制器
將 ESP32 微控制器連接到點陣顯示單元。將 MAX72XX 庫安裝到 Arduino IDE 中。
以我的項目為例,連接了 DIN-16、CS-17、CLK-21。源代碼中的連接是可變的。可見下文第115-117行。
#define CLK_PIN 21 // or SCK #define DATA_PIN 16 // or MOSI #define CS_PIN 17 // or SS
在源代碼中配置 WiFi。你也可以使用 SmartConfig 智能手機應用程序來執行此操作。
#define WIFI_SSID "SSID" // your WiFi's SSID #define WIFI_PASS "PASS" // your WiFi's password
將微控制器安裝到外殼的外部。當然,你也可以使用任何其他的微控制器。
時鐘文件,在項目文件庫中下載。
https://make.quwj.com/project/458
#include#include #include ////////////////////////////// // MAX7219 hardware configuration ////////////////////////////// #define BRIGHTNESS MAX_INTENSITY/2 #define HARDWARE_TYPE MD_MAX72XX::FC16_HW #define MAX_DEVICES 4 #define CLK_PIN 21 // or SCK #define DATA_PIN 16 // or MOSI #define CS_PIN 17 // or SS MD_MAX72XX mx = MD_MAX72XX(HARDWARE_TYPE, DATA_PIN, CLK_PIN, CS_PIN, MAX_DEVICES); // Arbitrary pins ////////////////////////////// // WiFi and NTP section ////////////////////////////// // switch between 24H (12 rotors) / 12H (10 rotors) #define HOUR12 false // NTP settings #define TIMEZONE 9 // timezone (GMT = 0, Japan = 9) #define NTP_SERVER "pool.ntp.org" #define WIFI_SMARTCONFIG false #if !WIFI_SMARTCONFIG // if you do not use smartConfifg, please specify SSID and password here #define WIFI_SSID "SSID_HERE" // your WiFi's SSID #define WIFI_PASS "PASS_HERE" // your WiFi's password #endif void getNTP(void) { for(int i = 0; WiFi.status() != WL_CONNECTED; i++) { if(i > 30) { ESP.restart(); } Serial.println("Waiting for WiFi connection.."); delay(1000); } configTime(TIMEZONE * 3600L, 0, NTP_SERVER); printLocalTime(); } void printLocalTime() { struct tm timeinfo; if (!getLocalTime(&timeinfo)) { Serial.println("Failed to obtain time"); return; } Serial.println(&timeinfo, "%A, %Y-%m-%d %H:%M:%S"); } void wifiSetup() { int wifiMotion = 400; // while wainting for wifi, large motion int smatconfigMotion = 100; // while wainting for smartConfig, small motion WiFi.mode(WIFI_STA); #if WIFI_SMARTCONFIG WiFi.begin(); #else WiFi.begin(WIFI_SSID, WIFI_PASS); #endif showText("WiFi.."); for (int i = 0; ; i++) { Serial.println("Connecting to WiFi..."); delay(1000); if (WiFi.status() == WL_CONNECTED) { break; } #if WIFI_SMARTCONFIG if(i > 6) break; #endif } #if WIFI_SMARTCONFIG if (WiFi.status() != WL_CONNECTED) { WiFi.mode(WIFI_AP_STA); WiFi.beginSmartConfig(); //Wait for SmartConfig packet from mobile Serial.println("Waiting for SmartConfig."); while (!WiFi.smartConfigDone()) { Serial.print("."); showText("SmCfg"); delay(1000); mx.clear(); delay(500); } Serial.println(""); Serial.println("SmartConfig received."); //Wait for WiFi to connect to AP Serial.println("Waiting for WiFi"); showText("WiFi"); while (WiFi.status() != WL_CONNECTED) { delay(1000); Serial.print(","); } mx.clear(); delay(500); } Serial.println("WiFi Connected."); #endif Serial.print("SSID: "); Serial.println(WiFi.SSID()); Serial.print("IP Address: "); Serial.println(WiFi.localIP()); } void setup() { Serial.begin(115200); Serial.println("start"); mx.begin(); mx.control(MD_MAX72XX::INTENSITY, BRIGHTNESS); mx.control(MD_MAX72XX::UPDATE, MD_MAX72XX::ON); mx.clear(); wifiSetup(); getNTP(); // get current time } void showText(char *message) { char *p = message; uint8_t charWidth; uint8_t cBuf[8]; // this should be ok for all built-in fonts int sum = -2; mx.clear(); while (*p != '?') { charWidth = mx.getChar(*p++, sizeof(cBuf) / sizeof(cBuf[0]), cBuf); mx.transform(MD_MAX72XX::TSL); mx.transform(MD_MAX72XX::TSL); // double column space for (uint8_t i=0; i = 0; i--) { mx.control(MD_MAX72XX::INTENSITY, i); delay(50); } showText(txt); for(int i = 0; i <= BRIGHTNESS; i++) { mx.control(MD_MAX72XX::INTENSITY, i); delay(50); } if(tmtime.tm_hour != prevhour) { // get current time via NTP every 6 hours if(tmtime.tm_hour % 6 == 0) getNTP(); prevhour = tmtime.tm_hour; } }
完成
將顯示單元安裝到位并插入亞克力板,整個項目就完成了。
via instructables.com/HUD-like-WiFi-Sync-Clock-Transparent-Dot-Matrix-Di/
-
微控制器
+關注
關注
48文章
7650瀏覽量
152111 -
led
+關注
關注
242文章
23356瀏覽量
663200 -
顯示器
+關注
關注
21文章
5010瀏覽量
140407 -
數字時鐘
+關注
關注
2文章
151瀏覽量
20447 -
ESP32
+關注
關注
18文章
978瀏覽量
17529
原文標題:ESP32 + LED 點陣 DIY 透明面板的數字時鐘
文章出處:【微信號:趣無盡,微信公眾號:趣無盡】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論