2025-02-18 19:48:05 by Haikal Farabi
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.
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.
2025-03-16 06:24:06
2025-02-21 02:04:31