#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
// Thông tin WiFi
char ssid[] = "Wokwi-GUEST"; // Nhập SSID của router wifi của bạn
char pass[] = ""; // Nhập mật khẩu wifi của bạn
// Địa chỉ của máy chủ NTP (Network Time Protocol)
const char* ntpServer = "pool.ntp.org";
const long gmtOffset_sec = 7 * 3600; // Độ chênh lệch múi giờ Việt Nam (7 giờ so với múi giờ UTC)
const int daylightOffset_sec = 0;
// Cài đặt màn hình LCD
LiquidCrystal_I2C lcd(0x27, 16, 2); // Địa chỉ I2C của màn hình, kích thước 16x2
// Biến lưu trữ thời gian
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, ntpServer, gmtOffset_sec);
// Biến lưu trữ giờ, phút và giây
int hour;
int minute;
int second;
// Chân GPIO của các _save = 19;
const int buttonSetHourPin = 18; // Chân GPIO cho nút nhấn cài đặt giờ
const int buttonSetMinutePin = 5; // Chân GPIO cho nút nhấn cài đặt phút
const int buttonAlarmPin = 17; // Chân GPIO cho nút nhấn cài đặt báo thức
int time_alarm[] = {0, 0, 0};
int time_temp[] = {0, 0, 0};
void setup() {
// Khởi động Serial Monitor
Serial.begin(115200);
// Khởi động WiFi
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
// Khởi động các chân GPIO của nút nhấn
pinMode(buttonSetHourPin, INPUT_PULLUP);
pinMode(buttonSetMinutePin, INPUT_PULLUP);
pinMode(buttonAlarmPin, INPUT_PULLUP);
// In địa chỉ IP của ESP32 sau khi kết nối thành công
Serial.println(WiFi.localIP());
// Khởi động màn hình LCD
lcd.init();
lcd.backlight();
// Khởi động đồng hồ NTP
timeClient.begin();
}
void loop() {
// Cập nhật thời gian từ máy chủ NTP
timeClient.update();
// Lấy giờ, phút và giây từ thời gian hiện tại
hour = timeClient.getHours();
minute = timeClient.getMinutes();
second = timeClient.getSeconds();
// Hiển thị thời gian trên màn hình LCD
lcd.setCursor(0, 0);
lcd.print("Time: ");
lcd.print(timeClient.getFormattedTime());
// In thời gian ra Serial Monitor
Serial.print("Time: ");
Serial.println(timeClient.getFormattedTime());
delay(1000); // Chờ 1 giây trước khi lặp lại
}
void handle_btn(){
// const int buttonSetHourPin = 18; // Chân GPIO cho nút nhấn cài đặt giờ
// const int buttonSetMinutePin = 5; // Chân GPIO cho nút nhấn cài đặt phút
// const int buttonAlarmPin = 17;
if (buttonSetHourPin == 0){
delay(200);
if (buttonSetHourPin == 0){
time_temp[0] += 1;
if(time_temp[0] >23) time_temp[0] = 0;
}
}
if (buttonSetMinutePin == 0){
delay(200);
if (buttonSetMinutePin == 0){
time_temp[1] += 1;
if(time_temp[1] >23) time_temp[1] = 0;
}
}
if (buttonAlarmPin == 0){
delay(200);
if (buttonAlarmPin == 0){
time_temp[2] += 1;
if(time_temp[2] >23) time_temp[2] = 0;
}
}
}