// program 1 :
#include <Adafruit_MPU6050.h>
#include <Adafruit_Sensor.h>
#include <Wire.h>
#include <ThingSpeak.h> // Menambahkan Library ThingSpeak
#include <WiFi.h> // Menambahkan Library WiFi
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C LCD = LiquidCrystal_I2C(0x27, 16, 2);
#define NTP_SERVER "pool.ntp.org"
#define UTC_OFFSET 7 * 3600
#define UTC_OFFSET_DST 0
void spinner() {
static int8_t counter = 0;
const char* glyphs = "\xa1\xa5\xdb";
LCD.setCursor(15, 1);
LCD.print(glyphs[counter++]);
if (counter == strlen(glyphs)) {
counter = 0;
}
}
void printLocalTime() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
LCD.setCursor(0, 1);
LCD.println("Connection Err");
return;
}
LCD.setCursor(8, 0);
LCD.println(&timeinfo, "%H:%M:%S");
LCD.setCursor(0, 1);
LCD.println(&timeinfo, "%d/%m/%Y %Z");
}
const char * SSID = "Wokwi-GUEST"; // Nama WiFI
const char * PASS = ""; // Password WiFi
WiFiClient client;
Adafruit_MPU6050 mpu;
int LampuMerah = 14; // Lampu1 dihubungkan ke D14
int LampuKuning = 4; // Lampu2 dihubungkan ke D4
unsigned long ChannelNumber = 1938056; // Nomor Channel ThingSpeak
const char * ReadAPIKey = "2B1YK7JLC4G0CIBU"; // Nomor Read API key
const char * WriteAPIKey = "TSOK29L709UPSUXR"; // Nomor Write API key
const int FieldNumber1 = 1; // Nomor field 1
const int FieldNumber2 = 2; // Nomor field 2
const int FieldNumber3 = 3; // Nomor field 3
unsigned int FieldNumber4 = 4; // Nomor field 4
//=================================================================
#include "DHTesp.h"
const int DHT_PIN = 15;
DHTesp dhtSensor;
float Temp, Humidity;
//=============================
TaskHandle_t Task1;
TaskHandle_t Task2;
TaskHandle_t Task3;
TaskHandle_t Task4;
#define LedFlasher 23
void setup() {
// put your setup code here, to run once:
// Try to initialize LiquidCrystal_I2C!
Serial.begin(115200);
LCD.init();
LCD.backlight();
LCD.setCursor(0, 0);
LCD.print("Connecting to ");
LCD.setCursor(0, 1);
LCD.print("WiFi ");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(250);
spinner();
}
Serial.println("");
Serial.println("WiFi connected");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
Serial.println("---");
LCD.clear();
LCD.setCursor(0, 0);
LCD.println("Online");
LCD.setCursor(0, 1);
LCD.println("Updating time...");
configTime(UTC_OFFSET, UTC_OFFSET_DST, NTP_SERVER);
// Try to initialize MPU6050!
if (!mpu.begin()) {
Serial.println("Failed to find MPU6050 chip");
while (1) {
delay(10);
}
}
mpu.setAccelerometerRange(MPU6050_RANGE_16_G);
mpu.setGyroRange(MPU6050_RANGE_250_DEG);
mpu.setFilterBandwidth(MPU6050_BAND_21_HZ);
Serial.println("");
delay(100);
//============ LED =================
pinMode(LampuMerah, OUTPUT);
pinMode(LampuKuning, OUTPUT);
pinMode(LedFlasher, OUTPUT);
Serial.begin(115200);
Serial.println();
//============ WiFi =================
WiFi.begin(SSID, PASS);
Serial.print("Connecting");
while (WiFi.status() != WL_CONNECTED)
{
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected, IP address: ");
Serial.println(WiFi.localIP());
ThingSpeak.begin(client);
dhtSensor.setup(DHT_PIN, DHTesp::DHT22);
//============ Tasking1 =================
xTaskCreatePinnedToCore(
Task1code, /* Function to implement the task */
"Task1", /* Name of the task */
10000, /* Stack size in words */
NULL, /* Task input parameter */
0, /* Priority of the task */
&Task1, /* Task handle. */
0); /* Core where the task should run */
//============ Tasking2 =================
xTaskCreatePinnedToCore(
Task2code, /* Function to implement the task */
"Task2", /* Name of the task */
10000, /* Stack size in words */
NULL, /* Task input parameter */
0, /* Priority of the task */
&Task2, /* Task handle. */
0); /* Core where the task should run */
//============ Tasking3 =================
xTaskCreatePinnedToCore(
Task3code, /* Function to implement the task */
"Task3", /* Name of the task */
10000, /* Stack size in words */
NULL, /* Task input parameter */
0, /* Priority of the task */
&Task3, /* Task handle. */
0); /* Core where the task should run */
//============ Tasking4 =================
xTaskCreatePinnedToCore(
Task4code, /* Function to implement the task */
"Task4", /* Name of the task */
10000, /* Stack size in words */
NULL, /* Task input parameter */
0, /* Priority of the task */
&Task4, /* Task handle. */
0); /* Core where the task should run */
}
void Task1code( void * parameter) {
for(;;) {
digitalWrite(LedFlasher, HIGH);
delay(250);
digitalWrite(LedFlasher, LOW);
delay(250);
}
}
void Task2code( void * parameter) {
for(;;) {
sensors_event_t a, g, temp;
mpu.getEvent(&a, &g, &temp);
/* Print out the values */
Serial.print(a.acceleration.x);
Serial.print(",");
Serial.print(g.gyro.x);
Serial.println("");
delay(10);
int mpu= ThingSpeak.writeField(ChannelNumber, FieldNumber4, a.acceleration.x, WriteAPIKey);
if (mpu == 200)
{
Serial.println("Field4 Update Successful");
Serial.println("---");
}
else{
Serial.println("Problem Updating Field4. HTP error " + String(mpu));
Serial.println("---");
}
delay(300000); // 5menit
}
}
void Task3code( void * parameter) {
for(;;) {
printLocalTime();
delay(250);
}
}
void Task4code(void * parameter) {
for(;;) {
TempAndHumidity data = dhtSensor.getTempAndHumidity();
Temp = data.temperature;
Humidity = data.humidity;
Serial.println("Temp: " + String(Temp, 2) + "°C");
Serial.println("Humidity: " + String(Humidity, 1) + "%");
int Status= ThingSpeak.writeField(ChannelNumber, FieldNumber3, Temp, WriteAPIKey);
if (Status == 200)
{
Serial.println("Field3 Update Succesful");
Serial.println("---");
}
else{
Serial.println("Problem Updating Field3. HTP error " + String(Status));
Serial.println("---");
}
delay(300000); // 5mnit
}
}
void loop() {
// put your main code here, to run repeatedly:
int A = ThingSpeak.readLongField(ChannelNumber, FieldNumber1, ReadAPIKey);
int B = ThingSpeak.readLongField(ChannelNumber, FieldNumber2, ReadAPIKey);
if (A==1){
Serial.println("Lampu Merah ON");
Serial.println("---");
digitalWrite(LampuMerah, HIGH);
}
else if (A == 0){
Serial.println("Lampu Merah OFF");
Serial.println("---");
digitalWrite(LampuMerah, LOW);
}
//-------------------------------------------------------------
if (B==1){
Serial.println("Lampu Kuning ON");
Serial.println("---");
digitalWrite(LampuKuning, HIGH);
}
else if (B == 0){
Serial.println("Lampu Kuning OFF");
Serial.println("---");
digitalWrite(LampuKuning, LOW);
}
delay(10); // this speeds up the simulation
//================================================
}