#include <WiFi.h>
#include <ThingsBoard.h>
#include <PubSubClient.h>
#include <ArduinoJson.h>
const byte buzz_Pin = 19;
const byte trig_Pin = 26;
const byte echo_Pin = 25;
const byte pir_Pin = 27;
//BUZZER
int freqB = 900;
int chanlB = 0;
int resoB = 8;
int dutyCycleB = 128;
//ULTRASONIC SENSOR
float waktu, jarak;
//THINGSBOARD + WIFI
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
const char* Token_Tb ="Qyljr5bppiw12jTef2kK";
const char* Server_Tb ="thingsboard.cloud";
WiFiClient espClient;
ThingsBoard tb(espClient);
int status = WL_IDLE_STATUS;
void InitWiFi()
{
Serial.println("Connecting to AP ...");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.print(".");
}
Serial.println("Connected to AP");
}
void reconnect()
{
status = WiFi.status();
if ( status != WL_CONNECTED)
{
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED)
{
delay(1000);
Serial.print(".");
}
Serial.println("Connected to AP");
}
}
void setup() {
Serial.begin(115200);
//pinMode(buzz_Pin, OUTPUT);
pinMode(trig_Pin, OUTPUT);
pinMode(echo_Pin, INPUT);
pinMode(pir_Pin, INPUT_PULLUP);
ledcSetup(chanlB, freqB, resoB);
ledcAttachPin(buzz_Pin, chanlB);
InitWiFi();
}
void loop() {
delay(1000); // this speeds up the simulation
if (WiFi.status() != WL_CONNECTED) {
reconnect();
}
if (!tb.connected()) {
// Connect to the ThingsBoard
Serial.print("Connecting to: ");
Serial.print(Server_Tb);
Serial.print(" with token ");
Serial.println(Token_Tb);
if (!tb.connect(Server_Tb, Token_Tb)) {
Serial.println("Failed to connect");
return;
}
}
Serial.println("Sending data...");
// Uploads new telemetry to ThingsBoard using MQTT.
// See https://thingsboard.io/docs/reference/mqtt-api/#telemetry-upload-api
// for more details
digitalWrite(trig_Pin, HIGH);
delayMicroseconds(100);
digitalWrite(trig_Pin, LOW);
waktu = pulseIn(echo_Pin, HIGH);
jarak = 0.017 * waktu;
int pirSensor = digitalRead(pir_Pin);
tb.sendTelemetryInt("JARAK", jarak);
tb.sendTelemetryInt("GERAKAN", pirSensor);
if(pirSensor == 1){
Serial.println("=== GERAKKAN TERDETEKSI ===");
ledcWrite(chanlB, dutyCycleB);
Serial.println(chanlB);
delay(300);
if (jarak < 399) {
Serial.print("=== JARAK : ");
Serial.print(jarak);
Serial.println(" cm ===");
delay(300);
}
else {
Serial.print("=== JARAK LEBIH DARI ");
Serial.print(jarak);
Serial.println(" cm ===");
delay(300);
}
}
else{
Serial.println("~TIDAK ADA GERAKAN~");
ledcWrite(chanlB, 0);
(jarak = 0);
delay(1000);
}
tb.loop();
}