ESP-01 & lcd1602 网络时钟

 

#include <ESP8266WiFi.h>
#include <WiFiUdp.h>
#include <Wire.h>
#include <NTPClient.h>               // Include NTPClient library
#include <TimeLib.h>                 // Include Arduino time library
#include <LiquidCrystal_I2C.h>       // Include LiquidCrystal_I2C library

LiquidCrystal_I2C lcd(0x3f, 16, 2);  // Configure LiquidCrystal_I2C library with 0x27 address, 16 columns and 2 rows

const char *ssid     = "无线名称";
const char *password = "密码";

WiFiUDP ntpUDP;

// 'time.nist.gov' is used (default server) with +8 hour offset (28800 seconds) 60 seconds (60000 milliseconds) update interval
NTPClient timeClient(ntpUDP, "time.nist.gov", 28800, 60000);

char Time[] = "TIME:00:00:00";
char Date[] = "DATE:00/00/2000";
byte last_second, second_, minute_, hour_, day_, month_;
int year_;

void setup() {

  Serial.begin(115200);
  Wire.begin(0,2);
  lcd.begin();                   // Initialize I2C LCD module (SDA = GPIO0, SCL = GPIO2)
  lcd.backlight();                   // Turn backlight ON
  lcd.setCursor(0, 0);
  lcd.print(Time);
  lcd.setCursor(0, 1);
  lcd.print(Date);

  WiFi.begin(ssid, password);

  Serial.print("Connecting.");
  while ( WiFi.status() != WL_CONNECTED ) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("connected");

  timeClient.begin();
}

void loop() {

  timeClient.update();
  unsigned long unix_epoch = timeClient.getEpochTime();    // Get Unix epoch time from the NTP server

  second_ = second(unix_epoch);
  if (last_second != second_) {

    minute_ = minute(unix_epoch);
    hour_   = hour(unix_epoch);
    day_    = day(unix_epoch);
    month_  = month(unix_epoch);
    year_   = year(unix_epoch);

    Time[12] = second_ % 10 + 48;
    Time[11] = second_ / 10 + 48;
    Time[9]  = minute_ % 10 + 48;
    Time[8]  = minute_ / 10 + 48;
    Time[6]  = hour_   % 10 + 48;
    Time[5]  = hour_   / 10 + 48;

    Date[8]  = day_   / 10 + 48; //日
    Date[9]  = day_   % 10 + 48; //日
    Date[5]  = month_  / 10 + 48; //月
    Date[6]  = month_  % 10 + 48; //月
    Date[13] = (year_   / 10) % 10 + 48;
    Date[14] = year_   % 10 % 10 + 48;

    // Send time and date to serial monitor
    Serial.println(Time);
    Serial.println(Date);

    // Display time and date on the 16x2 LCD
    lcd.setCursor(0, 0);
    lcd.print(Time);
    lcd.setCursor(0, 1);
    lcd.print(Date);

    last_second = second_;
  }

  delay(200);

}

ESP-01应使用3.3V供电

LCD1602应使用5V供电

实际用的3.7V电池,饱和时电压4.0V+

运行时发热,比在面包板上标准供电时高.暂时没有烧毁,考虑给ESP-01加一个3.3V的降压板.

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
基于STM32和ESP8266的桌面型网络天气时钟系统设计如下:该系统主要由STM32单片机、ESP8266无线模块、RTC实时时钟模块、LCD显示屏和温湿度传感器等组成。 首先,STM32作为主控单元,负责整个系统的控制和协调。它通过串口与ESP8266进行通信,将获取到的天气数据发送给ESP8266进行处理和联网。 其次,ESP8266无线模块实现了系统的网络连接功能。它能够通过WiFi无线网络连接到互联网,从而获取天气数据。ESP8266利用HTTP协议与已有的天气API进行通信,获取实时的天气数据,并将其返回给STM32。 RTC实时时钟模块用于实时记录当前时间,并在断电后能够继续保持时间的准确性。它提供了精确的时钟信号以及日期显示功能,确保系统能够准确显示当前时间和日期。 LCD显示屏用于显示系统中的各种信息,包括时间、日期、天气预报等。通过与STM32进行通信,LCD屏幕能够根据接收到的数据更新显示内容。 最后,温湿度传感器用于实时监测环境的温度和湿度。它通过与STM32的连接,将监测到的数据传输给STM32进行处理和显示,并可以根据数据判断是否需要提醒用户进行调整。 总之,基于STM32和ESP8266的桌面型网络天气时钟系统能够通过连接到互联网获取实时的天气数据,并将其显示在LCD屏幕上。同时,它还能够显示当前时间、日期和环境温湿度等信息,为用户提供了一种实用的功能,并能够根据实时数据进行提醒和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值