Loading...

Mengakses Soil Sensor NPK 7 in 1 dengan ESP32

2025-02-18 19:48:05 by Haikal Farabi

Mengakses Soil Sensor NPK 7 in 1 dengan ESP32

Halo IMERCY-ers disini artikel pertama saya di Website IMERCY, saya akan membahas soil sensor NPK 7 in 1 dengan microcontroller ESP32. Nah isinya itu ga cuman hanya codingan untuk microcontroller ESP32, tapi juga mengakses langsung dari software-nya agar kita dapat mengetahui tiap-tiap alamat. Berikut penjelasannya stay tuned gaissssssss

Pertama kita bikin rangkaian terlebih dahulu untuk mengakses dengan software. Software-nya ada dua yang pertama 485 dan QModMaster, download disini ya softwarenya.

file1file2

Setelah merangkai sensor ke USB to RS485 dan mendownload softwarenya, Kita next ke tahap selanjutnya yaitu ngeakses. Kalo yang 485 itu ngecek alamatnya satu satu pertama sensor yang NPK doang, terus sensor yang pH doang, nah terakhir yang Soil  Trinity. Kalo yang QModMaster itu dia sekali akses semua parameter alamatnya bisa langsung diketahui.

Supply nya itu dari 5-24V jadi kalo misal ga ada supply external, bisa menggunakan pin 5V dari ESP32. Lets code it!!!!!

#define RE 4
#define RXD2 17
#define TXD2 16

const byte humi[] = { 0x01, 0x03, 0x00, 0x12, 0x00, 0x01, 0xe24, 0x0f };
const byte temp[] = { 0x01, 0x03, 0x00, 0x13, 0x00, 0x01, 0x75, 0xcf };
const byte cond[] = { 0x01, 0x03, 0x00, 0x15, 0x00, 0x01, 0x95, 0xce };
const byte phph[] = { 0x01, 0x03, 0x00, 0x06, 0x00, 0x01, 0x64, 0x0b };
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];

float Hum, Temp, EC, pH, Nit, Phos, Pot;

void setup() {
  Serial.begin(9600);
  Serial1.begin(9600, SERIAL_8N1, RXD2, TXD2);
  pinMode(RE, OUTPUT);
  digitalWrite(RE, LOW);
  delay(1000);
}

void loop() {
// HUMIDITY
  Serial.print("Humidity: ");
  digitalWrite(RE, HIGH);
  delay(10);
  for (uint8_t i = 0; i < sizeof(humi); i++) Serial1.write(humi[i]);
  Serial1.flush();
  digitalWrite(RE, LOW);
  delay(100);
  for (byte i = 0; i < 7; i++) values[i] = Serial1.read();
  Hum = int(values[3] << 8 | values[4]) / 10.0;
  Serial.print(" = ");
  Serial.print(Hum, 2);
  Serial.println(" %");
  delay(200);

// TEMPERATURE
  Serial.print("Temperature: ");
  digitalWrite(RE, HIGH);
  delay(10);
  for (uint8_t i = 0; i < sizeof(temp); i++) Serial1.write(temp[i]);
  Serial1.flush();
  digitalWrite(RE, LOW);
  delay(100);
  for (byte i = 0; i < 7; i++) values[i] = Serial1.read();
  Temp = int(values[3] << 8 | values[4]) / 10.0;
  Serial.print(" = ");
  Serial.print(Temp, 2);
  Serial.println(" deg.C");
  delay(200);

// CONDUCTIVITY
  Serial.print("Conductivity: ");
  digitalWrite(RE, HIGH);
  delay(10);
  for (uint8_t i = 0; i < sizeof(cond); i++) Serial1.write(cond[i]);
  Serial1.flush();
  digitalWrite(RE, LOW);
  delay(100);
  for (byte i = 0; i < 7; i++) values[i] = Serial1.read();
  EC = int(values[3] << 8 | values[4]);
  Serial.print(" = ");
  Serial.print(EC);
  Serial.println(" uS/cm");
  delay(200);

// PH
  Serial.print("pH: ");
  digitalWrite(RE, HIGH);
  delay(10);
  for (uint8_t i = 0; i < sizeof(phph); i++) Serial1.write(phph[i]);
  Serial1.flush();
  digitalWrite(RE, LOW);
  delay(100);
  for (byte i = 0; i < 7; i++) values[i] = Serial1.read();
  pH = int(values[3] << 8 | values[4]) / 100.0;
  Serial.print(" = ");
  Serial.println(pH, 2);
  delay(200);

// NITROGEN
  Serial.print("Nitrogen: ");
  digitalWrite(RE, HIGH);
  delay(10);
  for (uint8_t i = 0; i < sizeof(nitro); i++) Serial1.write(nitro[i]);
  Serial1.flush();
  digitalWrite(RE, LOW);
  delay(100);
  for (byte i = 0; i < 7; i++) values[i] = Serial1.read();
  Nit = int(values[3] << 8 | values[4]);
  Serial.print(" = ");
  Serial.print(Nit);
  Serial.println(" mg/L");
  delay(200);

// PHOSPHORUS
  Serial.print("Phosphorus: ");
  digitalWrite(RE, HIGH);
  delay(10);
  for (uint8_t i = 0; i < sizeof(phos); i++) Serial1.write(phos[i]);
  Serial1.flush();
  digitalWrite(RE, LOW);
  delay(100);
  for (byte i = 0; i < 7; i++) values[i] = Serial1.read();
  Phos = int(values[3] << 8 | values[4]);
  Serial.print(" = ");
  Serial.print(Phos);
  Serial.println(" mg/L");
  delay(200);

// POTASSIUM
  Serial.print("Potassium: ");
  digitalWrite(RE, HIGH);
  delay(10);
  for (uint8_t i = 0; i < sizeof(pota); i++) Serial1.write(pota[i]);
  Serial1.flush();
  digitalWrite(RE, LOW);
  delay(100);
  for (byte i = 0; i < 7; i++) values[i] = Serial1.read();
  Pot = int(values[3] << 8 | values[4]);
  Serial.print(" = ");
  Serial.print(Pot);
  Serial.println(" mg/L");
  delay(200);
  delay(1000);  // send data every second
}

Yeayyyy kalian sudah bisa mengakses Soil Sensor NPK 7 in 1 dan mengetahui alamatnya tidak hanya dari datasheet.