五合一土壤传感器的介绍
测量参数:土壤电导率(EC 值)、温度、水分、PH 值
测量量程:0~20000μS/cm、-40~80℃、0-100%、3~9PH
测量精度:0-10000us/cm 范围内为±3%FS;10000-20000us/cm范围内为±5%FS,@(棕壤,60%RH,25℃)、±0.5℃、0-50%内±2%,@(棕壤,30%,25℃)50-100%内±3%,@(棕壤,60%,25℃)、±0.3PH
分 辨 率:1μS/cm、0.1℃、0.1%、0.1
输出信号:RS485(ModBus-RTU 协议) 第 2页
供电电压:4.5~30V DC
工作范围:-30℃~70℃
稳定时间:通电后 1 秒
响应时间:<1 秒
使用方法
设备可连接各种载有差分输入的数据采集器,数据采集卡,远程数据采集模块等设备,接线说明如下图:
RS485 信号(默认地址 01):
标准 Modbus-RTU 协议,波特率:9600;校验位:无;数据位:8;停止位:1
下面是读取含水量、温度值、电导率、pH值、氮含量、磷含量、钾含量的一组地址
0x01,0x03,0x00,0x00,0x00,0x07,0x04,0x08
由于含水量、温度值、电导率、pH值读出来的数据已经被放大十倍,因此我们还要对这些数据进行处理,将这些数据缩小原来的十分之一。
本次是ESP32在Arduino框架下写的代码,用到了ESP32的17和18号引脚
代码
#include <SoftwareSerial.h>
#include <Arduino.h>
unsigned char item[8] = {0x01,0x03,0x00,0x00,0x00,0x07,0x04,0x08}; //16进制测温命令
SoftwareSerial soilSerial(17, 18); // RX, TX
float water,soil_temp,conductivity,pH,N,P,K;
int soil_data[40];
void setup()
{
soilSerial.begin(9600);
Serial.begin(9600);
}
void loop()
{
int i=0;
delay(500); // 放慢输出频率
for (i = 0 ; i < 8; i++) {
soilSerial.write(item[i]); // write输出
}
delay(100); // 等待测温数据返回
i=0;
while (soilSerial.available()) {//从串口中读取数据
unsigned char in = (unsigned char)soilSerial.read(); // read读取
Serial.print(in, DEC);
Serial.print(',');
soil_data[i]=in;
i++;
}
i=0;
Serial.println();
for (i=0;i<17;i++)
{
Serial.print(soil_data[i]);
Serial.print(" ");
}
Serial.println();
water=float(soil_data[4])/10;//含水量
soil_temp=float(soil_data[6])/10;//温度值℃
conductivity=float(soil_data[8])/10;//电导率
pH=float(soil_data[10])/10;//pH值
N=float(soil_data[12]);//氮含量 mg/kg
P=float(soil_data[14]);//磷含量 mg/kg
K=float(soil_data[16]);//钾含量 mg/kg
Serial.println(water);
Serial.println(soil_temp);
Serial.println(conductivity);
Serial.println(pH);
Serial.println(N);
Serial.println(P);
Serial.println(K);
}