Guten Abend zusammen:
Ich bin neu hier im Forum und möchte mich gerne kurz vorstellen:
Mein Name ist Stefan, ich bin 32 und beschäftige mich seit einem Jahr mit dem Arduino.
Mein Ziel ist es, die Materie zu verstehen und mir das was ich brauche selber zusammenzubasteln.
Daher habe ich zunächst den dicken Schinken von Brühlmann - Arduino Praxiseinstieg durchgearbeitet.
Da ich mich schon immer hobbymäßig mit dem Wetter beschäftige ist natürlich das Hauptthema der Bau einer Wetterstation ganz nach meinen Wünschen.
Das ganze funktioniert auch schon. Ich bin in der Lage, Sensoren über I2C und SPI auszulesen, per Funk (433 MHz) ins Haus zu übertragen und dort auf einem I2C Display mit MIN/MAX darzustellen.
Parallel dazu im Moment ist ein HTML - Webserver und eine Speicherung auf SD - Karte in Bearbeitung. Hier gehts gut vorwärts.
Jetzt zu eigentlichen Thema: Es besteht für mich die Möglichkeit "günstig"an einen Profisensor mit ventilierter Wetterhütte dranzukommen nach DWD - Standard.
Leider unterstützt er nicht I2C sondern nur Modbus RTU auf dem RS485 Bus.
Das Protokoll ist mir bekannt da ich beruflich in der Leittechnik tätig bin.
Ich habe hier einen Elsner Modbus Temperaturfühler herumliegen, welcher auch Modbus RTU liefert.
Diesen möchte ich nun auslesen und am Arduino blinkt nur die TX Lampe, die RX bleibt aus:
- Spannung am Sensor liegt an und wurde auch gemessen
- Der Sensor wurde am PC mit QModbus Master erfolgreich ausgelesen
Im seriellen Monitor erscheint im Takt der Anfrage immer nu ein q
Kann hier mir jemand helfen. Ich wäre sehr dankbar darüber. Ist es überhaupt möglich einen Modbus Sensor mit dem Arduino auszulesen?
Vielen Dank im Voraus
#include <ModbusMaster.h>
// Pin DI auf TX/Pin R0 auf RX
#define MAX485_DE 3
#define MAX485_RE_NEG 2
//Angeschlossen wird ein Elsner TH - AP Modbus
//Funktion 04: Read input registers
//Register 0: Temperatur
//Register 1: Feuchte
//Register 2: Taupunkt
//Slave Adresse 1
ModbusMaster node;
void setup() {
// set pins to output
pinMode(MAX485_RE_NEG, OUTPUT);
pinMode(MAX485_DE, OUTPUT);
// Baudrate des Modbus Sensors: 19200
Serial.begin(19200);
// slave ID 1
node.begin(1, Serial);
}
void loop() {
//Vor Übertragung auf High
digitalWrite(MAX485_RE_NEG, HIGH);
digitalWrite(MAX485_DE, HIGH);
uint8_t result;
// read 1 Input Register bei Adresse 1, Funktion 04
result = node.readInputRegisters(1, 1);
delay(1000);
// Nach Übertragung auf LOW
digitalWrite(MAX485_RE_NEG, LOW);
digitalWrite(MAX485_DE, LOW);
if (result == node.ku8MBSuccess)
{
Serial.print("Feuchte: ");
//Anzeige eines Registers im Seriellen Monitor
Serial.println(node.getResponseBuffer(1));
}
delay(1000);
}
Ich habe die wichtigsten Zeilen beschriftet um das ganze besser zu verstehen
Gruß Stefan



