RS232 Dateinein- und Ausgabe ?

Hallo zusammen, ich habe noch keine Lösung für folgendes Problem gefunden, sicher ist es machbar und wahrscheinlich auch einfach. Nur ich hab's eben noch nicht gefunden. Also, ein Gerät sendet regelmässig alle paar Minuten über die RS232 Daten. Das könnten z.B. Füllstände und Temperaturen sein, damit man sich etwas dunter "Daten" vorstellen kann, sind nur ein paar Bytes. Diese Werte sollen auf der Webseite (abgelegt auf SD-Karte im Ethernet Shield) dargestellt werden. Das ist das Hauptproblem: Wie bekomme ich die Daten von der RS232 auf die Webseite ? Werte von Variablen (z.B. der ADC etc. ist ja kein Problem). Darstellung soll in Form von Zeigerinstrumenten etc. erfolgen, aber das ist der zweite oder dritte Schritt.

In der Gegenrichtung sollen auch Werte über die RS232 an das Gerät gesendet werden. Zum Beispiel soll ein Sollwert (mittels Schieberegler oder Plus/Minus- oder Up/Down-Schaltflächen) auf der Webseite veränderbar sein. Dieser Wert soll dann über die RS232 ausgegeben werden.

Hat jemand Ideen dazu ? Arduino XYZ + Ethernet Shield als Grundlage, dachte ich mir so.

Gruß + Dank, Greece2001

In welcher Form kommen die Daten an? Als ASCII String? Auch noch schön mit einem Linefeed oder Carriage Return abgeschlossen? Dann ist es trivial das einzulesen.

Du brauchst mal einen RS232-TTL umsetzer da elektrisch die RS1232 nicht mit Arduino kompatibel ist. Dann liest Du die eingehenden Bytes und interpretierst sie ensprechend. Grüße Uwe

Ist eher eine elektrische Frage: echte RS-232 Signale ( 0 = +3 .. +15V , 1 = -3 .. -15V) brauchen eine Anpassung an den Arduino TTL - Level (0 = 0..1V, 1 = 3..5V --vereinfacht--) Das geht mit einem MAX232 insbesondere wenn du (der Arduino) auch senden willst. --- Uwe war schneller ---

Und ob "ein Gerät" Steuersignale braucht, damit es sendet, wäre auch interessant.

MAX232 oder MAX3232 gibt es auch als fertige Platinen mit SUB-D Buchse

uwefed: Du brauchst mal einen RS232-TTL umsetzer da elektrisch die RS1232 nicht mit Arduino kompatibel ist. Dann liest Du die eingehenden Bytes und interpretierst sie ensprechend. Grüße Uwe

Hallo an alle, dass die Signalpegel gewandelt werden müssen ist mir schon klar, das ist trivial... Auch dass man die Bytes dann einlesen muss ;-) Meine Frage war: wie stelle ich "die bytes" dann als Wert auf der Webseite (gespeichert auf der SD-Karte) dar und wie sende ich Werte nach Klicken von Up-/Down-Schaltflächen oder Schiebereglern wieder an die RS232 ? Gruß, Greece2001

michael_x: Ist eher eine elektrische Frage: echte RS-232 Signale ( 0 = +3 .. +15V , 1 = -3 .. -15V) brauchen eine Anpassung an den Arduino TTL - Level (0 = 0..1V, 1 = 3..5V --vereinfacht--) Das geht mit einem MAX232 insbesondere wenn du (der Arduino) auch senden willst. --- Uwe war schneller ---

Und ob "ein Gerät" Steuersignale braucht, damit es sendet, wäre auch interessant.

Nein, es ist keine elektrische Frage ;-) Meine Frage war: wie die über die serielle Schnittstelle (um uns mal vom Begriff RS232 und seinen Spannungspegeln zu lösen) eingelesenen Werte auf der Webseite (gespeichert auf SD-Karte) dargestellt und umgekehrt auch wieder Werte nach entspr. Aktionen auf der Webseite wieder an die serielle Schnittstelle gesendet werden können. Steuersignale braucht das Dings nicht, alle paar Minuten kommen neue Werte, unaufgefordert :-)

Danke schon mal für sachdienliche Hinweise ;-)

Gruß, Greece2001

Das sind zwei getrennte Aufgaben (für den Empfang): 1.) Daten von der seriellen Schnittstelle einlesen 2.) Daten in die Webseite integrieren

Das kann man getrennt behandeln und dann zusammenfügen.

Wie man den Empfang macht hängt wie gesagt ab wie die Daten genau aussehen, d.h. ob die Bytes als rohe Zahlenwerte kommen oder als ASCII Strings. Ist aber recht ähnlich. In beiden Fällen wird man die Daten erst mal in ein Array einlesen und dann verarbeiten.

Also, die Werte, die die serielle Schnittstelle bekommt sind immer ASCII-Strings, die müssen logischer Weise erstmal aufgeteilt und in Werte gewandelt werden. Beispiel: 123,45,6,89,100,9876 Das Einlesen ist auch nicht das Problem.

Die Darstellung, also die Übergabe an die Webseite ist Frage. Und umgekehrt. Eine Aktion (z.B. Anklicken einer Schaltfläche oder schöner, einen Schieberegler bewegen, aber das kann später kommen) soll einen Werte erhöhen und dann diesen Wert an die ser. Schnittstelle geben. Der durch das anklicken der Schaltfläche veränderte Wert soll natürlich auf der Webseite auch sichtbar sein.

Gruß + Dank, Greece2001

hi,

eine webseite hast Du ja schon. von der werden die html-zeilen mit server.print("html-code, was auch immer"), an deinen browser geschickt. (muß nicht server sein, kommt auf Deinen variablennamen an).

wenn Du jetzt mittendrin ein server.print(xy) schickst und vorher xy einen wert gibst, sollte es die webseite schon anzeigen...

gruß stefan

Hi Stefan, prima, das geht schon in die richtige Richtung :-)

Jetzt muss ich nur noch sehen, wie ich den umgekehrten Weg (Webseite -> Werte seriell ausgeben) hinbekomme. Schaltflächen (z.B. Up / Down) oder gar Schieberegler sind dann der nächste Schritt.

Gruß, Greece2001

Eher eine Frage an deinen Browser, ob er Schieberegler (HTML5) kann ;) http://www.formws.onlex.de/html5/range.html

Bei wenigen Daten reicht die (standard) Datenübergabe-Methode Get. Dein Arduino - Webserverchen muss sie dann aus der URL rausfischen.

hi,

hier mal ein anfang. Dein netz muß wegen jQuery internet-verbindung haben. webduino-library installieren.
IP anpassen und mit (zb.)

192.168.0.153/rgb

aufrufen. mit den oberen beiden buttons kannst Du die led am arduino ein- und ausschalten.
ist für mobile geräte optimiert.

gruß stefan

steuerung_test_led_13.ino (3.92 KB)

webduino.zip (31.6 KB)

michael_x: Eher eine Frage an deinen Browser, ob er Schieberegler (HTML5) kann ;) http://www.formws.onlex.de/html5/range.html

Bei wenigen Daten reicht die (standard) Datenübergabe-Methode Get. Dein Arduino - Webserverchen muss sie dann aus der URL rausfischen.

Hi Michael_x, "Range" hatte ich auch schon überlegt, wäre ganz bestimmt eine gute Lösung. HTML5 sollte ja mittlerweile Standard sein. Müsste mal probieren, was passiert, wenn ein Browser das nicht kann. "Get" sollte machbar sein, so viele Werte sind es ja nicht. Es kann zur Zeit ja immer nur eine Schaltfläche oder ein Regler bedient werden. Da ist halt im Webserverchen etwas mehr Arbeit erforderlich. Aber gute Ideen, Danke dafür !

Gruß, Greece2001

Eisebaer: hi,

hier mal ein anfang. Dein netz muß wegen jQuery internet-verbindung haben. webduino-library installieren. IP anpassen und mit (zb.)

192.168.0.153/rgb

aufrufen. mit den oberen beiden buttons kannst Du die led am arduino ein- und ausschalten. ist für mobile geräte optimiert.

gruß stefan

Hallo Stefan, Internetverbindung wird da sein, sonst gäbe es auch an anderen Stellen Probleme. Werde Deine Vorschläge am WE mal ausprobieren. Danke schon mal für die Tips. Das ist eine gute Hilfe in die richtige Richtung :-)

Gruß, Greece2001

hi,

ich hab' mich jetzt endlich aufgerafft und einen slider, wie Du ihn auch willst, in die seite integriert. schließlich will ich das licht im zimmer ja auch dimmen können.

es funktioniert soweit, aber (!!!):

das senden des wertes mit ajax und das empfangen und reagieren des arduino dauert etwa eine drittelsekunde. wenn man also auf den slider tippt, dann wird die led auch richtig gedimmt. wenn man aber den slider mit dem finger "schiebt", bekommt der arduino zuviele werte zu schnell (oder nicht schnell genug über's netzwerk ??), und dann schaltet er langsam die werte rauf oder runter. außerdem verschluckt er sich dann leicht und schaltet zwischendurch mal auf voll oder aus und dann zum nächsten wert. (ich hoffe, Du verstehst, was ich meine...).

ich kann gut leben damit, muß man halt hintippen, wo man hinwill, aber richtig schön ist es nicht. ich muß dazusagen, nach meinen erfahrungen habe ich auf keinen fall damit gerechnet, daß da flüssig mit der fingerbewegung gedimmt wird. das liegt eher am netzwerk als am arduino (oder ein bißchen an beidem).

gruß stefan

Eisebaer:
hi,

hier mal ein anfang. Dein netz muß wegen jQuery internet-verbindung haben. webduino-library installieren.
IP anpassen und mit (zb.)

192.168.0.153/rgb

aufrufen. mit den oberen beiden buttons kannst Du die led am arduino ein- und ausschalten.
ist für mobile geräte optimiert.

gruß stefan

Hallo Stefan,
wollte mal ausprobieren, was “steuerung_test_led_13.ino” so macht. Webduino.zip als library erfolgreich installiert, steuerung_test_led_13.ino lässt sich aber leider nicht compilieren.

Hier ein Auszug aus der nahezu endlosen Liste an Fehlermeldungen:
"In file included from steuerung_test_led_13.ino:3:0:
C:\Users\XX\Documents\Arduino\libraries\webduino/WebServer.h:192:21: error: ‘prog_uchar’ does not name a type
void printP(const prog_uchar *str);

  • ^*
    C:\Users\XX\Documents\Arduino\libraries\webduino/WebServer.h:192:33: error: ISO C++ forbids declaration of ‘str’ with no type [-fpermissive]
    void printP(const prog_uchar *str);
  • ^*
    C:\Users\XX\Documents\Arduino\libraries\webduino/WebServer.h:195:21: error: ‘prog_char’ does not name a type
    void printP(const prog_char str) { printP((prog_uchar)str); }
  • ^*
    C:\Users\XX\Documents\Arduino\libraries\webduino/WebServer.h:195:32: error: ISO C++ forbids declaration of ‘str’ with no type [-fpermissive]
    void printP(const prog_char str) { printP((prog_uchar)str); }
  • ^*
    C:\Users\XX\Documents\Arduino\libraries\webduino/WebServer.h:195:8: error: ‘void WebServer::printP(const int*)’ cannot be overloaded
    void printP(const prog_char str) { printP((prog_uchar)str); }

    C:\Users\XX\Documents\Arduino\libraries\webduino/WebServer.h:126:32: error: ‘prog_uchar’ does not name a type
    #define P(name) static const prog_uchar name[] PROGMEM
  • ^*
    C:\Users\XX\Documents\Arduino\libraries\webduino/WebServer.h:1125:3: note: in expansion of macro ‘P’
  • P(cbPart2) = “’ value=’”;*
  • ^*
    C:\Users\XX\Documents\Arduino\libraries\webduino/WebServer.h:126:32: error: ‘prog_uchar’ does not name a type
    #define P(name) static const prog_uchar name[] PROGMEM
  • ^*
    C:\Users\XX\Documents\Arduino\libraries\webduino/WebServer.h:1126:3: note: in expansion of macro ‘P’
  • P(cbPart3) = "’ ";*
  • ^*

    steuerung_test_led_13.ino: In function ‘void rgbCmd(WebServer&, WebServer::ConnectionType, char*, bool)’:
    C:\Users\XX\Documents\Arduino\libraries\webduino/WebServer.h:126:32: error: ‘prog_uchar’ does not name a type
    #define P(name) static const prog_uchar name[] PROGMEM
  • ^*
    steuerung_test_led_13.ino:47:5: note: in expansion of macro ‘P’
    steuerung_test_led_13:86: error: ‘message’ was not declared in this scope
    steuerung_test_led_13.ino: In function ‘void setup()’:
    steuerung_test_led_13:92: error: ‘Serial1’ was not declared in this scope
    steuerung_test_led_13.ino: In function ‘void serSend(byte*)’:
    steuerung_test_led_13:134: error: ‘Serial1’ was not declared in this scope
    ‘message’ was not declared in this scope"

Irgendwas scheint da gar nicht zu passen, denn auch die mit der Lib. installierten Beispiele (mit und ohne AJAX) lassen sich nicht compilieren. Ich verwende Version Arduino 1.6.5.
Hast Du einen Tipp, wo der Fehler hier stecken könnte ?

Gruß, Greece2001

hi,

dann funktioniert diese version von webduino nicht mit dieser IDE-version.

bessere möglichkeit: neuere webduino-version suchen. falls das nicht geht: lad' Dir die 1.0.5 der IDE hier bei download runter (zip-version, nur entpacken, nicht installieren) und mach's mit der.

gesucht, gefunden: https://github.com/sirleech/Webduino

wie ich oben schon geschrieben hab' funtionieren die schieberegler, aber eben nur eingeschränkt. klar, es muß ja bei jeder wertänderung eine neue verbindung aufgebaut werden.

es gibt auch schon eine lösung für solche probleme, nennt sich websocket, aber ich hab' noch keine anwendung dieser technik auf dem arduino gefunden. deshalb mach' ich's jetzt anders und verwende zusätzlich einen raspberry pi. falls Du das willst, findest Du unter

https://www.google.de/#q=arduino+socket.io&tbm=vid

sehr schöne beispiele, wie flüssig das geht. da wird der raspberry als webserver verwendet und der arduino mit serial an den pi angebunden.

falls Du weiter probleme mit der library hast, schreib' es bitte, ich schau dann zuhause nach, dort hab' ich verschiedene versionen der IDE drauf.

gruß stefan

Habe die aktuelle Version von Webduino jetzt installiert und nun geht's :)

Gruß + Dank, Greece2001