Opensprinkler RS-485 Adapter für TRUEBNER SMT100
Passend zum Start der Gartensaison habe ich einen neuen Adapter entdeckt, mit dem man den TRUEBNER SMT100 an der bekannten Opensprinkler Bewässerungsplattform betreiben kann. Man muss auf jeden Fall den SMT100 RS-485 Modbus verwenden und am besten mit dem TRUEBNER Modbus Tool die Adresse einstellen. Der Adapter wandelt die I2C Befehle von der Opensprinkler Steuerung in Modbus um. Der Adapter ist im deutschen Opensprinklershop erhältlich: https://opensprinklershop.de/product/truebner-rs485-adapter-fuer-opensprinkler/. Er läßt sich über das 10 polige Flachbandkabel einfach mit der Steuerung verbinden. Da ich mich erst noch im Detail mit der Steuerung beschäftigen muss habe ich im ersten Schritt einfach ein Arduino Board genommen und es mit I2C Befehlen ausprobiert, d.h. Arduino, Adapter Board und SMT100. Der Arduino verbindet den Adapter mit Betriebsspannung, GND, I2C Clock und I2C Daten. Achtung: Den Adapter habe ich etwas modifiziert, damit es mit dem 5 V Arduino Uno auch klappt. Ich habe den Spannungsregler überbrückt und den auf der Platinen befindlichen 3,3 V RS-485 Transceiver ISL3172 durch einen 5 V RS-485 Transceiver der gleichen Art Typ ISL3152 ersetzt.
Ein einfaches Programm sieht so aus:
# include "Wire.h"
byte modbus_address;
byte modbus_register;
byte lowbyte;
byte highbyte;
void setup()
{
Serial.begin(9600);
Serial.println("Start");
Wire.begin();
}
void loop()
{
Serial.println("Neue Runde (Modbus Adresse, Modbus Register, Modbus Wert)");
Wire.beginTransmission(0x38); //start transmission to I2C to Modbus gateway
Wire.write(123); //send to Modbus sensor with decimal address 123
Wire.write(0); //read temperature register 0
Wire.endTransmission();
delay(1000);
Wire.requestFrom(0x38, 4,true); //read four bytes from I2C to Modbus gateway
while(Wire.available()) {
delay(10);
modbus_address=Wire.read();
modbus_register=Wire.read();
lowbyte = Wire.read();
highbyte = Wire.read();
Serial.print(modbus_address);
Serial.print(",");
Serial.print(modbus_register);
Serial.print(",");
Serial.println(word(highbyte,lowbyte));
}
Wire.beginTransmission(0x38); //start transmission to I2C to Modbus gateway
Wire.write(123); //send to Modbus sensor with decimal address 123
Wire.write(1); //read moisture register 1
Wire.endTransmission();
delay(1000);
Wire.requestFrom(0x38, 4,true); //read four bytes from I2C to Modbus gateway
while(Wire.available()) {
delay(10);
modbus_address=Wire.read();
modbus_register=Wire.read();
lowbyte = Wire.read();
highbyte = Wire.read();
Serial.print(modbus_address);
Serial.print(",");
Serial.print(modbus_register);
Serial.print(",");
Serial.println(word(highbyte,lowbyte));
}
Wire.beginTransmission(0x38); //start transmission to I2C to Modbus gateway
Wire.write(123); //send to Modbus sensor with decimal address 123
Wire.write(3); //read counts register 3
Wire.endTransmission();
delay(1000);
Wire.requestFrom(0x38, 4,true); //read four bytes from I2C to Modbus gateway
while(Wire.available()) {
delay(10);
modbus_address=Wire.read();
modbus_register=Wire.read();
lowbyte = Wire.read();
highbyte = Wire.read();
Serial.print(modbus_address);
Serial.print(",");
Serial.print(modbus_register);
Serial.print(",");
Serial.println(word(highbyte,lowbyte));
}
}
Das klappt einfach super. Der Adapter ist somit nicht nur für Opensprinkler geeignet, sondern kann nach der kleinen Modifikation auch für Arduino mit I2C verwendet werden.