FastBond智能建筑——网络时钟
利用ESP8266和点阵屏设计一款网络时钟, 具有wifi自动同步时间, 离线自动保存时间的功能
标签
嵌入式系统
数字逻辑
weiguoqian
更新2021-11-19
1067

一. 项目介绍

本次我选择了只能家居的项目, 此次设计一款可以自动同步时间的网络点阵时钟

硬件:

本次使用到的主控为ESP8266, 供电使用AID的ADP151AUJZ-3.3-R7线性稳压器, 显示为8*32的LED点阵屏, 使用Maxim的MAX7219EWG驱动点阵屏显示. 同时搭配Maxim的DS3231模块, 保存时间, 保证离线时正确显示时间.

软件:

使用Aduino IDE进行开发, 主要使用到了SPI, Ticker, ESP8266WiFi, Wire, time等模块

系统框图:

Fo2UvLKNJflj576JqpRhm3s8-t7J

二. 项目用到的板卡、芯片、模块、仪器、设备等介绍

  • MAX7219EWG

    MAX7219/MAX7221是紧凑型、串行输入/输出共阴极显示驱动器,可将微处理器连接到多达8位的7段数字LED显示器、条形图显示器或64个独立LED . 片上包括一个 BCD 代码 B 解码器、多路扫描电路、段和数字驱动器,以及一个存储每个数字的 8x8 静态 RAM。 只需要一个外部电阻来设置所有 LED 的段电流。

  • ADP151AUJZ-3.3-R7

    ADP151 是一款超低噪声、低压差线性稳压器,工作电压范围为 2.2 V 至 5.5 V,并提供高达 200 mA 的输出电流。 200 mA 负载下 140 mV 的低压差提高了效率并允许在较宽的输入电压范围内工作。 ADP151 采用创新的电路拓扑结构,无需旁路电容器即可实现超低噪声性能,非常适合对噪声敏感的模拟和 RF 应用。 ADP151 还实现了超低噪声性能,而不会影响 PSRR 或瞬态线路和负载性能。 200 mA 负载下 265 μA 的低静态电流使 ADP151 适用于电池供电的便携式设备。

  • DS3231

    DS3231是一款高精度I2C实时时钟器件,具有集成的温度补偿晶体振荡器,集成的晶体振荡器可提高器件的长期精确度. 该器件包含电池输入端, 断开主电源时仍可保持精确计.

  • ESP82666

    ESP8266 系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP8266EX的低功耗UART-WiFi芯片模组,可以方便地进行二次开发,块核心处理器 ESP8266 在较小尺寸封装中集成了业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ BB/RF/PA/LNA,板载天线。支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈。

关键性代码及说明

  1. WiFi配置, 连接之前保存的WiFi, 尝试10次, 如果连接成功,则返回, 如果连接失败, 则进行下一次尝试, 直到10次循环结束.

bool WifiConfig()
{
   WiFi.begin(); //先尝试已经保存的WIFI
​
   for (int i = 0; i < 10; i++)
  {
      char2Arr('W', 28, 0);
      char2Arr('i', 22, 0);
      char2Arr('-', 18, 0);
      char2Arr('F', 12, 0);
      char2Arr('i', 6, 0);
​
      refresh_display();
     
      if (WiFi.status() == WL_CONNECTED)
      {
         Serial.println("WifiConfig Success");
         Serial.printf("SSID:%s\r\n", WiFi.SSID().c_str());
         Serial.printf("PSW:%s\r\n", WiFi.psk().c_str());
         clear_Display();
         char2Arr('O', 25, 0);
         char2Arr('K', 19, 0);
         char2Arr('!', 12, 0);
         char2Arr('!', 6, 0);
         refresh_display();
​
         Serial.println("WiFi connected");
         Serial.println(WiFi.localIP());
         Serial.println("Starting UDP");
         udp.begin(localPort);
         Serial.print("Local port: ");
         Serial.println(udp.localPort());
         return true;
      }
      else{
         Serial.print("WifiConfig Waiting......");
         Serial.println(WiFi.status());
         delay(1000);
      }
  }
   clear_Display();
   char2Arr('E', 25, 0);
   char2Arr('r', 19, 0);
   char2Arr('r', 12, 0);
   char2Arr('!', 6, 0);
   refresh_display();
   delay(1000);
   Serial.println("AutoConfig Faild!" );
   return false;
}
  1. 读写DS3221模块, 读取和保存当前时间, 使用DS3221模块,

unsigned char rtc_Read(unsigned char regaddress) {
   Wire.beginTransmission(DS3231_ADDRESS);
   Wire.write(regaddress);
   Wire.endTransmission();
   Wire.requestFrom((unsigned char) DS3231_ADDRESS, (unsigned char) 1);
   return (Wire.read());
}
void rtc_Write(unsigned char regaddress, unsigned char value) {
   Wire.beginTransmission(DS3231_ADDRESS);
   Wire.write(regaddress);
   Wire.write(value);
   Wire.endTransmission();
}
  1. 通过SPI驱动MAX7219, 将信息显示到点阵屏上

void refresh_display() //take info into LEDarr
{
   unsigned short i, j;
​
#ifdef ROTATE_90
   rotate_90();
#endif
​
   for (i = 0; i < 8; i++)     //8 rows
  {
       digitalWrite(CS, LOW);
       delayMicroseconds(1);
       for (j = 1; j <= anzMAX; j++) {
           SPI.write(i + 1);  //current row
           
#ifdef REVERSE_HORIZONTAL
           SPI.setBitOrder(LSBFIRST);      // bitorder for reverse columns
#endif
​
#ifdef REVERSE_VERTICAL
           SPI.write(LEDarr[j - 1][7-i]);
#else
           SPI.write(LEDarr[j - 1][i]);
#endif
​
#ifdef REVERSE_HORIZONTAL
           SPI.setBitOrder(MSBFIRST);      // reset bitorder
#endif
      }
       digitalWrite(CS, HIGH);
  }
}

三. 功能演示结果及说明

  1. 连接WIFI

    FqFBu1jxeg2pdXzAofAG-KaJapjnFiB4nENIKlxKr63p87aMe2E6G7a6

  2. 显示时间

    FtlPdw2Pl8c5yezbVxgk2EG9cxIa

四. 对本活动的心得体会

  • 了解了MAX7219EWG, 了解到了点阵屏的使用方法, 使用MAX7219, 可以实现仅使用3个IO空控制32*8 点阵屏, 大大节省了IO口的使用

  • 了解了DS3231等芯片的基本使用, 如果仅仅使用网络进行时间同步的话, 离线条件下仍然会导致时间的不稳定, 使用DS3231芯片可以保证离线情况下的时间稳定性.

软硬件
电路图
附件下载
clock.pdf
原理图
esp8266.esp8266.nodemcuv2.zip
程序
团队介绍
钱卫国 来自广东工业大学
团队成员
weiguoqian
评论
0 / 100
查看更多
目录
硬禾服务号
关注最新动态
0512-67862536
info@eetree.cn
江苏省苏州市苏州工业园区新平街388号腾飞创新园A2幢815室
苏州硬禾信息科技有限公司
Copyright © 2023 苏州硬禾信息科技有限公司 All Rights Reserved 苏ICP备19040198号