ค่าปัจจุบัน: กำลังโหลด…
แจกโค้ดฟรี AERDUINO
define BLYNK_PRINT Serial
define BLYNK_TEMPLATE_ID "YOUR_TEMPLATE_ID"
define BLYNK_TEMPLATE_NAME "YOUR_TEMPLATE_NAME"
define BLYNK_AUTH_TOKEN "YOUR_BLYNK_AUTH_TOKEN"
include
include
include
include
include
include
include
include
LiquidCrystal_PCF8574 lcd(0x27);
// 🔐 WiFi Credentials
define WIFI_SSID "YOUR_WIFI_SSID"
define WIFI_PASSWORD "YOUR_WIFI_PASSWORD"
// 🔐 Firebase Credentials
define API_KEY "YOUR_FIREBASE_API_KEY"
define DATABASE_URL "YOUR_FIREBASE_DATABASE_URL"
// 🔐 Firebase Authentication
define USER_EMAIL "YOUR_FIREBASE_EMAIL"
define USER_PASSWORD "YOUR_FIREBASE_PASSWORD"
FirebaseData fbdo;
FirebaseAuth auth;
FirebaseConfig config;
unsigned long sendDataPrevMillis = 0;
unsigned int pm2_5 = 0;
// ขา RX และ TX ของเซนเซอร์ PM2.5
SoftwareSerial mySerial(D3, D4); // RX, TX
void checkBlynkConnection() {
if (!Blynk.connected()) {
Serial.println("Blynk Disconnected! Reconnecting…");
Blynk.connect();
}
}
void readPM25() {
int index = 0;
char value;
char previousValue;
unsigned int tempPM2_5 = 0;if (mySerial.available()) { Serial.println("Reading Sensor Data..."); } while (mySerial.available()) { value = mySerial.read(); Serial.print("Byte ["); Serial.print(index); Serial.print("]: "); Serial.println(value, HEX); if ((index == 0 && value != 0x42) || (index == 1 && value != 0x4D)) { Serial.println("Cannot find the data header."); break; } if (index == 6) { previousValue = value; } else if (index == 7) { tempPM2_5 = 256 * previousValue + value; Serial.print("Calculated PM2.5: "); Serial.println(tempPM2_5); // ส่งค่าไปยัง Blynk if (Blynk.connected()) { Blynk.virtualWrite(V2, tempPM2_5); } // อัปเดตค่า PM2.5 บน LCD เฉพาะเมื่อค่ามีการเปลี่ยนแปลง if (pm2_5 != tempPM2_5) { pm2_5 = tempPM2_5; lcd.setCursor(0, 0); lcd.print("PM2.5: "); lcd.setCursor(7, 0); lcd.print(pm2_5); lcd.print("ug"); } break; } index++; } while (mySerial.available()) { mySerial.read(); }
}
// ✅ ฟังก์ชันสำหรับส่งค่าขึ้น Firebase
void sendToFirebase() {
if (Firebase.ready() && (millis() - sendDataPrevMillis > 10000 || sendDataPrevMillis == 0)) {
sendDataPrevMillis = millis();Serial.println("Sending PM2.5 data to Firebase..."); if (Firebase.setInt(fbdo, "/sensor/pm2_5", pm2_5)) { Serial.println("PM2.5 data sent successfully."); } else { Serial.println("Failed to send PM2.5 data: " + fbdo.errorReason()); } Serial.println("------------------------------------------------"); }
}
void setup() {
Serial.begin(115200);
mySerial.begin(9600);// ตั้งค่า LCD lcd.begin(16, 2); lcd.setBacklight(255); lcd.setCursor(0, 0); lcd.print("Initializing..."); // เชื่อมต่อ WiFi WiFi.begin(WIFI_SSID, WIFI_PASSWORD); Serial.print("Connecting to WiFi..."); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" Connected!"); lcd.clear(); lcd.setCursor(0, 0); lcd.print("WiFi Connected!"); Blynk.begin(BLYNK_AUTH_TOKEN, WIFI_SSID, WIFI_PASSWORD); // 🔥 ตั้งค่า Firebase config.api_key = API_KEY; auth.user.email = USER_EMAIL; auth.user.password = USER_PASSWORD; config.database_url = DATABASE_URL; config.token_status_callback = tokenStatusCallback; Firebase.reconnectNetwork(true); fbdo.setBSSLBufferSize(4096, 1024); Firebase.begin(&config, &auth); Firebase.setDoubleDigits(5); Serial.println("Firebase setup completed!");
}
void loop() {
checkBlynkConnection();
readPM25();
sendToFirebase(); // 📌 เรียกใช้ฟังก์ชันส่งค่าไป Firebase
delay(1000);
Blynk.run();
}