#include <WiFi.h>
#include <HTTPClient.h>
#include <DHT.h>
#include <Ultrasonic.h>
// ThinkSpeak API
String apiKey = "P4MQ75OOMRVJ26OX"; // Thay bằng API Key của ThinkSpeak
const char* server = "http://api.thingspeak.com/update";
// Khai báo cảm biến
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
Ultrasonic ultrasonic(18, 19);
// LDR module (4 chân)
const int LDR_A0_PIN = 34; // Chân A0 của LDR
void setup() {
Serial.begin(115200);
Serial.print("Connecting to WiFi");
WiFi.begin("Wokwi-GUEST", "", 6);
while (WiFi.status() != WL_CONNECTED) {
delay(100);
Serial.print(".");
}
Serial.println(" Connected!");
// Khởi động cảm biến
dht.begin();
ultrasonic.setTimeout(20000); // Tùy chọn, điều chỉnh timeout cho cảm biến siêu âm
}
void loop() {
// Đọc dữ liệu cảm biến
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
int ldrAnalogValue = analogRead(LDR_A0_PIN);
long distance = ultrasonic.read();
// Hiển thị dữ liệu ra Serial
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
Serial.print("Light (LDR Analog): ");
Serial.print(ldrAnalogValue);
Serial.println(" (ADC value)");
Serial.print("Distance: ");
Serial.print(distance);
Serial.println(" cm");
// Kiểm tra xem đã có kết nối WiFi chưa
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
// Tạo URL để gửi yêu cầu POST
String url = String(server) + "?api_key=" + apiKey +
"&field1=" + String(temperature) +
"&field2=" + String(humidity) +
"&field3=" + String(ldrAnalogValue) +
"&field4=" + String(distance);
http.begin(url); // Bắt đầu gửi yêu cầu
int httpCode = http.GET(); // Gửi yêu cầu GET
if (httpCode > 0) {
Serial.println("Data sent to ThinkSpeak");
} else {
Serial.println("Error sending data to ThinkSpeak");
}
http.end(); // Kết thúc kết nối HTTP
}
// Chờ 15 giây trước khi gửi dữ liệu lần tiếp theo (theo yêu cầu của ThinkSpeak)
delay(15000);
}