【ESP8266+TM1650时钟数码管+DS3231模块】制作网络时钟

【ESP8266+TM1650时钟数码管+DS3231模块】制作网络时钟

    • 所需元器件
    • 接线方式
    • 代码

所需元器件

  • ESP8266 NodeMCU——开发板
  • TM1650时钟数码管——显示时钟
  • DS3231模块——网络对时

接线方式

  • TM1650
    SCL—>D1
    SDA—>D2
  • DS3231
    SCL—>D1
    SDA—>D2

代码

#include 
#include 
#include 
#include 
#include 
#include   // not used here, but needed to prevent a RTClib compile error
#include 
#include 


const char *ssid = "***";
const char *password = "***";


DS3231 RTC;
TM1650 d;
UnixTime stamp(8);  // 定义东八区时间


WiFiUDP ntpUDP;
// NTPClient timeClient(ntpUDP, "cn.ntp.org.cn", 28800);
NTPClient timeClient(ntpUDP, "cn.ntp.org.cn");


int h, m, s = 0;
int ii = 0;

String intToStr(int x) {
  if (x < 10) {
    return "0" + String(x);
  }
  return String(x);
}

void setup() {
  Serial.begin(74880);
  // Start the I2C interface
  Wire.begin();
  d.init();
  d.displayOn();
  d.setBrightnessGradually(5);
  RTC.begin();
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {  // 连接wifi
    ii++;
    Serial.print(".");
    if (ii % 2 == 0) {
      d.setDot(1, true);
    } else {
      d.setDot(1, false);
    }
    delay(500);
  }
  timeClient.begin();
  d.displayString("8888");
}

void loop() {
  // 0点更新时间
  if (h + m + s == 0) {
    timeClient.update();
    Serial.println("开始同步NTP时间");
    stamp.getDateTime(timeClient.getEpochTime());
    RTC.adjust(DateTime(stamp.year, stamp.month, stamp.day, stamp.hour, timeClient.getMinutes(), timeClient.getSeconds()));
    Serial.println("同步NTP时间完成");
  }
  // 以下获取RTC时间
  DateTime now = RTC.now();
  h = now.hour();
  m = now.minute();
  s = now.second();
  // 以下格式化HH:MM并显示
  String hhmm = intToStr(h) + intToStr(m);
  char charBuf[10];
  hhmm.toCharArray(charBuf, 10);
  d.displayString(charBuf);
  // 以下显示秒的跳动
  d.setDot(1, true);
  delay(500);
  d.setDot(1, false);
  delay(500);
}


时钟效果

你可能感兴趣的:(网络,esp8266,单片机,TM1650,DS3231)