0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ESP32+LED点阵DIY透明面板的数字时钟

jf_zGNBEhbi 来源:趣无尽 2023-04-27 10:42 次阅读

这是一款类似 HUD(抬头显示器,又称平视显示器)的时钟,通过 WiFi 获取当前时间。它基于 ESP32 控制器,使用四个常见的 8×8 点阵显示单元,由 MAX7219 芯片驱动。

组件清单
8×8 点阵显示单元(MAX7219)× 4
ESP32 微控制器 × 1
1mm 厚,165 x 75mm 亚克力板 × 1

3D 打印外壳

24379a26-e465-11ed-ab56-dac502259ad0.jpg

外壳打印没有支撑,采用丙烯酸板。
具体数值为:W=165mm,H=75mm。

24406098-e465-11ed-ab56-dac502259ad0.jpg

最后可使用哑光黑色油漆涂抹外壳。我使用了极低反射率的油漆(MUSOU BLACK),涂满装置和机身的上。

3D 打印文件,在项目文件库中下载
https://make.quwj.com/project/458

安装 ESP32 微控制器

24470880-e465-11ed-ab56-dac502259ad0.jpg

将 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;
  }
}

完成

2452d32c-e465-11ed-ab56-dac502259ad0.jpg

将显示单元安装到位并插入亚克力板,整个项目就完成了。

via instructables.com/HUD-like-WiFi-Sync-Clock-Transparent-Dot-Matrix-Di/

审核编辑:汤梓红
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 微控制器
    +关注

    关注

    48

    文章

    7482

    浏览量

    151012
  • led
    led
    +关注

    关注

    240

    文章

    23128

    浏览量

    658257
  • 显示器
    +关注

    关注

    21

    文章

    4940

    浏览量

    139803
  • 数字时钟
    +关注

    关注

    2

    文章

    150

    浏览量

    20307
  • ESP32
    +关注

    关注

    17

    文章

    955

    浏览量

    17068

原文标题:ESP32 + LED 点阵 DIY 透明面板的数字时钟

文章出处:【微信号:趣无尽,微信公众号:趣无尽】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    基于ESP32制造有趣的超级马里奥主题时钟

    这是一款超级马里奥主题的时钟,基于 ESP32 和彩色点阵制造,非常生动有趣。使用 ESP32 来控制 LED 矩阵。对于没法自制 PCB
    的头像 发表于 10-28 11:54 4451次阅读
    基于<b class='flag-5'>ESP32</b>制造有趣的超级马里奥主题<b class='flag-5'>时钟</b>

    DIY设计ESP32盾牌

    描述Otto DIY ESP32 盾牌专为 Otto DIY 设计,但可用作任何 ESP32 项目或伺服板PCB
    发表于 08-09 07:37

    LED点阵多功能数字时钟V2.1版

    0 0730LED点阵多功能数字时钟V2.1版 20140314.zip
    发表于 12-30 14:03 0次下载

    如何使用ESP32和Bluetooth模块闪烁LED

    在本教程中,将LED的阳极连接到ESP32的p21,LED的阴极连接到ESP32的GND
    的头像 发表于 10-05 17:50 8942次阅读
    如何使用<b class='flag-5'>ESP32</b>和Bluetooth模块闪烁<b class='flag-5'>LED</b>

    基于linkboy+ESP32的创意DIY时钟设计

    以linkboy为编程平台,创意DIY时钟数字时钟、电子日历、指针式时钟,想要哪种做哪种!linkboy支持程序仿真,助你无实物也能验证
    的头像 发表于 03-14 08:56 7281次阅读
    基于linkboy+<b class='flag-5'>ESP32</b>的创意<b class='flag-5'>DIY</b><b class='flag-5'>时钟</b>设计

    基于Esp8266的多功能点阵时钟

    至于我个人的理念就是做一个极简的点阵时钟出来, 在拥有更多其他的功能之外,要满足它最最核心的功能(时钟,误差低),其次就是拥有更多的功能,更简单的交互,再者就是成本要低,希望想自己diy
    的头像 发表于 05-13 14:38 2267次阅读

    Diy Esp32 Adafruit羽毛Pcb

    电子发烧友网站提供《Diy Esp32 Adafruit羽毛Pcb.zip》资料免费下载
    发表于 07-04 14:37 4次下载
    <b class='flag-5'>Diy</b> <b class='flag-5'>Esp32</b> Adafruit羽毛Pcb

    DIY ESP32模块

    电子发烧友网站提供《DIY ESP32模块.zip》资料免费下载
    发表于 07-04 14:22 8次下载
    <b class='flag-5'>DIY</b> <b class='flag-5'>ESP32</b>模块

    Diy Esp32 Youtube订阅者计数器

    电子发烧友网站提供《Diy Esp32 Youtube订阅者计数器.zip》资料免费下载
    发表于 07-04 14:19 4次下载
    <b class='flag-5'>Diy</b> <b class='flag-5'>Esp32</b> Youtube订阅者计数器

    Diy ESP32智能手表

    电子发烧友网站提供《Diy ESP32智能手表.zip》资料免费下载
    发表于 07-04 11:26 5次下载
    <b class='flag-5'>Diy</b> <b class='flag-5'>ESP32</b>智能手表

    DIY ESP32 SPI TFT屏蔽

    电子发烧友网站提供《DIY ESP32 SPI TFT屏蔽.zip》资料免费下载
    发表于 07-12 10:14 1次下载
    <b class='flag-5'>DIY</b> <b class='flag-5'>ESP32</b> SPI TFT屏蔽

    Otto DIY ESP32盾牌

    电子发烧友网站提供《Otto DIY ESP32盾牌.zip》资料免费下载
    发表于 07-26 15:04 3次下载
    Otto <b class='flag-5'>DIY</b> <b class='flag-5'>ESP32</b>盾牌

    ESP32 Feather实时时钟开源分享

    电子发烧友网站提供《ESP32 Feather实时时钟开源分享.zip》资料免费下载
    发表于 12-09 10:05 1次下载
    <b class='flag-5'>ESP32</b> Feather实时<b class='flag-5'>时钟</b>开源分享

    DFRobot Beetle ESP32-C3 DIY运动按钮 让你随时随地动起来

    锂离子电池的充电,无需外围模块。与其配套的Beetle ESP32-C3扩展板板载DFRobot Gravity接口,可以方便连接蜂鸣器、DFRobot Gravity:数字RGB全彩LED模块等。 项目
    发表于 12-15 15:16 396次阅读
    DFRobot Beetle <b class='flag-5'>ESP32</b>-C3 <b class='flag-5'>DIY</b>运动按钮 让你随时随地动起来

    基于Arduino/ESP8266的物联网点阵时钟

    时钟设计了 0-9 的数字,每个数字使用了十个片段,最后通过 WiFi 连接到网络,实现当前时间显示的功能。注意:如果使用 Arduino 开发板,则只能显示动画,不能显示时间。如果使用 E
    发表于 12-27 16:39 1次下载