saludos, no e podido poner a leer los sensores con salida rs485 con mi esp 32 ya tiene un convertidor rs485 con protocolo modbus
#include <ModbusMaster.h>
#define MAX485_DE 5 // Driver Enable Pin (Transmit mode)
#define MAX485_RE 4 // Receiver Enable Pin (Receive mode)
// Create an instance of ModbusMaster
ModbusMaster node;
// Define the slave IDs for each of your sensors
#define TEMP_HUMIDITY_ID 1 // Slave ID for Temperature and Humidity sensor
#define PRESSURE_ID 2 // Slave ID for Atmospheric Pressure sensor
#define ANEMOMETER_ID 3 // Slave ID for Anemometer
#define WIND_VANE_ID 4 // Slave ID for Wind Vane
#define RAIN_GAUGE_ID 5 // Slave ID for Rain Gauge
// Control the direction of the MAX485 transceiver
void preTransmission() {
digitalWrite(MAX485_RE, HIGH); // Enable transmit mode
digitalWrite(MAX485_DE, HIGH); // Enable transmit mode
}
void postTransmission() {
digitalWrite(MAX485_RE, LOW); // Enable receive mode
digitalWrite(MAX485_DE, LOW); // Enable receive mode
}
void setup() {
Serial.begin(4800); // Initialize serial communication for debugging
pinMode(MAX485_DE, OUTPUT);
pinMode(MAX485_RE, OUTPUT);
// Initialize Modbus communication for all sensors
node.begin(ANEMOMETER_ID, Serial); // Slave ID 3 for anemometer
node.preTransmission(preTransmission);
node.postTransmission(postTransmission);
delay(1000); // Give time for initialization
}
void loop() {
uint8_t result;
// Example: Read data from Anemometer (SENSOR3)
node.begin(ANEMOMETER_ID, Serial); // Set Modbus address to Anemometer
result = node.readHoldingRegisters(0x03, 2); // Example: Read 2 registers for Anemometer data
if (result == node.ku8MBSuccess) {
int anemometerData = node.getResponseBuffer(0); // Read data
Serial.print("Anemometer data: ");
Serial.println(anemometerData);
}
// Example: Read data from Wind Vane (SENSOR4)
node.begin(WIND_VANE_ID, Serial); // Set Modbus address to Wind Vane
result = node.readHoldingRegisters(0x03, 2); // Example: Read 2 registers for Wind Vane data
if (result == node.ku8MBSuccess) {
int windVaneData = node.getResponseBuffer(0); // Read data
Serial.print("Wind Vane data: ");
Serial.println(windVaneData);
}
// Example: Read data from Rain Gauge (SENSOR5)
node.begin(RAIN_GAUGE_ID, Serial); // Set Modbus address to Rain Gauge
result = node.readHoldingRegisters(0x03, 2); // Example: Read 2 registers for Rain Gauge data
if (result == node.ku8MBSuccess) {
int rainGaugeData = node.getResponseBuffer(0); // Read data
Serial.print("Rain Gauge data: ");
Serial.println(rainGaugeData);
}
// Example: Read data from Temperature & Humidity (SENSOR1)
node.begin(TEMP_HUMIDITY_ID, Serial); // Set Modbus address to Temperature & Humidity sensor
result = node.readHoldingRegisters(0x03, 2); // Example: Read 2 registers for Temp/Humidity data
if (result == node.ku8MBSuccess) {
int tempHumidityData = node.getResponseBuffer(0); // Read data
Serial.print("Temperature & Humidity data: ");
Serial.println(tempHumidityData);
}
// Example: Read data from Atmospheric Pressure (SENSOR2)
node.begin(PRESSURE_ID, Serial); // Set Modbus address to Atmospheric Pressure sensor
result = node.readHoldingRegisters(0x03, 2); // Example: Read 2 registers for Pressure data
if (result == node.ku8MBSuccess) {
int pressureData = node.getResponseBuffer(0); // Read data
Serial.print("Atmospheric Pressure data: ");
Serial.println(pressureData);
}
delay(2000); // Delay between readings to avoid spamming the bus
}