อุปกรณ์ที่ต้องใช้ใน บทความ สอนใช้งาน ESP8266 Soil NPK Sensor เซ็นเซอร์วัดธาตุสารอาหารในดิน RS485 วัดค่า ไนโตรเจนในดิน ฟอสฟอรัส และโพแทสเซียม PR-3000-TR-NPK-N01
- NodeMCU ESP8266 V2 CP2102 LUA based ESP8266-12E
- สาย Micro USB Type B to USB 2.0 Type A ยาว 1 เมตร
- Power Adapter micro usb 5V 2A อะแดปเตอร์ 5V กระแส 2A
- MB-102 บอร์ดทดลอง Breadboard โฟโต้บอร์ด Protoboard 830 Point MB-102
- สายไฟจัมเปอร์ ผู้-ผู้ ยาว 20cm. จำนวน 40 เส้น
- สายไฟจัมเปอร์ ผู้-เมีย ยาว 20cm. จำนวน 40 เส้น
- สายไฟจัมเปอร์ เมีย-เมีย ยาว 20cm. จำนวน 40 เส้น
- Soil NPK Sensor เซ็นเซอร์วัดธาตุสารอาหารในดิน RS485 วัดค่า ไนโตรเจนในดิน ฟอสฟอรัส และโพแทสเซียม PR-3000-TR-NPK-N01
- MAX485 module RS485 module TTL turn RS – 485 module
- จอแสดงผล OLED 128×64 V2.0 แบบ I2C ขนาด 0.96″ สีขาว
- จอแสดงผล OLED 128×64 V2.0 แบบ I2C ขนาด 0.96″ สีน้ำเงิน
- จอแสดงผล OLED 128×64 V2.0 แบบ I2C ขนาด 0.96″ สีน้ำเงินเหลือง
วิธีการต่ออุปกรณ์ สอนใช้งาน ESP8266 Soil NPK Sensor เซ็นเซอร์วัดธาตุอาหารในดิน วัดค่าไนโตรเจน ฟอสฟอรัส โพแทสเซียม
1.เชื่อมต่ออุปกรณ์ตามด้านล่าง
ESP8266 -> RS485 module
• Vin(5VDC) -> VCC
• GND -> GND
• D5 -> RO
• D6 -> DI
• D3 -> DE
• D4 -> RE
RS485 module -> Soil NPK Sensor
• VCC -> สายสีน้ำตาล
• GND -> สายสีดำ
• B -> B-
• A -> A+
ESP8266 -> จอแสดงผล OLED 128×64 ขนาด 0.96”
• Vin(5VDC) -> VCC
• GND -> GND
• D2 -> SDA
• D1 -> SCL
*** Vin คือ แรงดันไฟฟ้าที่เชื่อมต่อมาจากภายนอกทำให้อุปกรณ์ที่เชื่อมต่อกับช่อง Vin นี้จะได้รับแรงดันไฟฟ้าขนาดเท่ากับแหล่งจ่ายไฟที่นำมาเชื่อมต่อ ซึ่งต่างจากช่อง 3v3 ที่ปล่อยแรงดันไฟฟ้าสูงสุดที่ 3.3VDC เท่านั้น สำหรับบอร์ด ESP8266 ไม่ควรใช้งานช่อง Vin เกิน 5 VDC เพราะอาจทำให้บอร์ด ESP8266 เกิดความเสียหายได้ ***
2. เมื่อเชื่อมต่ออุปกรณ์เรียบร้อยแล้ว ให้ทำการดาวน์โหลด Library ทั้ง 2 จากลิ้งค์ข้างล่าง
ดาวน์โหลด Library
วิธีลง Library ให้ดูตัวอย่างในบทความนี้
3. ทำการแยกไฟล์ทั้ง 2 ไฟล์ออกมา สำหรับการแยกไฟล์นั้นจำเป็นที่จะต้องมีโปรแกรม WinRAR หรือ WinZip ติดตั้งอยู่ในเครื่องเสียก่อน
4. เมื่อทำการแยกไฟล์ออกมาแล้วให้ทำการ Copy โฟลเดอร์ไปไว้ในโฟลเดอร์ libraries ของโปรแกรม Arduino IDE
ตัวอย่าง Location : This PC > Document > Arduino > libralies
5. เปิดโปรแกรม Arduino IDE ขึ้นมา
6. จากนั้น Copy โค๊ดตัวอย่างด้านล่างไปวางไว้ในโปรแกรม Arduino IDE
#include <SoftwareSerial.h>
#include <Wire.h>
#include <Adafruit_GFX.h>
#include <Adafruit_SSD1306.h>
#define SCREEN_WIDTH 128 // OLED display width, in pixels
#define SCREEN_HEIGHT 64 // OLED display height, in pixels
#define OLED_RESET -1 // Reset pin # (or -1 if sharing Arduino reset pin)
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
#define RE 2
#define DE 0
//const byte code[]= {0x01, 0x03, 0x00, 0x1e, 0x00, 0x03, 0x65, 0xCD};
const byte nitro[] = {0x01,0x03, 0x00, 0x1e, 0x00, 0x01, 0xe4, 0x0c};
const byte phos[] = {0x01,0x03, 0x00, 0x1f, 0x00, 0x01, 0xb5, 0xcc};
const byte pota[] = {0x01,0x03, 0x00, 0x20, 0x00, 0x01, 0x85, 0xc0};
byte values[11];
SoftwareSerial mod(14,12);
void setup() {
Serial.begin(9600);
mod.begin(4800);
pinMode(RE, OUTPUT);
pinMode(DE, OUTPUT);
display.begin(SSD1306_SWITCHCAPVCC, 0x3C); //initialize with the I2C addr 0x3C (128x64)
delay(500);
display.clearDisplay();
display.setCursor(25, 15);
display.setTextSize(1);
display.setTextColor(WHITE);
display.println(" NPK Sensor");
display.setCursor(25, 35);
display.setTextSize(1);
display.print("Initializing");
display.display();
delay(3000);
}
void loop() {
byte val1,val2,val3;
val1 = nitrogen();
delay(250);
val2 = phosphorous();
delay(250);
val3 = potassium();
delay(250);
Serial.print("Nitrogen: ");
Serial.print(val1);
Serial.println(" mg/kg");
Serial.print("Phosphorous: ");
Serial.print(val2);
Serial.println(" mg/kg");
Serial.print("Potassium: ");
Serial.print(val3);
Serial.println(" mg/kg");
delay(2000);
display.clearDisplay();
display.setTextSize(2);
display.setCursor(0, 5);
display.print("N: ");
display.print(val1);
display.setTextSize(1);
display.print(" mg/kg");
display.setTextSize(2);
display.setCursor(0, 25);
display.print("P: ");
display.print(val2);
display.setTextSize(1);
display.print(" mg/kg");
display.setTextSize(2);
display.setCursor(0, 45);
display.print("K: ");
display.print(val3);
display.setTextSize(1);
display.print(" mg/kg");
display.display();
}
byte nitrogen(){
digitalWrite(DE,HIGH);
digitalWrite(RE,HIGH);
delay(10);
if(mod.write(nitro,sizeof(nitro))==8){
digitalWrite(DE,LOW);
digitalWrite(RE,LOW);
for(byte i=0;i<7;i++){
//Serial.print(mod.read(),HEX);
values[i] = mod.read();
//Serial.print(values[i],HEX);
}
//Serial.println();
}
return values[4];
}
byte phosphorous(){
digitalWrite(DE,HIGH);
digitalWrite(RE,HIGH);
delay(10);
if(mod.write(phos,sizeof(phos))==8){
digitalWrite(DE,LOW);
digitalWrite(RE,LOW);
for(byte i=0;i<7;i++){
//Serial.print(mod.read(),HEX);
values[i] = mod.read();
//Serial.print(values[i],HEX);
}
//Serial.println();
}
return values[4];
}
byte potassium(){
digitalWrite(DE,HIGH);
digitalWrite(RE,HIGH);
delay(10);
if(mod.write(pota,sizeof(pota))==8){
digitalWrite(DE,LOW);
digitalWrite(RE,LOW);
for(byte i=0;i<7;i++){
//Serial.print(mod.read(),HEX);
values[i] = mod.read();
//Serial.print(values[i],HEX);
}
Serial.println();
}
return values[4];
}
15. เมื่อทำการเปลี่ยนค่าการอ่านข้อมูลแล้ว จะเห็นได้ว่าที่หน้าจอ Serial Monitor จะแสดงข้อมูลค่าตัวเลข NPK (ไนโตรเจน ฟอสฟอรัส โพแทสเซียม) ที่เซ็นเซอร์วัดได้ขึ้นมา ซึ่งตัวเลขที่แสดงในหน้าจอ Serial Monitor นี้จะตรงกับค่าตัวในหน้าจอแสดงผล
15. ต่อมาให้ผู้ใช้งานทำการนำก้านของเซ็นเซอร์ใส่ลงไปในทรายหรือดินแห้ง ซึ่งเมื่อใส่ลงแล้วจะเห็นได้ว่าค่า NPK (ไนโตรเจน ฟอสฟอรัส โพแทสเซียม) ที่เซ็นเซอร์วัดได้นั้นจะเป็น 0
15. จากนั้นให้ผู้ใช้งานทำการนำก้านของเซ็นเซอร์ใส่ลงไปในทรายหรือดินที่เปียกหรือมีความชื้นสูง ซึ่งเมื่อใส่ลงแล้วจะเห็นได้ว่าค่า NPK (ไนโตรเจน ฟอสฟอรัส โพแทสเซียม) ที่เซ็นเซอร์วัดได้นั้นจะเพิ่มขึ้นอย่างเห็นได้ชัด
Link:https://www.cybertice.com/article/459