Loading...
Vietnam Geography App
Loading...
Vietnam Geography App
Khám phá sức mạnh thực sự của Arduino qua dự án IoT thông minh! Tự tay thiết kế trạm giám sát môi trường hiện đại, kết nối nhiều cảm biến, truyền dữ liệu lên cloud, xử lý realtime, tạo giao diện trực quan và điều khiển thiết bị từ xa. Làm chủ công nghệ, sáng tạo giải pháp phục vụ cuộc sống và chinh phục các cuộc thi lớn! 🚀
/*
Smart Environmental Monitoring Station
Complete IoT project với multiple sensors và cloud integration
*/
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <DHT.h>
#include <Wire.h>
#include <Adafruit_SSD1306.h>
#include "time.h"
// Configuration
const char* ssid = "YourWiFi";
const char* password = "YourPassword";
const char* serverURL = "http://your-api-endpoint.com/data";
// Sensors
#define DHT_PIN 4
#define LDR_PIN A0
#define SOIL_PIN A1
#define DHT_TYPE DHT22
DHT dht(DHT_PIN, DHT_TYPE);
Adafruit_SSD1306 display(128, 64, &Wire, -1);
// Data structure
struct SensorData {
float temperature;
float humidity;
int lightLevel;
int soilMoisture;
String timestamp;
};
// Timing
unsigned long lastReading = 0;
unsigned long lastUpload = 0;
const unsigned long READING_INTERVAL = 5000; // 5 seconds
const unsigned long UPLOAD_INTERVAL = 300000; // 5 minutes
void setup() {
Serial.begin(115200);
// Initialize sensors
dht.begin();
// Initialize display
if(!display.begin(SSD1306_SWITCHCAPVCC, 0x3C)) {
Serial.println("SSD1306 allocation failed");
}
// Connect WiFi
connectWiFi();
// Configure time
configTime(7 * 3600, 0, "pool.ntp.org");
Serial.println("Environmental Monitoring Station Ready");
}
void loop() {
unsigned long currentTime = millis();
// Read sensors periodically
if (currentTime - lastReading >= READING_INTERVAL) {
SensorData data = readSensors();
displayData(data);
lastReading = currentTime;
// Upload data periodically
if (currentTime - lastUpload >= UPLOAD_INTERVAL) {
uploadData(data);
lastUpload = currentTime;
}
}
delay(100);
}
SensorData readSensors() {
SensorData data;
data.temperature = dht.readTemperature();
data.humidity = dht.readHumidity();
data.lightLevel = map(analogRead(LDR_PIN), 0, 4095, 0, 100);
data.soilMoisture = map(analogRead(SOIL_PIN), 0, 4095, 100, 0);
data.timestamp = getTimeString();
// Validate readings
if (isnan(data.temperature)) data.temperature = -999;
if (isnan(data.humidity)) data.humidity = -999;
return data;
}
void displayData(SensorData data) {
display.clearDisplay();
display.setTextSize(1);
display.setTextColor(SSD1306_WHITE);
display.setCursor(0, 0);
display.println("Environmental Monitor");
display.println();
display.print("Temp: ");
display.print(data.temperature);
display.println(" C");
display.print("Humidity: ");
display.print(data.humidity);
display.println("%");
display.print("Light: ");
display.print(data.lightLevel);
display.println("%");
display.print("Soil: ");
display.print(data.soilMoisture);
display.println("%");
display.display();
}
void uploadData(SensorData data) {
if (WiFi.status() == WL_CONNECTED) {
HTTPClient http;
http.begin(serverURL);
http.addHeader("Content-Type", "application/json");
// Create JSON payload
StaticJsonDocument<300> doc;
doc["temperature"] = data.temperature;
doc["humidity"] = data.humidity;
doc["light"] = data.lightLevel;
doc["soil"] = data.soilMoisture;
doc["timestamp"] = data.timestamp;
String jsonString;
serializeJson(doc, jsonString);
int httpResponseCode = http.POST(jsonString);
if (httpResponseCode > 0) {
Serial.print("Data uploaded successfully: ");
Serial.println(httpResponseCode);
} else {
Serial.print("Upload failed: ");
Serial.println(httpResponseCode);
}
http.end();
}
}
void connectWiFi() {
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected! IP: ");
Serial.println(WiFi.localIP());
}
String getTimeString() {
struct tm timeinfo;
if (!getLocalTime(&timeinfo)) {
return "N/A";
}
char timeStr[30];
strftime(timeStr, sizeof(timeStr), "%Y-%m-%d %H:%M:%S", &timeinfo);
return String(timeStr);
}
Tạo trạm thời tiết hoàn chỉnh với weather prediction
Automated garden với watering, lighting và monitoring
Agricultural automation systems
Smart building management
Environmental research stations
Industrial process monitoring
Educational demonstration platforms