Hi All,
I am trying to get data from a sensor with rs485 output using the max485 breakout transceiver to convert uart to rs485.
Connections:
MAX485 Vcc ==> Boron VUSB (while connected via USB)
MAX485 GND ==> Boron GND & Sensor GND
MAX485 B ==> Sensor RS485-B
MAX485 A ==> Sensor RS485-A
MAX485 DI ==> Boron D9
MAX485 DE ==> Boron D3
MAX485 RE ==> Boron D2
MAX485 RO ==> Boron D10
Sensor Vcc is connected to external 12V w/ common GND with Boron & MAX485.
I am not seeing any output on the serial port when using particle-cli.
#include <Particle.h>
#include <SerialBufferRK.h>
SYSTEM_MODE(MANUAL);
SYSTEM_THREAD(ENABLED);
SerialBuffer<256> rs485Buffer(Serial1); // Use Serial1 for RS485 communication
const int RE = D2; // Receiver Enable pin connection
const int DE = D3; // Driver Enable pin connection
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];
byte nitrogen() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
for (byte i = 0; i < sizeof(nitro); i++) {
rs485Buffer.write(nitro[i]);
}
if (rs485Buffer.available() >= sizeof(nitro)) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = rs485Buffer.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
byte phosphorous() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
for (byte i = 0; i < sizeof(phos); i++) {
rs485Buffer.write(phos[i]);
}
if (rs485Buffer.available() >= sizeof(phos)) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = rs485Buffer.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
byte potassium() {
digitalWrite(DE, HIGH);
digitalWrite(RE, HIGH);
delay(10);
for (byte i = 0; i < sizeof(pota); i++) {
rs485Buffer.write(pota[i]);
}
if (rs485Buffer.available() >= sizeof(pota)) {
digitalWrite(DE, LOW);
digitalWrite(RE, LOW);
for (byte i = 0; i < 7; i++) {
values[i] = rs485Buffer.read();
Serial.print(values[i], HEX);
}
Serial.println();
}
return values[4];
}
void setup() {
Serial.begin(9600);
pinMode(RE, OUTPUT);
pinMode(DE, OUTPUT);
digitalWrite(RE, LOW); // Set RE pin to receive mode
digitalWrite(DE, LOW); // Set DE pin to receive mode
delay(500);
}
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);
}
I am using the SerialBufferRK library (guessing written by @rickkas7) any help is appreciated!
@peekay123 @ScruffR