ESP8266制作创意时钟(DS1302+TM1637)

ESP8266

一.简介

最近看到好多朋友都在制作时钟,感觉挺实用的所以自己也来制作一个省的打开手机来看时间,其实懒到一定程度也是一种境界,其实就是为了那种成就感把,废话不多说直接开始制作教程,很详细哟。
在这里插入图片描述

二.准备

1.这里我们需要用到一下模块

  • ESP8266 12F我们的核心板
    在这里插入图片描述
  • DS1302时钟模块,自带电池断电也没事,直接获取时间真的很方便
    在这里插入图片描述
  • TM1637时间显示模块,也就是用数码管来显示我们的时间,只能显示4位数字,所以就不显示秒了,就显示时间和日期
    在这里插入图片描述

2.开发环境

这里我们使用Arduino1.8.12来开发,当然其他版本也是没问题的,这就只是制作一个时钟,所以就不用大费周章来自己写函数,自己调用库就可以了,节省我们的时间成本,也降低了开发难度。

但是使用的库得我们自己来安装,操作也特别简单

下载DS1302和TM1637库
地址:点击此处下载

下载成功之后,将库文件解压到我们Arduino软件安装目录下的libraries目录下
在这里插入图片描述
这样库就安装成功了
在这里插入图片描述

3.管脚定义

各模块按照下面表进行连接

ESP8266DS1302
3VVCC
GNDGND
D7(GPIO13)CLK
D6(GPIO12)DAT
D5(GPIO14)RST
ESP8266TM1637
D1(GPIO5)CLK
D2(GPIO4)DAT
3VVCC
GNDGND

由于在代码中使用的都是GPIO的号,所以将ESP8266的全部管脚的定义图放出来
在这里插入图片描述

三.代码

#include <stdio.h>
#include <DS1302.h>
#include "TM1637.h"

//时钟显示模块管脚定义  
#define CLK 5 
#define DIO 4
TM1637 tm1637(CLK,DIO);

//时钟模块管脚定义
#define kCePin   14 // 复位引脚
#define kIoPin   12 // 数据引脚
#define kSclkPin 13 // 时钟引脚
DS1302 rtc(kCePin, kIoPin, kSclkPin);

// 时间分隔符闪烁标识
bool ShowPoint = true;
//时间和日期交替显示
int showCount = 0;

namespace {

String dayAsString(const Time::Day day) {
  switch (day) {
    case Time::kSunday: return "Sunday";
    case Time::kMonday: return "Monday";
    case Time::kTuesday: return "Tuesday";
    case Time::kWednesday: return "Wednesday";
    case Time::kThursday: return "Thursday";
    case Time::kFriday: return "Friday";
    case Time::kSaturday: return "Saturday";
  }
  return "(unknown day)";
}
}

void printTime() {
  // 从模块获得当前时间
  Time t = rtc.time();

  // 星期几
  const String day = dayAsString(t.day);

  // 格式化时间数据
  char buf[50];
  snprintf(buf, sizeof(buf), "%s %04d-%02d-%02d %02d:%02d:%02d",
           day.c_str(),
           t.yr, t.mon, t.date,
           t.hr, t.min, t.sec);
  Serial.println(buf);
}

void showTime(){
  // 从模块获得当前时间
  Time t = rtc.time();
  int h = t.hr;
  int mn = t.min;
 
  int b0 = h / 10;
  int b1 = h % 10;
 
  int b2 = mn / 10;
  int b3 = mn % 10;
  
  tm1637.display(0, b0);
  tm1637.display(1, b1);
  tm1637.point(ShowPoint);
  tm1637.display(2, b2);
  tm1637.display(3, b3);
  
  ShowPoint = !ShowPoint;
}

void showData(){
  // 从模块获得当前时间
  Time t = rtc.time();
  int m = t.mon;
  int d = t.date;
 
  int m0 = m / 10;
  int m1 = m % 10;
 
  int d2 = d / 10;
  int d3 = d % 10;
  
  tm1637.display(0, m0);
  tm1637.display(1, m1);
  tm1637.display(2, d2);
  tm1637.display(3, d3);
  tm1637.point(false);
  
}  // namespace


void setTime(){
  
   // 设置初始时间为 2018-1-18,17:28:00 星期四
   Time t(2018, 1, 18, 17, 28, 0, Time::kThursday);
   rtc.time(t);
  
}

void setup() {
   Serial.begin(9600);
   rtc.writeProtect(false);
   rtc.halt(false);
   
   //时钟显示模块的初始化
   tm1637.init();
   //设置亮度0-7
   tm1637.set(2);
}


void loop() {
  //每隔10s显示一次日期
  if( showCount <= 10 )
  {
    showTime();
    showCount++;
    delay(1000);
  }
  else
  {
    showData();
    showCount = 0; 
    delay(2000);  
  }

}
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值