สวัสดีครับ ผมลองหัดใช้บอร์ด ESP32 ทำ smart farm โดยตอนแรกผมเริ่มจากหัดใช้ BLYNK อัพโหลดข้อมูลค่าจาก DHT111 แล้วก็หัดทำ Multitask จาก FreeRTOS แต่พอนำมารวมกันปรากฎว่า BLYNK เกิด connected สลับกับ Disconnected ตลอดเวลา
#define BLYNK_PRINT Serial
#include <WiFi.h>
#include <WiFiClient.h>
#include <BlynkSimpleEsp32.h>
#include <SimpleDHT.h>
#define RED 4
#define YELLOW 18
#define GREEN 19
char auth[] = "aHkW-RILCoBF9ErZgpyo4Bc1SqRRUI4I";
char ssid[] = xxxxxxxx";
char pass[] = "xxxxxxx";
int DHTSENSOR = 15;
SimpleDHT11 dht11;
BlynkTimer timer;
void sendSensor() {
//กำหนดตัวแปรเก็บค่าอุณหภูมิ
byte temperature = 0;
//กำหนดตัวแปรเก็บค่าความชื้นสัมสัทธ์
byte humidity = 0;
//อ่านค่าจากเซ็นเซอร์
dht11.read(DHTSENSOR, &temperature, &humidity, NULL);
while (temperature == 0) {
//อ่านค่าจากเซ็นเซอร์
dht11.read(DHTSENSOR, &temperature, &humidity, NULL);
Serial.println("DHT11 get failed");
delay(1500);
}
//ส่งค่า humidity V1 ไปยัง blynk server
Blynk.virtualWrite(V1, humidity);
//ส่งค่า temperature V2 ไปยัง blynk server
Blynk.virtualWrite(V2, temperature);
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print("% | ");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println("C");
}
void setup() {
Serial.begin(115200);
//เริ่มการเชื่อมต่อ Blynk Server
Blynk.begin(auth, ssid, pass);
//ตั้งเวลาส่งข้อมูลให้ Blynk Server ทุกๆ 5 วินาที
timer.setInterval(5000L, sendSensor);
xTaskCreate(redLedControllerTask, "RED LED Task", 128, NULL, 1, NULL);
xTaskCreate(greenLedControllerTask, "GREEN LED Task", 128, NULL, 1, NULL);
xTaskCreate(yellowLedControllerTask, "YELLOW LED Task", 128, NULL, 1, NULL);
}
void redLedControllerTask(void *pvParameters)
{
pinMode(RED, OUTPUT);
while (1)
{
delay(500);
digitalWrite(RED, digitalRead(RED) ^ 1);
}
}
void greenLedControllerTask(void *pvParameters)
{
pinMode(GREEN, OUTPUT);
while (1)
{
delay(1000);
digitalWrite(GREEN, digitalRead(GREEN) ^ 1);
}
}
void yellowLedControllerTask(void *pvParameters)
{
pinMode(YELLOW, OUTPUT);
while (1)
{
delay(2000);
digitalWrite(YELLOW, digitalRead(YELLOW) ^ 1);
}
}
void loop() {
Blynk.run();
timer.run();
}
ขอบคุณมากครับ