风筝
发表于: 2020-2-26 21:54:51 | 显示全部楼层

在本篇文章中,我们将学习如何将RTC模块DS3231与NodeMCU ESP8266 12E开发板和1602 LCD显示屏连接。我们将使用DS3231实时时钟(RTC)模块跟踪正确的时间和日期,在OLED显示屏上进行显示,并使用ESP8266作为微控制器。


也可以使用DS1307代替DS3231。 DS3231 RTC具有内置的闹钟功能以及温度传感器,其分辨率为0.25,精度为±3°C,这使该项目更加容易实现。


所需的组件

以下是制作本文所需的组件:

●    NodeMCU ESP8266 12E开发板

●    DS3231 RTC模块

●    1602 I2C LCD显示屏


DS3231 RTC模块

DS3231是一款低成本、非常精确的I2C实时时钟(RTC),具有集成的温度补偿晶体振荡器(TCXO)。该器件具有电池输入引脚,并且在器件的主电源中断时可以保持准确的计时。


RTC可以记录秒、分钟、小时、日期、月份和年份的信息。对于少于31天的月份,将自动调整月末的日期,包括闰年的更正。时钟以24小时制或12小时制运行,并带有低电平有效AM / PM指示器。提供两个可编程的时间闹钟和一个可编程的方波输出。


精密的温度补偿电压基准和比较器电路监视VCC的状态,以检测电源故障,提供复位输出并在必要时自动切换到备用电源。另外,RST引脚低电平有效,当按钮输入时产生一个微控制器复位信号。


主要特征:

●    高精度RTC管理所有计时功能

●    实时时钟计数秒、分钟、小时、月、周、日和年,闰年补偿有效期至2100

●    0°C到+ 40°C的精度为±2ppm

●    -40°C至+ 85°C的精度为±3.5ppm

●    数字温度传感器输出:±3°C精度

●    低电平有效RST输出/按钮复位去抖输入

●    两个时间闹钟

●    可编程方波输出信号

●    简单的串行接口连接到大多数微控制器

●    快速(400kHz)I2C接口

●    电池备用输入,可连续计时

●    低功耗运行可延长电池备份运行时间

●    工作温度范围:商业(0°C至+ 70°C)和工业(-40°C至+ 85°C)


ESP8266与DS3231的实时时钟的连接

以下是DS3231模块与NodeMCU ESP8266连接的电路图。连接非常简单。您也可以在面包上组装电路。

Circuit-Diagram-1.jpg


DS3231和1602显示屏均为I2C模块。因此,我们只需要2个引脚即可进行连接。因此,将串行数据(SDA)引脚连接到NodeMCU的D2引脚,并将串行时钟(SCL)连接到NodeMCU的D1引脚。通过NodeMCU的Vin引脚引脚为LCD和RTC模块提供5V的电压。您也可以为DS3231模块使用3.3V电源。

DS3231-RTC-LCD-Assembly.jpg


源代码/程序

ESP8266连接DS3231 RTC模块的源代码如下。您可以复制代码并将其直接上传到NodeMCU ESP8266-12E开发板。但是在此之前,您将需要一个库,即RTC模块的库。因此,请首先从下面的链接下载该库,然后将其添加到Arduino IDE。

●   用于DS3231的RTClib库

  1. #include <Wire.h> // Library for I2C communication
  2. #include <SPI.h>  // not used here, but needed to prevent a RTClib compile error
  3. #include "RTClib.h"
  4. #include <LiquidCrystal_I2C.h> // Library for LCD
  5. LiquidCrystal_I2C lcd = LiquidCrystal_I2C(0x27, 16, 2);

  6. RTC_DS1307 RTC;     // Setup an instance of DS1307 naming it RTC

  7. void setup ()
  8. {
  9.   Serial.begin(57600); // Set serial port speed
  10.   lcd.begin();
  11.   Wire.begin(); // Start the I2C
  12.   RTC.begin();  // Init RTC
  13.   RTC.adjust(DateTime(__DATE__, __TIME__));  // Time and date is expanded to date and time on your computer at compiletime
  14.   Serial.print('Time and date set');
  15.   lcd.setCursor(0, 0);
  16.   lcd.print("Real Time Clock");
  17.   delay(3000);
  18.   lcd.clear();
  19. }

  20. void loop () {
  21.   DateTime now = RTC.now();

  22.   Serial.print(now.year(), DEC);
  23.   Serial.print('/');
  24.   Serial.print(now.month(), DEC);
  25.   Serial.print('/');
  26.   Serial.print(now.day(), DEC);
  27.   Serial.print(' ');
  28.   Serial.print(now.hour(), DEC);
  29.   Serial.print(':');
  30.   Serial.print(now.minute(), DEC);
  31.   Serial.print(':');
  32.   Serial.print(now.second(), DEC);
  33.   Serial.println();

  34.   
  35.   lcd.setCursor(0, 0);
  36.   lcd.print("Date: ");
  37.   lcd.setCursor(0, 1);
  38.   lcd.print("Time: ");
  39.   
  40.   lcd.setCursor(6, 0);
  41.   lcd.print(now.year(), DEC);
  42.   lcd.print(":");
  43.   lcd.print(now.month(), DEC);
  44.   lcd.print(":");
  45.   lcd.print(now.day(), DEC);

  46.   lcd.setCursor(6, 1);
  47.   lcd.print(now.hour(), DEC);
  48.   lcd.print(":");
  49.   lcd.print(now.minute(), DEC);
  50.   lcd.print(":");
  51.   lcd.print(now.second(), DEC);
  52.   delay(1000);
  53.   lcd.clear();
  54. }
复制代码

ESP8266连接DS3231实时时钟的运行结果

代码上传后,RTC模块将开始工作。时间和日期将显示在1602 LCD显示屏中。不需要其他设置,也不需要任何额外的按钮或开关。

ESP8266-RTC-DS3231.jpg

跳转到指定楼层
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题 700 | 回复: 1479



手机版|

GMT+8, 2024-3-29 13:49 , Processed in 0.113234 second(s), 8 queries , Gzip On, MemCache On. Powered by Discuz! X3.5

YiBoard一板网 © 2015-2022 地址:河北省石家庄市长安区高营大街 ( 冀ICP备18020117号 )

快速回复 返回顶部 返回列表