Saturday, January 18, 2025

ESP32-WROOM : Jam azan


 Dibawah ini adalah scriptnya, semoga bermanfaat.

--------------------------------------------------------------------------------------------------------------------

#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#include <WiFi.h>
#include <NTPClient.h>
#include <WiFiUdp.h>

// Tetapan OLED
#define OLED_MOSI   21    
#define OLED_CLK    22    
#define OLED_DC     15    
#define OLED_CS     13    
#define OLED_RESET  14    
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64

Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT,
  OLED_MOSI, OLED_CLK, OLED_DC, OLED_RESET, OLED_CS);

// Tetapan WiFi
const char* ssid = "XXXX";    // Ganti dengan SSID WiFi anda
const char* password = "XXXX"; // Ganti dengan kata laluan WiFi anda

// Tetapan NTP (Masa Internet)
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "sg.pool.ntp.org", 8 * 3600, 60000); // GMT+8

// Jadual waktu azan (untuk lokasi tertentu, ubah ikut lokasi anda)
struct PrayerTime {
  String name;
  int hour;
  int minute;
};

PrayerTime prayerTimes[] = {
  {"Subuh", 5, 45},
  {"Zohor", 13, 10},
  {"Asar", 16, 30},
  {"Maghrib", 19, 5},
  {"Isyak", 20, 15}
};
const int numPrayers = sizeof(prayerTimes) / sizeof(prayerTimes[0]);

void setup() {
  Serial.begin(115200);

  // Sambungkan WiFi
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi Connected");

  // Mulakan NTP
  timeClient.begin();

  // Mulakan OLED
  if (!display.begin(SSD1306_SWITCHCAPVCC)) {
    Serial.println(F("OLED initialization failed"));
    while (1);
  }
 
  display.clearDisplay();
  display.setTextColor(SSD1306_WHITE);
  display.setTextSize(1);  // Saiz font kecil
  display.setCursor(0, 0);
  display.println("Jam Azan");
  display.println("Memuatkan...");
  display.display();
  delay(2000);
}

void loop() {
  // Kemas kini masa
  timeClient.update();

  // Dapatkan masa semasa
  int currentHour = timeClient.getHours();
  int currentMinute = timeClient.getMinutes();
  int currentSecond = timeClient.getSeconds();

  // Periksa waktu azan
  checkPrayerTime(currentHour, currentMinute);

  // Paparkan masa dan waktu solat
  displayTime(currentHour, currentMinute, currentSecond);
  delay(1000);
}

void checkPrayerTime(int hour, int minute) {
  for (int i = 0; i < numPrayers; i++) {
    if (hour == prayerTimes[i].hour && minute == prayerTimes[i].minute) {
      // Notifikasi azan (anda boleh sambung ke buzzer/speaker di sini)
      Serial.println("Waktu Azan: " + prayerTimes[i].name);
      playAzan();
    }
  }
}

void playAzan() {
  // Gantikan dengan kod untuk memainkan azan (buzzer atau audio file)
  Serial.println("Memainkan Azan...");
}

void displayTime(int hour, int minute, int second) {
  display.clearDisplay();
  display.setTextSize(1);  // Saiz font kecil
 
  display.setCursor(0, 0);

  // Paparkan masa semasa
  if (hour < 10) display.print("0");
  display.print(hour);
  display.print(":");
  if (minute < 10) display.print("0");
  display.print(minute);
  display.print(":");
  if (second < 10) display.print("0");
  display.print(second);

  // Tambahkan "9m2zak" pada hujung jam
  display.print(" 9m2zak");

  // Paparkan waktu solat
  display.setTextSize(1);  // Saiz font kecil
  display.setCursor(0, 20);  // Ubah kedudukan ke atas sedikit
  for (int i = 0; i < numPrayers; i++) {
    display.print(prayerTimes[i].name);
    display.print(": ");
    if (prayerTimes[i].hour < 10) display.print("0");
    display.print(prayerTimes[i].hour);
    display.print(":");
    if (prayerTimes[i].minute < 10) display.print("0");
    display.print(prayerTimes[i].minute);
    display.println();
  }

  display.display();
}

Kisah Aku Membangunkan Aplikasi Tempahan Dewan dan Bilik Mesyuarat

  Bermula dengan urusan harian di sekolah Aku nak kongsikan cerita di sebalik aplikasi tempahan dewan dan bilik mesyuarat SMK Bandar Putra. ...