222 lines
6.1 KiB
C++
222 lines
6.1 KiB
C++
//------------------------LIBRARY----------------------//
|
|
#include <ESP8266WiFi.h>
|
|
#include <WiFiClientSecure.h>
|
|
#include <UniversalTelegramBot.h>
|
|
#include <ArduinoJson.h>
|
|
#include <Adafruit_MPU6050.h>
|
|
#include <Adafruit_Sensor.h>
|
|
#include <Wire.h>
|
|
|
|
//-------------------Kredensial jaringan WiFi-----------------------//
|
|
#define WIFI_SSID "dejow"
|
|
#define WIFI_PASSWORD "ooodejow"
|
|
|
|
//------------------KONFIGURASI TELEGRAM------------------//
|
|
#define BOT_TOKEN "7199714276:AAGJecg0q5CDAs4eMcj300Weof_8PU2G-QI"
|
|
#define CHAT_ID "6584276923"
|
|
const unsigned long BOT_MTBS = 1000; // mean time between scan messages
|
|
X509List cert(TELEGRAM_CERTIFICATE_ROOT);
|
|
WiFiClientSecure secured_client;
|
|
UniversalTelegramBot bot(BOT_TOKEN, secured_client);
|
|
unsigned long bot_lasttime; // last time messages' scan has been done
|
|
|
|
//-----------------KONFIGURASI GPS------------------//
|
|
#include <TinyGPS++.h>
|
|
#include <SoftwareSerial.h>
|
|
SoftwareSerial GPSSerial(D7, D8);
|
|
TinyGPSPlus gps;
|
|
|
|
//-----------------KONFIGURASI MPU6050----------------//
|
|
unsigned long lastTime = 0;
|
|
float oldZ = 8;
|
|
Adafruit_MPU6050 mpu;
|
|
|
|
//-----------------PIN BUZZER DAN PUSHBUTTON-----------------//
|
|
#define buzer D5
|
|
#define tekan D6
|
|
#define tekan1 D4
|
|
|
|
//----------------LOGIKA PUSH BUTTON------------------//
|
|
volatile bool buttonPressed = false;
|
|
volatile bool buttonPressed1 = false;
|
|
|
|
//--------------VOID PUSH BUTTON-----------------//
|
|
void ICACHE_RAM_ATTR handleButtonPress() {
|
|
buttonPressed = true;
|
|
}
|
|
|
|
void ICACHE_RAM_ATTR handleButtonPress1() {
|
|
buttonPressed1 = true;
|
|
}
|
|
//---------------------------------------------------------------------//
|
|
void setup()
|
|
{
|
|
Serial.begin(115200);
|
|
GPSSerial.begin(9600); // Inisialisasi komunikasi serial dengan modul GPS
|
|
Serial.println("Initialize MPU6050");
|
|
|
|
pinMode(buzer, OUTPUT);
|
|
pinMode(tekan, INPUT_PULLUP);
|
|
pinMode(tekan1, INPUT_PULLUP);
|
|
|
|
// Mencoba untuk terhubung ke jaringan Wifi:
|
|
Serial.print("Menghubungkan ke Wifi SSID ");
|
|
Serial.print(WIFI_SSID);
|
|
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
|
|
secured_client.setTrustAnchors(&cert); // Tambahkan sertifikat root untuk api.telegram.org
|
|
|
|
while (WiFi.status() != WL_CONNECTED)
|
|
{
|
|
Serial.print(".");
|
|
delay(500);
|
|
}
|
|
Serial.print("\nWiFi terhubung. Alamat IP: ");
|
|
Serial.println(WiFi.localIP());
|
|
|
|
Serial.print("Mengambil waktu: ");
|
|
configTime(0, 0, "pool.ntp.org"); // dapatkan waktu UTC melalui NTP
|
|
time_t now = time(nullptr);
|
|
while (now < 24 * 3600)
|
|
{
|
|
Serial.print(".");
|
|
delay(100);
|
|
now = time(nullptr);
|
|
}
|
|
Serial.println(now);
|
|
|
|
bot_lasttime = millis(); // Inisialisasi waktu pemindaian pesan
|
|
|
|
while (!Serial)
|
|
delay(10); // will pause Zero, Leonardo, etc until serial console opens
|
|
|
|
Serial.println("Adafruit MPU6050 test!");
|
|
|
|
// Try to initialize!
|
|
if (!mpu.begin()) {
|
|
Serial.println("Failed to find MPU6050 chip");
|
|
while (1) {
|
|
delay(10);
|
|
}
|
|
}
|
|
|
|
attachInterrupt(digitalPinToInterrupt(tekan), handleButtonPress, FALLING);
|
|
attachInterrupt(digitalPinToInterrupt(tekan1), handleButtonPress1, FALLING);
|
|
}
|
|
|
|
//-----------------------------------------------------------------------------------//
|
|
void handleNewMessages(int numNewMessages)
|
|
{
|
|
for (int i = 0; i < numNewMessages; i++)
|
|
{
|
|
String chat_id = bot.messages[i].chat_id;
|
|
String text = bot.messages[i].text;
|
|
|
|
String from_name = bot.messages[i].from_name;
|
|
if (text == "/lokasi")
|
|
{
|
|
while (GPSSerial.available())
|
|
{
|
|
gps.encode(GPSSerial.read());
|
|
}
|
|
|
|
if (gps.location.isValid())
|
|
{
|
|
float currentLat = gps.location.lat();
|
|
float currentLng = gps.location.lng();
|
|
String lokasi = "Lokasi : https://www.google.com/maps/place/";
|
|
lokasi += String(currentLat, 6);
|
|
lokasi += ",";
|
|
lokasi += String(currentLng, 6);
|
|
bot.sendMessage(chat_id, lokasi, "");
|
|
}
|
|
else
|
|
{
|
|
bot.sendMessage(chat_id, "Lokasi GPS tidak valid, coba lagi.", "");
|
|
}
|
|
}
|
|
else if ( text == "/buzer_on")
|
|
{
|
|
digitalWrite(buzer, HIGH);
|
|
bot.sendMessage(chat_id, "BUZER ON");
|
|
}
|
|
else if (text == "/options")
|
|
{
|
|
String keyboardJson = "[[\"/lokasi\", \"/buzer_on\"],[\"/status\", \"/lokasi\"]]";
|
|
bot.sendMessageWithReplyKeyboard(chat_id, "Choose from one of the following options", "", keyboardJson, true);
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
//--------------------------------------------------------------------------------------------//
|
|
void loop()
|
|
{
|
|
sensors_event_t a, g, temp;
|
|
mpu.getEvent(&a, &g, &temp);
|
|
unsigned long currentTime = millis();
|
|
float jarakDetik = (currentTime - lastTime) / 1000.0; // Time difference in seconds
|
|
|
|
if (jarakDetik > 2) {
|
|
|
|
if (oldZ - a.acceleration.z > 7 && (a.acceleration.x > 7 || a.acceleration.x < -7 || a.acceleration.y > 8 || a.acceleration.y < -8)) {
|
|
digitalWrite(buzer, HIGH);
|
|
Serial.println("Jatuh Terdeteksi");
|
|
sendLocation();
|
|
}
|
|
|
|
Serial.println(oldZ);
|
|
Serial.println(a.acceleration.z);
|
|
|
|
lastTime = currentTime;
|
|
oldZ = a.acceleration.z;
|
|
}
|
|
|
|
if(buttonPressed) {
|
|
buttonPressed = false;
|
|
digitalWrite(buzer, LOW);
|
|
}
|
|
if(buttonPressed1) {
|
|
buttonPressed1 = false;
|
|
sendLocation();
|
|
Serial.print("terkirim");
|
|
}
|
|
|
|
if (millis() - bot_lasttime > BOT_MTBS)
|
|
{
|
|
int numNewMessages = bot.getUpdates(bot.last_message_received + 1);
|
|
|
|
while (numNewMessages)
|
|
{
|
|
Serial.println("menerima respon");
|
|
handleNewMessages(numNewMessages);
|
|
numNewMessages = bot.getUpdates(bot.last_message_received + 1);
|
|
}
|
|
|
|
bot_lasttime = millis();
|
|
}
|
|
|
|
while (GPSSerial.available())
|
|
{
|
|
gps.encode(GPSSerial.read());
|
|
}
|
|
|
|
if (gps.location.isUpdated())
|
|
{
|
|
}
|
|
}
|
|
|
|
//----------------------------------------------------------------//
|
|
void sendLocation() {
|
|
float currentLat = gps.location.lat();
|
|
float currentLng = gps.location.lng();
|
|
String lokasi =" BUTUH PERTOLONGAN \n";
|
|
lokasi +="Lokasi : https://www.google.com/maps/place/";
|
|
lokasi +=String(currentLat,6);
|
|
lokasi +=",";
|
|
lokasi +=String(currentLng,6);
|
|
digitalWrite(buzer ,HIGH);
|
|
|
|
bot.sendMessage(CHAT_ID, lokasi, "");
|
|
}
|
|
//---------------------------------------------------------------//
|