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();
}

GPS Monitoring : ESP32-DA Module

  Percubaan untuk menghasilkan sebuah GPS monitoring berjaya. Projek ini saya gunakan :   ESP32 Wroom GPS module GPS6MV2 2.4 oled lcd module...