#include <WiFi.h>
#include <PubSubClient.h>
#include <ThingsBoard.h>
#include <ArduinoJson.h>
const byte buzz_pin = 12;
const byte trig_pin = 33;
const byte echo_pin = 32;
const byte pir_pin = 2;
// Buzzer
int freqB = 900;
int chanB = 0;
int resoB = 8;
int dutycycleB = 128;
// Ultrasonic
float waktu, jarak;
// WiFi and Thingsboard
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
const char* Token_Tb = "YOUR_THINGSBOARD_ACCESS_TOKEN";
const char* Server_Tb = "thingsboard.cloud";
WiFiClient espClient;
PubSubClient client(espClient);
ThingsBoardSized<8, 2, 5, 0> tb(client);
void setup() {
Serial.begin(115200);
pinMode(trig_pin, OUTPUT);
pinMode(echo_pin, INPUT);
pinMode(pir_pin, INPUT_PULLUP);
// LEDC setup
ledcSetup(chanB, freqB, resoB);
ledcAttach(buzz_pin, chanB);
// Connect to WiFi
Serial.print("Connecting to WiFi...");
WiFi.begin(ssid, pass);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println(" connected");
// Connect to MQTT Broker
client.setServer(Server_Tb, 1883);
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
if (client.connect("arduinoClient", Token_Tb, NULL)) {
Serial.println("connected");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
delay(5000);
}
}
}
void loop() {
// Main code to run repeatedly
digitalWrite(trig_pin, HIGH);
delayMicroseconds(100);
digitalWrite(trig_pin, LOW);
waktu = pulseIn(echo_pin, HIGH);
jarak = waktu * 0.017;
int pirSensor = digitalRead(pir_pin);
if (pirSensor == 1) {
Serial.println("GERAKAN TERDETEKSI");
ledcWrite(chanB, dutycycleB);
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(chanB, 0);
jarak = 0;
delay(1000);
}
// Send data to ThingsBoard
tb.sendTelemetryFloat("jarak", jarak);
tb.sendTelemetryBool("gerakan", pirSensor == 1);
// Handle MQTT client
client.loop();
}