Hướng dẫn hiển thị trạng thái kết nối, ngày, tháng, năm và thời gian sử dụng ESP32 và LCD1602 I2C

     1. Chuẩn bị phần cứng

     2. Đấu nối

Đối với ESP8266 sẽ chuyển từ P21 sang chân D2

P22 chuyển sang chân D1

Code 2 dòng Esp8266 và ESP32 giống nhau!


#include 
#include 
#include 
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
bool isWiFiConnected = false;  // Biến để theo dõi trạng thái kết nối WiFi
#define NTP_SERVER     “pool.ntp.org”
#define UTC_OFFSET     25200  // Việt Nam UTC+7 = 7*60*60
#define UTC_OFFSET_DST 0
void spinner() {
  static int8_t counter = 0;
  const char* glyphs = “\xa1\xa5\xdb”;
  LCD.setCursor(15, 1);
  LCD.print(glyphs[counter++]);
  if (counter == strlen(glyphs)) {
    counter = 0;
  }
}
void printLocalTime() {
  struct tm timeinfo;
  if (!getLocalTime(&timeinfo)) {
    isWiFiConnected = false;
    return;
  }
  LCD.setCursor(8, 0);
  LCD.println(&timeinfo, “%H:%M:%S”);
  LCD.setCursor(0, 1);
  LCD.println(&timeinfo, “%d/%m/%Y   %Z”);
  isWiFiConnected = true;
}
void setup() {
  Serial.begin(115200);
  LCD.init();
  LCD.backlight();
  LCD.setCursor(0, 0);
  LCD.print(“Connecting to “);
  LCD.setCursor(0, 1);
  LCD.print(“WiFi “);
  WiFi.begin(“linhkiensmart”, “66668888”, 6);
  while (WiFi.status() != WL_CONNECTED) {
    delay(250);
    spinner();
  }
  Serial.println(“”);
  Serial.println(“WiFi connected”);
  Serial.print(“IP address: “);
  Serial.println(WiFi.localIP());
  LCD.clear();
  LCD.setCursor(0, 0);
  LCD.println(“Online”);
  LCD.setCursor(0, 1);
  LCD.println(“Updating time…”);
  configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
  // Đặt biến môi trường TZ thành “Vnam”
  setenv(“TZ”, “Vnam-7”, 1);
}
void loop() {
  printLocalTime();
  if (!isWiFiConnected) {
    // Xóa thông tin và hiển thị “Offline” nếu WiFi không kết nối
    LCD.clear();
    LCD.setCursor(0, 0);
    LCD.println(“Offline”);
  }
  delay(250);
}
Bài viết liên quan