#define LED 25
#if defined(ESP8266)
#include <ESP8266WiFi.h>
#elif defined(ESP32)
#include <WiFi.h>
#endif
#include "ThingsBoard.h"
#include <Wire.h>
#include "ESP32Servo.h" //Sertakan library Servo
#include <HCSR04.h> //Library HCSR04
#include "RTCDS1307.h"
#include "RTClib.h"
#define CURRENT_FIRMWARE_TITLE "TEST"
#define CURRENT_FIRMWARE_VERSION "1.0.0"
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASSWORD ""
#define TOKEN "o8aIQVAl3sscqKOpIY0B"
#define THINGSBOARD_SERVER "thingsboard.cloud"
// Baud rate for debug serial
#define SERIAL_DEBUG_BAUD 115200
RTC_DS1307 rtc;
Servo myservo;
//variabel untuk perhitungan sudut putar
String waktu;
int sudut;
const int trigPin = 5;
const int echoPin = 18;
float TinggiSensor = 300; //Tinggi pemasangan sensor
float TingkatPakan = 0; //Tingkat Pakan
unsigned long TSekarang;
unsigned long TAkhir;
// Initialize ThingsBoard client
WiFiClient espClient;
// Initialize ThingsBoard instance
ThingsBoard tb(espClient);
// the Wifi radio's status
int status = WL_IDLE_STATUS;
void InitWiFi()
{
Serial.println("Connecting to AP ...");
// attempt to connect to WiFi network
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
void reconnect() {
// Loop until we're reconnected
status = WiFi.status();
if ( status != WL_CONNECTED) {
WiFi.begin(WIFI_SSID, WIFI_PASSWORD);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("Connected to AP");
}
}
void setup() {
Serial.begin(SERIAL_DEBUG_BAUD); // Starts the serial communication
Serial.println();
InitWiFi();
#ifndef ESP32
while (!Serial); // wait for serial port to connect. Needed for native USB
#endif
if (! rtc.begin()) {
Serial.println("Couldn't find RTC");
Serial.flush();
abort();
}
myservo.attach(13); // servo terhubung pin 13
pinMode(trigPin, OUTPUT);
pinMode(echoPin, INPUT);
pinMode(LED, OUTPUT);
}
void loop() {
delay(1000);
if (WiFi.status() != WL_CONNECTED) {
reconnect();
}
if (!tb.connected()) {
// Connect to the ThingsBoard
Serial.print("Connecting to: ");
Serial.print(THINGSBOARD_SERVER);
Serial.print(" with token ");
Serial.println(TOKEN);
if (!tb.connect(THINGSBOARD_SERVER, TOKEN)) {
Serial.println("Failed to connect");
return;
}
}
Serial.println("Sending data...");
DateTime time = rtc.now();
char buf1[] = "hh:mm";
waktu = Serial.println(time.toString(buf1));
delay(500);
if(waktu == "08:00"){
digitalWrite(LED, HIGH);
delay(5000);
digitalWrite(LED, LOW);
}
else if(waktu == "17:00"){
digitalWrite(LED, HIGH);
delay(5000);
digitalWrite(LED, LOW);
}
//membaca sinyal analog input di Analog
sudut = analogRead(34);
//konversi hasil analog (0-1023) menjadi hasil sudut (0-180)
sudut = map(sudut, 0, 255.75, 0, 180);
//set posisi sudut motor servo
myservo.write(sudut);
delay(100);
//membaca jumlah Pakan
digitalWrite(trigPin, LOW);
delayMicroseconds(2);
digitalWrite(trigPin, HIGH);
delayMicroseconds(10);
digitalWrite(trigPin, LOW);
int duration = pulseIn(echoPin, HIGH);
float distance = duration * 0.034 / 2;
TSekarang = millis();
if(TSekarang - TAkhir > 1000){ //Baca sensor setiap 1 detik
TingkatPakan = TinggiSensor - distance; //Rumus mencari tinggi pakan
if(TingkatPakan < 0){
TingkatPakan = 0;
}
else if(TingkatPakan > 300){
TingkatPakan = 300;
}
TingkatPakan = map(TingkatPakan, 0, 300, 0, 100); //Ubah ke persen(%)
TAkhir = TSekarang;
}
Serial.print("Ketersediaan Makanan (%): ");
Serial.println(TingkatPakan);
tb.sendTelemetryFloat("Ketersediaan Makanan (%)", TingkatPakan);
tb.loop();
tb.loop();
}
esp:VIN
esp:GND.2
esp:D13
esp:D12
esp:D14
esp:D27
esp:D26
esp:D25
esp:D33
esp:D32
esp:D35
esp:D34
esp:VN
esp:VP
esp:EN
esp:3V3
esp:GND.1
esp:D15
esp:D2
esp:D4
esp:RX2
esp:TX2
esp:D5
esp:D18
esp:D19
esp:D21
esp:RX0
esp:TX0
esp:D22
esp:D23
servo1:GND
servo1:V+
servo1:PWM
pot1:GND
pot1:SIG
pot1:VCC
ultrasonic1:VCC
ultrasonic1:TRIG
ultrasonic1:ECHO
ultrasonic1:GND
rtc1:GND
rtc1:5V
rtc1:SDA
rtc1:SCL
rtc1:SQW
led1:A
led1:C
r1:1
r1:2