ชุดการเรียนรู้ Smart Farm ชุดที่ 3 เรื่องการรับข้อมูลค่าความชื้นในดินเเละสั่งงานระบบรดน้ำต้นไม้

มาเรียนรู้ Coding กันเถอะ

#include <WiFi.h> และ #include <PubSubClient.h> คือ คำสั่งนี้ใช้เรียกใช้ไลบรารีสำหรับการเชื่อมต่อ Wi-Fi และ MQTT ซึ่งเป็นไลบรารีที่ใช้ในการเชื่อมต่อและสื่อสารผ่าน MQTT

const char* ssid และ const char* password คือ ค่าเหล่านี้เป็นชื่อและรหัสผ่านของเครือข่าย Wi-Fi ที่ต้องการเชื่อมต่อ

const char* mqtt_server คือ ค่านี้เป็นที่อยู่ของ MQTT Broker ที่คุณต้องการเชื่อมต่อไปยัง. ในกรณีนี้, MQTT Broker คือ “test.mosquitto.org”

กำหนดตัวแปรและอ็อบเจกต์ที่ใช้ในการเชื่อมต่อ MQTT Broker และเก็บข้อมูล รวมถึงตัวแปร value ที่ใช้ในการเก็บค่าต่าง ๆ

const float AirValue : ค่าความหนาแน่นของอากาศ ซึ่งต้องถูกแทนที่ด้วยค่าที่เหมาะสม (เช่น, Value_1). ค่านี้ใช้ในการวัดความชื้นในดิน

const float WaterValue : ค่าความหนาแน่นของน้ำ ซึ่งต้องถูกแทนที่ด้วยค่าที่เหมาะสม (เช่น, Value_2). ค่านี้ใช้ในการวัดความชื้นในดิน

const float RHScale : ค่าที่คำนวณจาก AirValue และ WaterValue เพื่อใช้ในการคำนวณความชื้นในดิน

float soilMoistureValue : ตัวแปรที่ใช้เก็บค่าความชื้นในดิน ซึ่งจะถูกคำนวณจากอ่านข้อมูลจากเซ็นเซอร์ความชื้นในดิน

char status[10] : ตัวแปรอาร์เรย์ข้อความสำหรับเก็บสถานะ (status) โดยมีขนาดสูงสุด 10 ตัวอักษร

float RH : ตัวแปรที่ใช้เก็บค่าความชื้นในดินที่คำนวณ.

float desRH : ค่าที่กำหนดเป็นความชื้นที่ต้องการให้ในดิน (เป็นค่าเปอร์เซ็นต์)

#include <Adafruit_Sensor.h>, #include <DHT.h>, #include <DHT_U.h> : คำสั่งเรียกใช้ไลบรารีและไลบรารีของ Adafruit ที่ใช้ในการอ่านข้อมูลจากเซ็นเซอร์ DHT.

#define DHTPIN 32 และ #define DHTTYPE DHT22 : ค่าคงที่ที่กำหนดขาที่เซ็นเซอร์ DHT เชื่อมต่อ (ในที่นี้เป็นขา 32) และประเภทของเซ็นเซอร์ DHT (ในที่นี้เป็น DHT22).

DHT_Unified dht(DHTPIN, DHTTYPE) : อ็อบเจกต์ของคลาส DHT_Unified ที่ใช้ในการติดต่อกับเซ็นเซอร์ DHT โดยใช้ขา DHTPIN และประเภท DHTTYPE.

uint32_t delayMS : ตัวแปรที่ใช้ในการกำหนดค่าการห่างเวลา.

#define Pump 17 : ค่าคงที่ที่กำหนดขาที่เป็นปั๊ม (ในที่นี้เป็นขา 17) ที่ถูกควบคุมเพื่อปั๊มน้ำ.

bool AutoPump = true : ตัวแปรบูลีนี่มีค่าเริ่มต้นเป็น true แสดงถึงการตั้งค่าการทำงานของปั๊มเป็นโหมดอัตโนมัติ.

bool onPump = false : ตัวแปรบูลีนี่มีค่าเริ่มต้นเป็น false แสดงถึงสถานะปั๊ม (เปิดหรือปิด) โดยใช้ในโหมดควบคุมด้วยมือ.

#define CMD_AUTO “auto” และ #define CMD_MANUAL “manual” : ค่าคงที่ที่กำหนดคำสั่ง “auto” และ “manual” ที่ใช้ในการสั่งการควบคุมปั๊ม.

ฟังก์ชัน setup_wifi() ใช้ในการกำหนดการเชื่อมต่อ Wi-Fi ของอุปกรณ์ Arduino โดยใช้ชื่อเครือข่าย (SSID) และรหัสผ่านของเครือข่าย Wi-Fi ที่คุณระบุ ซึ่งสามารถใช้ในการเชื่อมต่อกับเครือข่ายไร้สาย Wi-Fi

ฟังก์ชัน callback นี้, เมื่อได้รับข้อมูลจาก MQTT และตรวจสอบหัวข้อ (topic) ของข้อความ. หากหัวข้อเป็น “iot_kit/smart_farm/sensor”  จะแสดงข้อมูลที่รับได้รับบน Serial Monitor. หากหัวข้อเป็น “iot_kit/smart_farm/control” จะตรวจสอบข้อมูลเพื่อควบคุมการทำงานของปั๊มว่าเป็นการเปิดปิดหรือระบบอัตโนมัติและแสดงสถานะผ่าน Serial Monitor

ฟังก์ชัน reconnect() ที่ใช้ในการเชื่อมต่อหรือเชื่อมต่อใหม่กับเซิร์ฟเวอร์ MQTT หากการเชื่อมต่อสูญหายหรือไม่เชื่อมต่อในเริ่มต้น

ใน setup(), โค้ดกำหนดโหมดของขา BUILTIN_LED และ Pump เป็น OUTPUT, เปิด Serial Monitor สำหรับการสื่อสาร, เริ่มต้นเซ็นเซอร์ DHT, กำหนดการเชื่อมต่อ Wi-Fi, ตั้งค่า MQTT Broker, และกำหนดฟังก์ชัน callback สำหรับการรับข้อมูลผ่าน MQTT

ใน loop(), โค้ดตรวจสอบการเชื่อมต่อ MQTT และเชื่อมต่อใหม่ถ้าไม่เชื่อมต่ออยู่ และรับข้อมูล MQTT โดยใช้ client.loop() และจากนั้นอัปเดตค่าความชื้นในดินจากเซ็นเซอร์และส่งข้อมูลผ่าน MQTT ประมาณทุก 1 วินาที

ในส่วนนี้ของ loop(), คุณอัปเดตค่าอุณหภูมิและความชื้นจากเซ็นเซอร์ DHT และเพิ่มข้อมูลนี้ใน msg ที่จะถูกส่งผ่าน MQTT ทุก 1 วินาที

การตรวจสอบเวลาเพื่อส่งข้อมูลผ่าน MQTT ทุก 1 วินาที โดยแสดงข้อความที่จะส่งใน Serial Monitor และใช้ client.publish() เพื่อส่งข้อมูลไปยัง MQTT Broker

ใช้สำหรับตรวจสอบเวลาควบคุมการทำงานของปั๊มในโหมดอัตโนมัติ โดยตรวจสอบความชื้นในดิน (RH) และสถานะ AutoPump. หากความชื้นในดินต่ำกว่าค่าที่ต้องการ (desRH) และ AutoPump เปิดใช้งาน, จะเปิดปั๊ม แต่ถ้าความชื้นในดินมากกว่าหรือเท่ากับค่าที่ต้องการ, จะปิดปั๊ม

ตรวจสอบสถานะของปั๊ม (onPump) และโหมดการทำงานของปั๊ม (AutoPump) เพื่อควบคุมการทำงานของปั๊ม โดยปิดหรือเปิดปั๊มตามเงื่อนไขที่กำหนดในโหมด AutoPump หรือ Manual