Senin, 25 Agustus 2025

UJI WEMOS DASAR :



 

https://www.projectguideline.com/using-arduino-ide-for-doing-esp8266-wemos-d1-mini-wifi-projects/ 


//Pilih Board:
//Arduino IDE → Tools → Board → Boards Manager…
//Install “ESP8266 by ESP8266 Community” (kalau belum).
//Tools → Board → pilih “LOLIN (WEMOS) D1 R2 & mini”.


const int outputPin1 = D5;  // GPIO14
const int outputPin2 = D6;  // GPIO12
const int outputPin3 = D7;  // GPIO13

int statusFlag = 1;

void setup() {
  Serial.begin(115200);
  pinMode(outputPin1, OUTPUT);
  pinMode(outputPin2, OUTPUT);
  pinMode(outputPin3, OUTPUT);

  digitalWrite(outputPin1, LOW);
  digitalWrite(outputPin2, LOW);
  digitalWrite(outputPin3, LOW);

  Serial.println("Ready. Ketik A/B/C/D/E/F.");
}

void loop() {
  if (Serial.available() > 0) {
    char cmd = Serial.read();
    handleCommand(cmd);
  }
}

void pulsePin(int pin, unsigned long ms) {
  digitalWrite(pin, HIGH);
  delay(ms);
  digitalWrite(pin, LOW);
}

void handleCommand(char cmd) {
  if ((cmd == 'A') && statusFlag == 1) {//RECORD outputPin1
    statusFlag = 1;
    digitalWrite(outputPin1, HIGH);
    pulsePin(outputPin1, 2000);
    Serial.println("sukses menerima A");
  }
  else if ((cmd == 'B') && statusFlag == 1) {//NYANYI outputPin2
    statusFlag = 1;
    digitalWrite(outputPin2, HIGH);
    pulsePin(outputPin2, 2000);
    Serial.println("sukses menerima B");
  }
  else if ((cmd == 'C') && statusFlag == 1) {//SPEAKER Standby: outputPin3
    statusFlag = 1;
    digitalWrite(outputPin3, HIGH);
    Serial.println("sukses menerima C");
    delay(100);
  }
  else if (cmd == 'D') { // speaker Tidak Aktif (power ke speaker off):outputPin3
    statusFlag = 0;
    digitalWrite(outputPin3, LOW);  
    Serial.println("sukses menerima D");
    delay(100);
  }
  else if (cmd == 'E') { // kembali ke default, speaker standby ON(power ke speaker on)
    statusFlag = 1;                 
    digitalWrite(outputPin3, HIGH);
    Serial.println("sukses menerima E");
    delay(100);
  }
  else if (cmd == 'F') {
    statusFlag = 0;                  // Speaker  Off/Tidak Aktif(power ke speaker off)
    digitalWrite(outputPin3, LOW);
    Serial.println("sukses menerima F");
    delay(100);
  }
  else {
    // abaikan selain A..F (kecuali newline)
    if (cmd != '\r' && cmd != '\n') {
      Serial.print("Perintah tidak dikenal: ");
      Serial.println(cmd);
    }
  }
}






Rabu, 04 Juni 2025

Arduino Web Server FULLY CODE

 #include <WiFi.h>
#include <WebServer.h>

//http://192.168.1.10/send?char=B

const char* ssid = "CapiBara";
const char* password = "77779999";
String  gtw = "192.168.1.1";

WebServer server(80);

String lastReceivedFromAndroid = "";
String charToSendToAndroid = "Z";

void handleSend() {
  if (server.hasArg("char")) {
    lastReceivedFromAndroid = server.arg("char");
    Serial.println("Received from Android: " + lastReceivedFromAndroid);

    // Contoh: ubah respons
    if (lastReceivedFromAndroid == "A") {charToSendToAndroid = "X";}
    else if (lastReceivedFromAndroid == "B") {charToSendToAndroid = "Y";}
    else if (lastReceivedFromAndroid == "C") {charToSendToAndroid = "Z";}
    else{charToSendToAndroid = "@"+lastReceivedFromAndroid+"#";}

    server.send(200, "text/plain", "OK");
  } else {
    server.send(400, "text/plain", "Missing char param");
  }
}

void handleStatus() {
  server.send(200, "text/plain", charToSendToAndroid);
  Serial.println("Sent to Android: " + charToSendToAndroid);
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("\nConnected to WiFi. IP: ");
  Serial.println(WiFi.localIP());
  gtw= WiFi.gatewayIP().toString();
  Serial.print("Gateway (Access Point IP): ");
  Serial.println(gtw);

  server.on("/send", handleSend);
  server.on("/status", handleStatus);
  server.begin();
}

void loop() {
  server.handleClient();
}

=======

UJI:http://192.168.1.10/send?char=B



Respon: http://192.168.1.10/status



package com.appsensor.geminillmjava;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import androidx.appcompat.app.AppCompatActivity;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;

public class WebServerAA extends AppCompatActivity {
//http://192.168.1.10/send?char=B
private TextView txtheader;
private EditText etQuestion;
private Button btnSubmit;
private TextView tvAnswer;

String IP="http://192.168.1.3/";
private final android.os.Handler handler = new android.os.Handler();
private final int POLLING_INTERVAL = 2000; // tiap 2 detik
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.geminillm);

setTitle("WebServer Android Arduino");
txtheader = findViewById(R.id.tvTitle);
txtheader.setText("Aplikasi RX / TX Pesan AA");

etQuestion = findViewById(R.id.etQuestion);
etQuestion.setText(IP+"A");
btnSubmit = findViewById(R.id.btnSubmit);
btnSubmit.setText("Sent WebServer");
tvAnswer = findViewById(R.id.tvAnswer);
tvAnswer.setText("");

btnSubmit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String question = etQuestion.getText().toString().trim();
if (!question.isEmpty()) {
String[]parts=question.split("/");
if(parts.length>1) {
IP = parts[0];
String message = parts[parts.length - 1];
sendCharToESP32(message);
}
else{
Toast.makeText(WebServerAA.this, "Gunakan Pola IP/PESAN, \nmisal: http://192.168.1.3/", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(WebServerAA.this, "Pesan tidak boleh kosong!", Toast.LENGTH_SHORT).show();
}
}
});

tvAnswer.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getCharFromESP32();
}
});
startAutoPolling();
}


private final Runnable pollingRunnable = new Runnable() {
@Override
public void run() {
getCharFromESP32(); // Panggil fungsi yang sudah ada
handler.postDelayed(this, POLLING_INTERVAL); // Jadwalkan lagi
}
};

private void startAutoPolling() {
handler.postDelayed(pollingRunnable, POLLING_INTERVAL);
}

private void stopAutoPolling() {
handler.removeCallbacks(pollingRunnable);
}
@Override
protected void onPause() {
super.onPause();
stopAutoPolling();
}
@Override
protected void onResume() {
super.onResume();
startAutoPolling();
}





public void sendCharToESP32(String character) {
String url = IP+"send?char=" + character;

new Thread(() -> {
try {
URL obj = new URL(url);
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
con.setRequestMethod("GET");
con.getInputStream().close(); // Eksekusi
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}

public void getCharFromESP32() {
String url = IP+"status";

new Thread(() -> {
try {
HttpURLConnection con = (HttpURLConnection) new URL(url).openConnection();
con.setRequestMethod("GET");

BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String response = in.readLine();
in.close();

runOnUiThread(() -> {
tvAnswer.setText("ESP32 Sent: " + response);
});

} catch (Exception e) {
e.printStackTrace();
}
}).start();
}

}


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:padding="16dp"
tools:context=".GeminiLLMJava">

<TextView
android:id="@+id/tvTitle"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Asisten Pribadi ISTN Kampus DKI Jakarta"
android:textSize="20sp"
android:textStyle="bold"
android:gravity="center"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginBottom="16dp"/>

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/tilQuestion"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:hint="Masukkan pertanyaan Anda"
app:layout_constraintTop_toBottomOf="@id/tvTitle"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="16dp">

<com.google.android.material.textfield.TextInputEditText
android:id="@+id/etQuestion"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="top|start"
android:inputType="textMultiLine"
android:maxLines="6"
android:minLines="3" />
</com.google.android.material.textfield.TextInputLayout>

<Button
android:id="@+id/btnSubmit"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Tanyakan ke AI"
app:layout_constraintTop_toBottomOf="@id/tilQuestion"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="16dp" />

<TextView
android:id="@+id/tvAnswerLabel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:text="Jawaban AI:"
android:textSize="16sp"
android:textStyle="bold"
app:layout_constraintTop_toBottomOf="@id/btnSubmit"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="24dp" />

<ScrollView
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintTop_toBottomOf="@id/tvAnswerLabel"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
android:layout_marginTop="8dp">

<TextView
android:id="@+id/tvAnswer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/rounded_border"
android:padding="12dp"
android:text="Jawaban akan muncul di sini..."
android:textSize="16sp"
android:textColor="@android:color/black"
android:fontFamily="monospace"
android:lineSpacingExtra="4dp"
android:scrollbars="vertical" />
</ScrollView>

</androidx.constraintlayout.widget.ConstraintLayout>

Senin, 10 Maret 2025

arduino rfid

 #include <Wire.h> 
#include <WiFiClientSecure.h>  
#include <WiFi.h>
#include <HTTPClient.h>  

byte sda = 5;
byte rst = 15;
#include <KRrfid.h>
#define RED_LED 26
#define GREEN_LED 27
#define buzzer 4
#define YELLOW_LED 12  //cadangan,,...
const int button1Pin = 32;
int st_ok = 0, count = 0;

//=============================================
#include <NTPClient.h>
#include <WiFiUdp.h>
// WiFi Credentials
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27, 20, 4);  // LCD 20x4

//const char* ssid = "-";
//const char* password = "-";
const char* ssid = "-";
const char* password = "12345678";

const char* serverURL = "https://lp2maray.com/sentWA.php?psn=";
const char* serverName ="https://script.google.com/macros/s/AKfycbx4-EwSjyguE2p0LFiuF9zjvcw0JOVW4ejqq8W8weSM6Q4d4DRLykRWxWAwJv_gTe8AStT/exec";
String sts = "Masuk"; 
String tanggal="";
String jam="";
String tgl="";
String RFID="RFID01"; 
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 7 * 3600, 60000); // Zona waktu GMT+7 (Indonesia)

void setup() {
  Serial.begin(115200);
  lcd.init();
  lcd.backlight();
  rfidBegin();

  // Inisialisasi LED
  pinMode(button1Pin, INPUT_PULLUP);
  pinMode(RED_LED, OUTPUT);
  pinMode(YELLOW_LED, OUTPUT);
  pinMode(GREEN_LED, OUTPUT);
  pinMode(buzzer, OUTPUT); 
  // Sambungkan ke WiFi
  lcd.setCursor(0, 0);
  lcd.print("Connecting...");
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.println("Connecting to WiFi...");
   timeClient.begin();
  } 

  lcd.clear();
  lcd.print("WiFi Connected");
  delay(2000);
  lcd.clear();
}
 
//################################################
void loop() { 
      int jamNow=waktu();
      getTAG();
        if (digitalRead(button1Pin) == HIGH) {
              sts = "MASUK  "; 
              if(jamNow>12){sts= " IZIN  "; }
smasuk();
          }
        else if (digitalRead(button1Pin) == LOW) {
              sts = "PULANG "; 
              spulang();
          }
       
        String pesan1="ABSEN ="+sts         ;
        String pesan2="TAP KARTU  !!!        ";
        lihat0(pesan1,pesan2);   
      
        if (TAG != "") { 
          Serial.print("TAG :");
          Serial.println(TAG);
          String input = TAG;
          input.trim();
          CEK(input);
        }
      else if (Serial.available() > 0) {
          String input = Serial.readStringUntil('\n');   
          input.trim();   
          CEK(input);
        } 
      delay(500);
}
//################################################
void CEK(String input){
  if (input == "RFID01" || input == "395593") {sendWA("2401001","A","OPS","083842690xxx"); }
  else if (input == "RFID02" || input == "2250103") {sendWA("2401002","D","Marketing","08896699xx"); }
  else if (input == "RFID03" || input == "2765740") {sendWA("2401002","D","Marketing","082125745xxx"); }
  else if (input == "RFID04" || input == "7511215528") {sendWA("2401002","D","Marketing","083842690xxx"); }
  //dst
    
  else {buzdeny();}  // Jika TAG tidak valid
  TAG = "";
  input="";
}
void sendWA(String kode,String nama,String divisi,String hp){
          buzacc();
          skirim();
          String pesan1="ABSENSI:"+sts+"       ";
          nama.toUpperCase();
          sts.trim();
          String pesan2="Yth "+nama            ;
          
          lihat(pesan1,pesan2); 
          String pesan="Yth "+nama+"/"+kode+" ("+divisi+"), Absen "+sts+" Anda Sukses disimpan...";
          sendCondition(pesan,hp);
          sendXLS(kode, nama, divisi,hp); 
  }
//==============================================================
void sendXLS(String kode,String nama,String divisi,String hp){
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http;
    http.begin(serverName);
    http.addHeader("Content-Type", "application/json");

    String jsonData = "{\"tanggal\":\""+tanggal+"\", \"jam\":\""+jam+"\", \"kode\":\""+kode+"\", \"nama\":\""+nama+"\", \"divisi\":\""+divisi+"\", \"hp\":\""+hp+"\", \"status\":\""+sts+"\"}";   
    Serial.println(jsonData);
    int httpResponseCode = http.POST(jsonData); 
    if (httpResponseCode > 0) {
      if (httpResponseCode == HTTP_CODE_MOVED_PERMANENTLY || httpResponseCode == HTTP_CODE_FOUND) {
        String newLocation = http.getLocation();
        Serial.println("Redirected to: " + newLocation);
        http.end(); // End the current connection
        http.begin(newLocation);
        http.addHeader("Content-Type", "application/json");
        httpResponseCode = http.POST(jsonData);
        if (httpResponseCode > 0) {
          String response = http.getString();
          Serial.println(httpResponseCode);
          Serial.println(response);
        } else {
          Serial.println("Error on sending POST after redirect: " + String(httpResponseCode));
        }
      } else {
        String response = http.getString();
        Serial.println(httpResponseCode);
        Serial.println(response);
      }
    } else {
      Serial.println("Error on sending POST: " + String(httpResponseCode));
    }
    http.end();
  } else {
    Serial.println("WiFi Disconnected");
  }
  delay(5000); // process 5 seconds
}

//==============================================================
void sendCondition(String pesan, String hp) {
  if (WiFi.status() == WL_CONNECTED) {
    HTTPClient http; 
    String fullURL = serverURL  + urlencode(pesan) + "&ph=" + urlencode(hp);
    Serial.println("Request URL: " + fullURL);
    http.begin(fullURL); 
    int httpResponseCode = http.GET();
    if (httpResponseCode > 0) {
      Serial.print("HTTP Response Code: ");
      Serial.println(httpResponseCode);
      String response = http.getString();
      Serial.println("Response: " + response);
    } else {
      Serial.print("Error sending GET: ");
      Serial.println(http.errorToString(httpResponseCode).c_str());
    }
    http.end();
  } else {
    Serial.println("WiFi Disconnected");
  }
  delay(3000);
}

String urlencode(String str) {
  String encodedString = "";
  char c;
  char code0;
  char code1;
  char code2;
  for (int i = 0; i < str.length(); i++) {
    c = str.charAt(i);
    if (c == ' ') {
      encodedString += '+';
    } else if (isalnum(c)) {
      encodedString += c;
    } else {
      code1 = (c & 0xf) + '0';
      if ((c & 0xf) > 9) {
        code1 = (c & 0xf) - 10 + 'A';
      }
      c = (c >> 4) & 0xf;
      code0 = c + '0';
      if (c > 9) {
        code0 = c - 10 + 'A';
      }
      code2 = '\0';
      encodedString += '%';
      encodedString += code0;
      encodedString += code1;
    }
  }
  return encodedString;
}
 
void buzacc() {
  digitalWrite(buzzer, HIGH);
  delay(100);
  digitalWrite(buzzer, LOW);
  delay(100);
  digitalWrite(buzzer, HIGH);
  delay(100);
  digitalWrite(buzzer, LOW);
  delay(100);
}
void buzdeny() {
  digitalWrite(buzzer, HIGH);
  delay(1000);
  digitalWrite(buzzer, LOW);
}

void lihat(String pesan1, String pesan2){
  lcd.setCursor(0, 0);
  lcd.print("ABSENSI              ");
  lcd.setCursor(0, 1);
  lcd.print(tanggal + " | " + jam);  // Tanggal dan waktu
  lcd.setCursor(0, 2);
  lcd.print(pesan1);   // Pesan pertama, misalnya "ABSEN = Masuk"
  lcd.setCursor(0, 3);
  lcd.print(pesan2);   // Pesan kedua, misalnya "Yth [Nama]"
  delay(5000); // Display for 5 seconds
}

void lihat0(String pesan1, String pesan2){
  lcd.setCursor(0, 0);
  lcd.print("NINJA EXPRES        ");   // Tampilkan nama aplikasi
  lcd.setCursor(0, 1);
  lcd.print(tanggal + " | " + jam);  // Tanggal dan waktu
  lcd.setCursor(0, 2);
  lcd.print("SILAHKAN TAB KARTU");    // Instruksi untuk men-tap kartu
  lcd.setCursor(0, 3);
  lcd.print("Status: " + sts);        // Status absen (Masuk / Pulang)
  delay(500); // Display for 500ms
}

void smasuk(){
   digitalWrite(RED_LED, LOW);
   digitalWrite(YELLOW_LED, LOW);
   digitalWrite(GREEN_LED, HIGH);  
}
void spulang(){
   digitalWrite(RED_LED, HIGH);
   digitalWrite(YELLOW_LED, LOW);
   digitalWrite(GREEN_LED, LOW);  
}

void skirim(){
  Serial.println("Tanggal: " + tanggal+" ("+tgl+")");
  Serial.println("Jam: " + jam);
   digitalWrite(RED_LED, LOW);
   digitalWrite(YELLOW_LED, HIGH);
   digitalWrite(GREEN_LED, LOW);  
}

int waktu(){
  timeClient.update(); // Update waktu dari server NTP

  time_t rawTime = timeClient.getEpochTime(); // Waktu epoch
  struct tm* timeInfo = localtime(&rawTime);
  int year = timeInfo->tm_year + 1900;
  int month = timeInfo->tm_mon + 1;
  int day = timeInfo->tm_mday;
  int hour = timeInfo->tm_hour;
  int minute = timeInfo->tm_min;
  int second = timeInfo->tm_sec;

  char bufferTGL[5]; // Format: DD/MM
  char bufferTanggal[11]; // Format: YYYY-MM-DD
  char bufferJam[9];      // Format: HH:MM:SS

  sprintf(bufferTanggal, "%04d-%02d-%02d", year, month, day);
  sprintf(bufferJam, "%02d:%02d:%02d", hour, minute, second);
  sprintf(bufferTGL, "%02d/%02d", day, month);

  tanggal = String(bufferTanggal);
  jam = String(hour) + ":" + String(minute) + ":" + String(second);
  tgl = String(bufferTGL);

  String pesan1 = " " + tgl + " : " + jam + " ";
  String pesan2 = "ABSEN = " + sts;
  lihat0(pesan1, pesan2);  // Update tampilan dengan tanggal, jam, dan status absen
return hour;
}


Sabtu, 04 Januari 2025

RUNEVERY

byte sda = D8;
byte rst = D0;

#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);

#include<KRrfid.h>
#include <Servo.h>
Servo servo;
#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
WiFiClientSecure secured_client;
const char* ssid = "4G";
const char* password = "98765432";
const char* server = "192.168.1.1/simpan.php?";

String idrf = "", payload;
int st_ok = 0, count = 0;

int buka = 0, tutup = 180;


void setup() {
  Serial.begin(9600);
  LCD.init();
  LCD.backlight();
  LCD.setCursor(0, 0);
  LCD.print("Connecting to ");
  LCD.setCursor(0, 1);
  LCD.print("WiFi ");
  servo.attach(D4);
  servo.write (tutup);
  rfidBegin();
  Serial.print("Menghubungkan ke Wi-Fi: ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
  }
  Serial.println("\nWi-Fi terhubung.");
  LCD.setCursor(0, 0);
  LCD.print("Selamat Datang   ");
  LCD.setCursor(0, 1);
  LCD.print("Tap Kartu        ");
}

void loop() {
  getTAG();
  if (TAG != "") {
    Serial.print("TAG :");
    Serial.println(TAG);
    idrf = TAG;
    LCD.setCursor(0, 0);
    LCD.print("Send data       ");
    LCD.setCursor(0, 1);
    LCD.print("                ");
    //    SendData();
    if (idrf == "1817713031") {
      st_ok = 1;
      servo.write (buka);
      LCD.setCursor(0, 0);
      LCD.print("ACC             ");
      LCD.setCursor(0, 1);
      LCD.print("Pintu terbuka!!!");
      count = 0;
    }
    TAG = "";
  }


  if (runEvery2(1000) && st_ok == 1) {
    count++;
    if (count >= 6) {
      LCD.setCursor(0, 0);
      LCD.print("Selamat Datang   ");
      LCD.setCursor(0, 1);
      LCD.print("Tap Kartu        ");
      count = 0;
      idrf = "";
      st_ok = 0;
    }
    else if (count >= 4) {
      LCD.setCursor(0, 0);
      LCD.print("                 ");
      LCD.setCursor(0, 1);
      LCD.print("Pintu tertutup   ");
      servo.write (tutup);
    }
    Serial.println(count);
  }
}

void SendData() {
  if (WiFi.status() == WL_CONNECTED) {
    WiFiClient client;
    HTTPClient http;
    String url = String(server) + "id=" + String(idrf);
    Serial.println( url);
    http.begin(client, url);
    int httpResponseCode = http.GET();
    if (httpResponseCode > 0) {
      Serial.print("HTTP Response code: ");
      Serial.println(httpResponseCode);
      payload = http.getString();
      payload.trim();
      Serial.println(payload);

      if (payload == "1") {
        LCD.setCursor(0, 0);
        LCD.print("ACC             ");
        LCD.setCursor(0, 1);
        LCD.print("Pintu terbuka   ");
        servo.write (buka);
        st_ok = 1;
        count = 0;
      } else {
        LCD.setCursor(0, 0);
        LCD.print("Gagal           ");
        LCD.setCursor(0, 1);
        LCD.print("                ");
        delay(1000);
      }
    } else {
      Serial.print("Error code: ");
      Serial.println(httpResponseCode);
    }
    http.end();
  } else {
    Serial.println("WiFi Disconnected");
  }
}

boolean runEvery2(unsigned long interval)
{
  static unsigned long previousMillis = 0;
  unsigned long currentMillis = millis();
  if (currentMillis - previousMillis >= interval)
  {
    previousMillis = currentMillis;
    return true;
  }
  return false;

Selasa, 28 Desember 2021

Kirim gambar Dan Sensor Ke Server

 

Kisi2 Kirim Data Dan Gambar ke Server  

#include <Arduino.h>

#include <WiFi.h>

#include "soc/soc.h"

#include "soc/rtc_cntl_reg.h"

#include "esp_camera.h"


const char* ssid = "pikachu";

const char* password = "123asdfghjkl";


String serverName = "192.168.0.104:8080";

String serverPath="/bimbel/Nusamandiri/MonitoringCCTV/simpan.php" ;


const int serverPort = 80;


WiFiClient client;


// CAMERA_MODEL_AI_THINKER

#define PWDN_GPIO_NUM     32

#define RESET_GPIO_NUM    -1

#define XCLK_GPIO_NUM      0

#define SIOD_GPIO_NUM     26

#define SIOC_GPIO_NUM     27


#define Y9_GPIO_NUM       35

#define Y8_GPIO_NUM       34

#define Y7_GPIO_NUM       39

#define Y6_GPIO_NUM       36

#define Y5_GPIO_NUM       21

#define Y4_GPIO_NUM       19

#define Y3_GPIO_NUM       18

#define Y2_GPIO_NUM        5

#define VSYNC_GPIO_NUM    25

#define HREF_GPIO_NUM     23

#define PCLK_GPIO_NUM     22


const int timerInterval = 30000;    // time between each HTTP POST image

unsigned long previousMillis = 0;   // last time image was sent

String inputString = "";         // a String to hold incoming data

bool stringComplete = false;  // whether the string is complete


void setup() {

  WRITE_PERI_REG(RTC_CNTL_BROWN_OUT_REG, 0);

  Serial.begin(115200);


  WiFi.mode(WIFI_STA);

  Serial.println();

  Serial.print("Connecting to ");

  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {

    Serial.print(".");

    delay(500);

  }

  Serial.println();

  Serial.print("ESP32-CAM IP Address: ");

  Serial.println(WiFi.localIP());


  camera_config_t config;

  config.ledc_channel = LEDC_CHANNEL_0;

  config.ledc_timer = LEDC_TIMER_0;

  config.pin_d0 = Y2_GPIO_NUM;

  config.pin_d1 = Y3_GPIO_NUM;

  config.pin_d2 = Y4_GPIO_NUM;

  config.pin_d3 = Y5_GPIO_NUM;

  config.pin_d4 = Y6_GPIO_NUM;

  config.pin_d5 = Y7_GPIO_NUM;

  config.pin_d6 = Y8_GPIO_NUM;

  config.pin_d7 = Y9_GPIO_NUM;

  config.pin_xclk = XCLK_GPIO_NUM;

  config.pin_pclk = PCLK_GPIO_NUM;

  config.pin_vsync = VSYNC_GPIO_NUM;

  config.pin_href = HREF_GPIO_NUM;

  config.pin_sscb_sda = SIOD_GPIO_NUM;

  config.pin_sscb_scl = SIOC_GPIO_NUM;

  config.pin_pwdn = PWDN_GPIO_NUM;

  config.pin_reset = RESET_GPIO_NUM;

  config.xclk_freq_hz = 20000000;

  config.pixel_format = PIXFORMAT_JPEG;


  // init with high specs to pre-allocate larger buffers

  if (psramFound()) {

    config.frame_size = FRAMESIZE_UXGA;

    config.jpeg_quality = 10;  //0-63 lower number means higher quality

    config.fb_count = 2;

  } else {

    config.frame_size = FRAMESIZE_SVGA;

    config.jpeg_quality = 12;  //0-63 lower number means higher quality

    config.fb_count = 1;

  }


  // camera init

  esp_err_t err = esp_camera_init(&config);

  if (err != ESP_OK) {

    Serial.printf("Camera init failed with error 0x%x", err);

    delay(1000);

    ESP.restart();

  }

  pinMode(4, OUTPUT);

  digitalWrite(4, HIGH);

  delay(100);

  digitalWrite(4, LOW);


}


void loop() {

  //  unsigned long currentMillis = millis();

  //  if (currentMillis - previousMillis >= timerInterval) {

  //    sendPhoto();

  //    previousMillis = currentMillis;

  //  }


  if (Serial.available()) {

    // ard.write("Test");

    // Serial.write(Serial.read());

    char inChar = (char)Serial.read();

    inputString += inChar;


    if (inChar == '\n') {

      stringComplete = true;

    }


    if (stringComplete) {

      digitalWrite(4, HIGH);

      delay(100);

      digitalWrite(4, LOW);

      Serial.println(inputString);

      Serial.println("Preparing photo");

      sendPhoto();

      inputString = "";

      stringComplete = false;

    }


  }


}


String sendPhoto() {

  String getAll;

  String getBody;


  camera_fb_t * fb = NULL;

  fb = esp_camera_fb_get();

  if (!fb) {

    Serial.println("Camera capture failed");

    delay(1000);

    ESP.restart();

  }


  Serial.println("Connecting to server: " + serverName);


  if (client.connect(serverName.c_str(), serverPort)) {

    Serial.println("Connection successful!");

    String head = "--RandomNerdTutorials\r\nContent-Disposition: form-data; name=\"fileToUpload\"; filename=\"ktp.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n";

    String tail = "\r\n--RandomNerdTutorials--\r\n";


    uint32_t imageLen = fb->len;

    uint32_t extraLen = head.length() + tail.length();

    uint32_t totalLen = imageLen + extraLen;

   

    inputString.trim();

String sensors = "?id_alat=" + String(idalat) + "&asap=" + String(stasap) + "&api=" + String(stapi) + "&ket=ok";  

    String url = serverName+serverPath+sensors; 

    client.println("POST " + url + " HTTP/1.1");

    client.println("Host: " + serverName);

    client.println("Content-Length: " + String(totalLen));

    client.println("Content-Type: multipart/form-data; boundary=RandomNerdTutorials");

    client.println();

    client.print(head);


    uint8_t *fbBuf = fb->buf;

    size_t fbLen = fb->len;

    for (size_t n = 0; n < fbLen; n = n + 1024) {

      if (n + 1024 < fbLen) {

        client.write(fbBuf, 1024);

        fbBuf += 1024;

      }

      else if (fbLen % 1024 > 0) {

        size_t remainder = fbLen % 1024;

        client.write(fbBuf, remainder);

      }

    }

    client.print(tail);


    esp_camera_fb_return(fb);


    int timoutTimer = 10000;

    long startTimer = millis();

    boolean state = false;


    while ((startTimer + timoutTimer) > millis()) {

      Serial.print(".");

      delay(100);

      while (client.available()) {

        char c = client.read();

        if (c == '\n') {

          if (getAll.length() == 0) {

            state = true;

          }

          getAll = "";

        }

        else if (c != '\r') {

          getAll += String(c);

        }

        if (state == true) {

          getBody += String(c);

        }

        startTimer = millis();

      }

      if (getBody.length() > 0) {

        break;

      }

    }

    Serial.println();

    client.stop();

    Serial.println(getBody);

  }

  else {

    getBody = "Connection to " + serverName +  " failed.";

    Serial.println(getBody);

  }

  return getBody;

}

+++++++++++++++++++++

<?php
session_start();
unset($_SESSION["rfid"]);
unset($_SESSION["gate"]);

require_once"konmysqli.php";
date_default_timezone_set("Asia/Jakarta");
$tanggal=date("Y-m-d");
$jam=date("H:i:s");

//saat TAP1
//tap1.php?rfid=115-42-107-121&image=ktp1.jpg&gate=1&ket=ok

//if(isset($_POST["rfid"])){
$NF=$_FILES["fileToUpload"]["name"];
$rfid=trim(htmlentities($_REQUEST["rfid"]));
$gate=trim(htmlentities($_REQUEST["gate"]));

$target_dir = "ypathfile/";
$datum = date('H-i-s')." ".date('d-m-Y');
$image=$datum . basename($NF);//KTP PICTURE
$target_file = $target_dir . $image;


$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
  
if (file_exists($target_file)) {
  echo "Sorry, file already exists.";
  $uploadOk = 0;
}
 
if ($_FILES["fileToUpload"]["size"] > 500000) {
  echo "Sorry, your file is too large.";
  $uploadOk = 0;
}

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
  echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
  $uploadOk = 0;
}
 
if ($uploadOk == 0) {
  echo "Sorry, your file was not uploaded.";
} else {
  if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
    echo "The file ". htmlspecialchars( basename( $_FILES["fileToUpload"]["name"])). " has been uploaded.";
  } else {
    echo "Sorry, there was an error uploading your file.";
  }
}

echo $sql="INSERT INTO `tb_aktifitas` (`tanggal`, `jam`,`tanggal2`, `jam2`, `rfid`, `image1`,`load`,`status`,`keterangan`) VALUES ('$tanggal', '$jam','$tanggal', '$jam', '$rfid', '$image', '0','Datang','Gate $gate')";
$simpan=processM($conn,$sql);

//}

//DATANG-PROSES-PULANG
//->0(datang)
//->1(tap ke-2 agar bs di load ajax) =where load='0', jk ada lalu diubah mnjadi 1 
//->2(saat diload ajax) =where load=1
//load1.php?gate=1 and `load`=1 menampilkan WELCOME (Selama LOAD=1):ARTINYA GAK BS Uyel2an...
//simpankunjungan.php  =, Update laod dari 1 mnjadi 2


//tap1.php?rfid=115-42-107-121&gate=1&image=ktp1.jpg&ket=ok
//tap2.php?rfid=115-42-107-121&gate=1&image=pic1.jpg&ket=ok




?>

Selasa, 08 Desember 2020

KeyPad Code Live

 


void setup() {

  Serial.begin(9600);

  timbangan.set_scale(2280.0); // Tukar dengan faktor penyekala Anda

  timbangan.tare(100);

  lcd.begin();           // Inisialisasi LCD

}


void loop() {

  cekKeyPad();


  if (sbreak == false) {

    goExe();

  }

}


void cekKeyPad() {

  char keypressed = myKeypad.getKey();

  if (keypressed) {

    Serial.print(keypressed);

    if (keypressed == 'A') {

      sbreak = true;

      setmin = "";

      setMin();

      smin = true;

    }

    else if (keypressed == 'B') {

      sbreak = true;

      setmax = "";

      setMax();

      smax = true;

    }

    else if (keypressed == 'C') { 

      cekset();

      sbreak = true;

    }

    else if (keypressed == 'D') { 

      sbreak = true;

      setrecal = "";

      setRecal();

      srecal = true;

    }

    else if (keypressed == '*') {

      lcd.clear();

      smin = false;

      smax= false;

      srecal = false;

      setrecal=String(targetrecal);

      setmax=String(targetmax);

      setmin=String(targetmin);

      

      thx("Kembali ke Defult");

      sbreak = false;

    }

    else  if (keypressed == '#') {

          if (smin == true) {

             targetmin = setmin.toInt();

             smin = false;

             thx("Sukses SET MIN");

          }

          else if (smax == true) {

             targetmax = setmax.toInt();

             smax = false;

            thx("Sukses SET MAX");

          }

          else if (srecal == true) {

            targetrecal = setrecal.toInt();

             srecal = false;

            thx("Sukses SET RECAL");

          }    

      }


      

    if (smin == true) {

      if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' || keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' || keypressed == '8' || keypressed == '9') {

        setmin = setmin + keypressed;

        setLiveMin();

      }

    }

    else if (smax == true) {

      if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' || keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' || keypressed == '8' || keypressed == '9') {

        setmax = setmax + keypressed;

        setLiveMax();

      }

    }

    else if (srecal == true) {

      if (keypressed == '0' || keypressed == '1' || keypressed == '2' || keypressed == '3' || keypressed == '4' || keypressed == '5' || keypressed == '6' || keypressed == '7' || keypressed == '8' || keypressed == '9') {

        setrecal = setrecal + keypressed;

        setLiveRecal();

      }

    }

  }

}


void  goExe() {

  float berat = timbangan.get_units();

  Serial.println(berat, 1);

  Serial.print("recal :");

  Serial.println(targetrecal);

  Serial.print("hasil :");

  Serial.println(hasil);

  lcd.setCursor(0, 0);

  lcd.print("berat= ");

  lcd.print(berat);

  lcd.print("      ");

  lcd.setCursor(0, 2);

  lcd.print("                 ");


  hasil = berat - targetrecal;


  if (hasil > targetmax) {

    lcd.setCursor(0, 3);

    lcd.print("berat lebih");


  }  else if (hasil < targetmin) {

    lcd.setCursor(0, 3);

    lcd.print("berat kurang");

  }

  else {

    lcd.setCursor(0, 3);

    lcd.print("                ");

  }

  delay(500);

}



void setMax() {

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print("MASUKAN DATA   :");

  lcd.setCursor(0, 1);

  lcd.print("max :");

  lcd.print("                ");

  delay(300);

}


void setMin() {

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print("MASUKAN DATA   :");

  lcd.setCursor(0, 1);

  lcd.print("min :");

  lcd.print("                ");

  delay(300);

}

void setRecal() {

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print("MASUKAN DATA   :");

  lcd.setCursor(0, 1);

  lcd.print("reacli :");

  lcd.print("                ");

  delay(300);

}


void setLiveMin() {

  Serial.print("MASUKAN DATA    :");

  Serial.println("min :" + setmin);

  lcd.setCursor(0, 0);

  lcd.print("MASUKAN DATA   :");

  lcd.setCursor(0, 1);

  lcd.print("min :");

  lcd.print(setmin);

  lcd.print("                ");

  delay(300);

}


void setLiveMax() {

  lcd.setCursor(0, 0);

  lcd.print("MASUKAN DATA   :");

  lcd.setCursor(0, 1);

  lcd.print("max :");

  lcd.print(setmax);

  lcd.print("                ");

  Serial.print("MASUKAN DATA    :");

  Serial.println("max :" + setmax);

  delay(300);

}


void setLiveRecal() {

  lcd.setCursor(0, 0);

  lcd.print("MASUKAN DATA   :");

  lcd.setCursor(0, 1);

  lcd.print("recali :");

  lcd.print(setrecal);

  lcd.print("                ");

  Serial.print("MASUKAN DATA    :");

  Serial.println("recal :" + setrecal);

  delay(300);

}


void cekset() {

  lcd.clear();

  lcd.setCursor(0, 0);

  lcd.print("cek setingan");

  lcd.setCursor(0, 1);

  lcd.print("min :");

  lcd.print(setmin);

  lcd.setCursor(0, 2);

  lcd.print("max :");

  lcd.print(setmax);

  lcd.setCursor(0, 3);

  lcd.print("recal :");

  lcd.print(setrecal);

  delay(300);

}

void thx(String pesan) {

  lcd.setCursor(0, 0);

  lcd.print("Sukses Eksekusi");

  lcd.setCursor(0, 1);

  lcd.print(pesan);

  lcd.print("                ");

  Serial.println(pesan);

  Serial.println("THX");

  delay(300);

}

Rabu, 01 Juli 2020

HOW SENT AND RECEIVE DATA TO IOT

Ceritanya kita akan mengirim data sensot dan menerima feetback dari server dengan kode @4!
nanti tanda 4 aan kita kalibraskan untuk kontrol alat


1.Buat Initialisasi Timer (Misalkan)

unsigned long lastConnectionTime = 0;       
const unsigned long postingInterval = 10*1000;
String gab="",perintah="";
boolean sudah=false;


2.Pada Loop:

void loop(){
  while (client.available()) {
    char c = client.read();
   // Serial.write(c);
    if(c=='!'){sudah=false;}
    if(sudah==true){
        gab=gab+String(c);
      }
    if(c=='@'){sudah=true;}
  }
.
.
..


3.Buktikan jika data dari server diperoleh,,,,
  if(gab.length()>0){ 
    Serial.println("");
    Serial.println("~~~~~~~~~~#"+gab+"#~~~~~~~~~~");
    Serial.println("");
    perintah=gab;
    gab="";
   }
 if (millis() - lastConnectionTime > postingInterval) {
    httpRequest();
  }


btn1 = digitalRead(button1);
  btn2 = digitalRead(button2);
  btn3 = digitalRead(button3);

  if (btn1 == HIGH || perintah=="4") {
    servo.write(0);
    stusia = 1;
     perintah="";
  }
  else if (btn2 == HIGH || perintah=="2") {
    servo.write(90);
    stusia = 2;
    perintah="";
  }
  else if (btn3 == HIGH || perintah=="3") {
    servo.write(100);
    stusia = 3;
    perintah="";
  }


void httpRequest() {
  client.stop();
  if (client.connect(server, 80)) {
    //Serial.println("connecting...");
    url = "/websaya/simpan.php?status=0&id_alat=" + String(IDALAT) + "&sisa_cairan=" + String(ML) + "&detak_jantung=" + String(sensorjantung_value) + "&laju_infus=" + String(TetesPerMenit) + "&catatan=1&ket=ok";
    //Serial.println(url);
    
    client.print(String ("GET " ) + url + " HTTP/1.1\r\n" + "Host: 192.168.0.107\r\n" + "Connection: close\r\n\r\n");    
    client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    client.println();

    lastConnectionTime = millis();
  } 
}

}//loop



Atau mngkin butuh koding split untuk memilah data nanatinya
String value1 = splitString(gab, '@', 0);
String value2 = splitString(gab, '@', 1);

String splitString(String str, char sep, int index){
  int found = 0;
  int strIdx[] = { 0, -1 };
  int maxIdx = str.length() - 1;

  for (int i = 0; i <= maxIdx && found <= index; i++)
  {
    if (str.charAt(i) == sep || i == maxIdx)
    {
      found++;
      strIdx[0] = strIdx[1] + 1;
      strIdx[1] = (i == maxIdx) ? i + 1 : i;
    }
  }
  return found > index ? str.substring(strIdx[0], strIdx[1]) : "";
}




NB ini adalah pengembanga dari Contoh koding arduino bawaanyaa...


#include <SPI.h>
#include <Ethernet.h>

// assign a MAC address for the ethernet controller.
// fill in your address here:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
// Set the static IP address to use if the DHCP fails to assign
IPAddress ip(192, 168, 0, 177);
IPAddress myDns(192, 168, 0, 1);

// initialize the library instance:
EthernetClient client;

char server[] = "www.arduino.cc";  // also change the Host line in httpRequest()
//IPAddress server(64,131,82,241);

unsigned long lastConnectionTime = 0;           // last time you connected to the server, in milliseconds
const unsigned long postingInterval = 10*1000;  // delay between updates, in milliseconds

void setup() {
  // You can use Ethernet.init(pin) to configure the CS pin
  //Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit Featherwing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit Featherwing Ethernet

  // start serial port:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // start the Ethernet connection:
  Serial.println("Initialize Ethernet with DHCP:");
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // Check for Ethernet hardware present
    if (Ethernet.hardwareStatus() == EthernetNoHardware) {
      Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
      while (true) {
        delay(1); // do nothing, no point running without Ethernet hardware
      }
    }
    if (Ethernet.linkStatus() == LinkOFF) {
      Serial.println("Ethernet cable is not connected.");
    }
    // try to congifure using IP address instead of DHCP:
    Ethernet.begin(mac, ip, myDns);
    Serial.print("My IP address: ");
    Serial.println(Ethernet.localIP());
  } else {
    Serial.print("  DHCP assigned IP ");
    Serial.println(Ethernet.localIP());
  }
  // give the Ethernet shield a second to initialize:
  delay(1000);
}

void loop() {
  // if there's incoming data from the net connection.
  // send it out the serial port.  This is for debugging
  // purposes only:
  if (client.available()) {
    char c = client.read();
    Serial.write(c);
  }

  // if ten seconds have passed since your last connection,
  // then connect again and send data:
  if (millis() - lastConnectionTime > postingInterval) {
    httpRequest();
  }

}

// this method makes a HTTP connection to the server:
void httpRequest() {
  // close any connection before send a new request.
  // This will free the socket on the WiFi shield
  client.stop();

  // if there's a successful connection:
  if (client.connect(server, 80)) {
    Serial.println("connecting...");
    // send the HTTP GET request:
    client.println("GET /latest.txt HTTP/1.1");
    client.println("Host: www.arduino.cc");
    client.println("User-Agent: arduino-ethernet");
    client.println("Connection: close");
    client.println();

    // note the time that the connection was made:
    lastConnectionTime = millis();
  } else {
    // if you couldn't make a connection:
    Serial.println("connection failed");
  }
}