Guten Tag allesamt,
bei mir hat sich ein Problem ergeben in der Datenumwandlung.
Es geht um einen Sensor, welcher per RS422 Interface an einem Konverter
(RS422 auf Bidirektionales TTL-UART-Konvertierungsboard-> habe das rote
Modell von Amazon) verbunden ist. Dieser wiederum ist an einem ESP32
verbunden.(Framework Arduino- IDE Platformio in VSCode)
1
Sensor Konverter ESP32(UART0)
2
T+ ---- T+ TX an RX
3
T- ---- T-
4
R- ---- R- RX an TX
5
R+ ---- R+
6
GND ---- GND an GND
Wenn ich den Sensor direkt an den Computer anschließe und direkt mit
HTerm nachschaue, kommen die gewünschten Daten raus.(Abbildung 1, kurze
Info 31 74 87 sind zusammen ein Messwert).
Verwende ich jetzt den Konverter zwischen ESP32 und Sensor kommen nur
falsche oder auch wenn der Sensor nicht bewegt wird neue Werte heraus
(Abbildung 2).
1
#include <Arduino.h>
2
3
void getDataFromSensor(int length)
4
{
5
6
uint8_t data[length + 1] = {0};
7
8
9
if (Serial.available())
10
{
11
Serial.readBytes(data, length);
12
}
13
Serial.println("\n\nReceived:\n");
14
for (size_t i = 0; i < length + 1; i++)
15
{
16
if (!data[i] == 0)
17
{
18
Serial.print(data[i], HEX);
19
}
20
}
21
22
}
23
24
void setup()
25
{
26
Serial.begin(115200);
27
}
28
29
void loop()
30
{
31
getDataFromSensor(600);
32
delay(10000);
33
}
Das ist mein Code dazu. Meine Frage ist benötige ich einen anderen
Konverter oder ist mein Code falsch? Ich weiß nicht wie ich weiterkommen
kann.
Ich bitte um etwas leichter zu verstehende Erklärungen. Ich kenne mich
(noch) nicht so gut in der Welt der Mikrocontroller aus.
Vielen Dank!
Du hast vergessen, auf die Dokumentation des Sensors zu verweisen oder
wenigstens seinen exakten namen anzugeben. Gleiches gilt fü den Adapter.
"habe das rote Modell von Amazon" soll wohl ein schlechter Witz sein,
oder?
> Ich kenne mich (noch) nicht so gut in der Welt der Mikrocontroller aus.
Dann fange mal besser mit einem Arduino Uno oder Nano an. Die ESP Chips
haben zahlreiche spezielle Fallstricke, sowohl was ihre >Hardware
angeht, als auch die Software. Da läuft im Hintergrund viel mehr drauf,
als nur dein Sketch.
Christian P schrieb:> Wenn ich den Sensor direkt an den Computer anschließe und direkt mit> HTerm nachschaue, kommen die gewünschten Daten raus.
Heißt das, dass dein Computer ein RS422-Interface besitzt oder ist dein
Konverter dabei irgendwie im Spiel?
Prüfe die Polarität deiner Signale.
Dein Sketch funktioniert nur, wenn der Sensor zwischen den Pausen immer
genau 600 Bytes am Stück liefert. Das wiederum erfordert bei deinem
Programmaufbau einen ausreichend großen Empfangspuffer. Die Größe kann
man mit Serial.setRxBufferSize(600) einstellen, ich weiß aber nicht wo
die Limits sind.
Danke für die Antwort,
Habe jetzt nachträglich die Dokumentation des Sensors mitgegeben.
Entschuldigung, dass ich so unpräzise war mit dem Konverter. Da es nur
einen gibt, dachte ich es wäre klar gewesen. Entschuldigung nochmal.
(Pegelwandlermodul 5-V-Pegelsignalwandler RS422 auf Bidirektionales
TTL-UART-Konvertierungsboard für Serielle Schnittstellen Bidirektionales
Board)
Dazu gibt es leider keine Dokumentation.
Links zu Ebay usw. darf man ja, soweit ich weiß nicht reinschreiben in
seine Frage.
Leider habe ich momentan keine Zeit langsam und genau mich mit dem Thema
Mikrocontroller zu befassen.
Der Sensor sendet kontinuierlich Daten aus. Bei meinem Beispiel wollte
ich einfach eine kleine Menge davon anzeigen lassen.
Wenn diese Verbindung steht, sollen aus dem kontinuierlichen Daten immer
Pakete herausgelesen werden.
Das ist das Ziel.
Christian P schrieb:> Da es nur einen gibt, dachte ich es wäre klar gewesen.
Es weder nur einen Sensor, noch nur einen RS422 Adapter. Amazon ist
nicht die ganze Welt und außerdem ändert sich das Angebot dort ständig.
Ich habe bei Amazon rote "RS422 auf Bidirektionales
TTL-UART-Konvertierungsboard" gefunden, beide ohne Anschlussplan und
ohne Datenblatt. So etwas kauft man nicht, wenn man bei Verstand ist.
Schon gar nicht für 9 Euro.
Christian P schrieb:> Leider habe ich momentan keine Zeit langsam und genau mich mit dem Thema> Mikrocontroller zu befassen.
Dann lasse es halt bleiben. hast du gedacht, dass wir dein Projekt zu
Ende bringen?
Stimmt die Baudrate? Laut Doku sind es standardmäßig 921,6k.
Laut Kapitel 8.2 liefert das Gerät immer 3 Bytes mit einer Wiederholrate
von 2 kHz (änderbar). Die drei Bytes haben in den oberen Bits eine
eindeutige Kennzeichnung, woran du erkennen kannst, ob das ein L, M oder
H Byte war.
Empfange die Bytes also fortlaufend einzeln und ordne sie drei Variablen
(L,M,H) zu. Immer wenn du bei H angekommen bist, gebe sie zusammen auf
dem Bildschirm aus.
Die Fußnote 2) irritiert mich. Sie beschreibt das Bit 7 genau umgekehrt,
als die Tabelle darüber.
Christian P schrieb:> Links zu Ebay usw. darf man ja, soweit ich weiß nicht reinschreiben in> seine Frage.
Wo hast du das gelesen?
Wenn du andere Beträge hier im Forum liest, siehst du, dass sich da
niemand an Ebay-, Amazone- oder sonstigen Links stört.
Mir ist bewusst, was diese Byte sind und was man mit denen macht. Mir
geht es um die Verbindung zwischen Sensor und dem Esp32. Die Umwandlung
von Hexwerte zu Messwert funktioniert schon, es klappt leider die
Verbindung noch nicht.
Deswegen hoffe ich hier Tipps oder offensichtliche Fehler, die für mich
nicht offensichtlich sind, aufgezeigt zu bekommen.
Der Sensor ist auch passend voreingestellt 115200 baud und 1 khz
Messrate.
Ich möchte nicht, dass diese Community meine Aufgabe erledigt, sondern
nur, wenn möglich, mir zeigt was ich falsch gemacht habe.
Das Problem an dem ich hänge ist: Ich weiß nicht, ob der Konverter der
richtige ist und/oder mein Code falsch ist. An der Kommunikation
scheitere ich schon seit mehreren Wochen und habe dieses Forum als
Hilfestellung angesehen.
Kommunikation allgemein zwischen zwei Esps habe ich verstanden und schon
ausprobieren können. Leider lässt sich das nicht auf den Sensor
übertragen.
Ich bedanke mich trotzdem zutiefst auf jede Antwort auf meine Frage.
Christian P. schrieb:> Deswegen hoffe ich hier Tipps oder offensichtliche Fehler, die für mich> nicht offensichtlich sind, aufgezeigt zu bekommen.
Habe ich gemacht. Aber wenn sie dir nicht gefallen, und du auch keinen
Bock darauf hast, dich selbst weiter rein zu fuchsen, dann lass es halt
bleiben. Aber beschwere dich nicht bei uns.
Bitte nicht falsch verstehen die letzten 7 Wochen habe ich
ununterbrochen mich mit Mikrocontroller befasst und mir selber
beigebracht auf diesen zu programmieren.
Da ich aus der Richtung Softwareentwicklung komme, ist mir Elektronik
und Elektrotechnik neu. Ich habe tutorials und Foren durchforstet,
dennoch kam ich zu keinem Ergebnis.
Deswegen versuche ich jetzt selber hier Antworten von erfahrenen Leuten
einzuholen.
Ich habe leider nicht die Erfahrung, wo man solche Konverter kauft oder
verkabelt. Könntst du mir ein paar Websiten nennen, die solche Konverter
oder allgemein Geräten entwickeln/verkaufen? Leider finde ich nur Müll
ohne Anleitung.
Danke weiterhin für deine Antworten, leider kann mir niemand sonst im
Umfeld damit helfen.
Du hast zu viele Baustellen gleichzeitig. Mache eine Pause um einen
klaren Kopf zu kriegen.
Dann Gehe die Baustellen schrittweise an. Schreibe einen ganz simplen
Sketch, der die empfangenen Bytes einzeln (keine Blöcke) 1:1 an den PC
weiter leitet. Dort müsste das Hterm dann die bekannte Anzeige liefern.
Starthilfe:
https://docs.arduino.cc/built-in-examples/communication/SerialPassthrough
Ziel: Die serielle Kommunikation auf beiden Seiten ans Laufen bringen.
Mache das erst mal, dann sehen wir weiter.
Und besorge dir zwischenzeitlich einen Logic Analyzer (ab 8 Euro). Der
wird nützlich sein.