ESP32 มี MCU 2 Cores และยังมี FreeRTOS มาช่วยงานอีก เราจึงสามารถแบ่งการทำงานแบบ Multitask ได้ โดยทุก TASK จะทำงานได้อย่างอิสระไม่ยุ่งเกี่ยวต่อกัน จุดนี้เป็นจุดแข็งที่โดดเด่นของ ESP32 และเป็นจุดที่ผู้เขียนชอบมากที่สุด การเขียนโปรแกรมบนบอร์ด MCU 1 Core เช่น ESP8266 จะต้องระมัดระวังการเขียนโปรแกรมแบบ Blocking ให้ดี เช่นการใช้คำสั่ง delay() เพราะมันจะทำให้ทั้งบอร์ดหยุดชะงักไปเลย ทำอะไรต่อไม่ได้ จนกว่าจะหลุดจากคำสั่ง delay() ถึงแม้ว่าจะสามารถใช้ฟังก์ชัน Milli() และ Timer เข้าช่วยได้ก็ตามแต่มันก็เป็นการทำงาน MultiTask แบบจำลอง คือการแยกการทำงานออกเป็น Task บน MCU Core เดียวกัน และมันยังทำให้การเขียนโค๊ดค่อนข้างซับซ้อนเลยทีเดียว
“Logi Farm” จะแยกการทำงานออกเป็น TASK ย่อยๆ แล้วกำหนดให้มันทำหน้าที่ใครหน้าที่มัน ไม่ยุ่งเกี่ยวต่อกัน การทำแบบนี้ทำให้มันมีประสิทธิภาพในการทำงานมาก จะไม่ทำให้เกิดปัญหา wdt-reset เหมือน ESP8266/NodeMCU เวลาที่การเชื่อมต่อ WiFi มีปัญหา
อุปกรณ์ที่ใช้
บอร์ดพัฒนา ESP32 จำนวน 1 บอร์ด
รีเลย์ 2 Channels สถานะการทำงานเป็นแบบ LOW=ทำงาน, HIGH=ไม่ทำงาน ใช้ไฟเลี้ยง 5VDC จำนวน 1 โมดูล
เซ็นเซอร์วัดอุณหภูมิและความชื้น DHT11 ใช้ไฟเลี้ยง 3.3-5VDC จำนวน 1 โมดูล
ปั๊มน้ำทดลอง 3.3-5VDC แนะนำให้ใช้ไฟจากภายนอกจ่ายใช้งาน ถ้าต้องการให้ปั๊มทำงานได้อย่างเต็มความสามารถ จำนวน 1 ตัว
เซ็นเซอร์วัดความชื้นในดิน ใช้ไฟเลี้ยง 3.3-5VDC จำนวน 1 โมดูล
หลอดไฟ LED สี ขนาด 5mm จำนวน 2 ตัว
LDR (Light Dependent Resistor) 1 ตัว
R 330 ohm สำหรับหลอดไฟ LED จำนวน 2 ตัว
R 10k ohm สำหรับเซ็นเซอร์วัดความเข้มแสง จำนวน 1 ตัว
สวิตซ์กดดิบ ปล่อยดับ จำนวน 1 ตัว
บอร์ดทดลอง จำนวน 1 บอร์ด
สายต่อจั๊มเปอร์
ส่วนประกอบในการเขียนคำสั่ง
ส่วนของ Widget จะเป็นขา Vitual Pin ที่จะถูกนำไปใช้ใน Blynk Mobile APP
V1 Widget_Humidity คือเปอร์ค่าความชื้นที่ได้รับจากเซ็นเซอร์ DHT11 ใช้ Widget Guage ใน Blynk Mobile APP กำหนดค่าต่ำสุดเป็น 0 และสูงสุดคือ 100
V2 Widget_Temperature คือเปอร์ค่าอุณหภูมิที่ได้รับจากเซ็นเซอร์ DHT11 มีหน่วยเป็นหน่วยเป็นองศาเซลเซียส ใช้ Widget Guage ใน Blynk Mobile APP กำหนดค่าต่ำสุดเป็น 0 และสูงสุดคือ 50
V3 Widget_SoilRawValue คือค่าความชื้นของดินที่ได้รับจากเซ็นเซอร์ ตรงๆ(RAW Value) มีหน่วยเป็นค่า 12 บิต (ค่าที่ได้รับจะอยู่ในระหว่าง 0–4095) ใช้ Widget LABEL ใน Blynk Mobile APP
V4 Widget_SoilLevel คือค่าความชื้นของดินที่ได้รับจากเซ็นเซอร์ที่ได้รับการแปลงหน่วยแล้วในรูปแบบเปอร์เซ็นต์ ใช้ Widget ROW LEVEL ใน Blynk Mobile APP กำหนดค่าต่ำสุดเป็น 0 และสูงสุดคือ 100
V5 Widget_LightRawValue คือค่าความเข้มของแสงที่ได้รับจากเซ็นเซอร์ตรงๆ(RAW Value) มีหน่วยเป็นค่า 12 บิต (ค่าที่ได้รับจะอยู่ในระหว่าง 0–4095) ใช้ Widget LABEL ใน Blynk Mobile APP
V6 Widget_LightLevel คือค่าความเข้มของแสงที่ได้รับจากเซ็นเซอร์ที่ได้รับการแปลงหน่วยแล้วในรูปแบบเปอร์เซ็นต์ ใช้ Widget ROW LEVEL ใน Blynk Mobile APP กำหนดค่าต่ำสุดเป็น 0 และสูงสุดคือ 100
V7 Widget_WateringButton คือปุ่ม Button ที่สั่งให้ Relay ทำงานและสั่งให้ปั๊มน้ำเริ่มสูบน้ำรดต้นไม้ตามเวลาที่กำหนด
V8 Widget_SendSensorStatus คือสถานะการส่งข้อมูลเซ็นเซอร์ หลอดไฟ LED จะติดกระพริบ ถ้ามีการส่งข้อมูลไปยัง Blynk Server
V9 Widget_WateringStatus คือสถานะการทำงานของ Relay และปั๊มน้ำ หลอดไฟ LED จะติดสว่างถ้ามีการรดน้ำต้นไม้
V10 Widget_WifiSignal คือค่าสัญญาณของ WiFi ที่ได้รับการแปลงหน่วยแล้วในรูปแบบเปอร์เซ็นต์ ใช้ Widget ROW LEVEL ใน Blynk Mobile APP กำหนดค่าต่ำสุดเป็น 0 และสูงสุดคือ 100
V11 Widget_WifiRawValue คือค่าสัญญาณของ WIFI (RSSI) ในรูปแบบขอ RAW Value มีหน่วยเป็น dBm (ค่าที่ได้รับจะอยู่ในระหว่าง -40dBm ถึง -90dBm) ใช้ Widget LABEL ใน Blynk Mobile APP
V12 Widget_Terminal คือ Terminal แสดงข้อความประวัติพร้อมวันที่และเวลาการทำงานของ Relay และปั๊มน้ำ เมื่อมีการรดน้ำต้นไม้เสร็จสมบูรณ์