Forum: Mikrocontroller und Digitale Elektronik Raspberry Webserver uart kommunikation


von andre (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich spiele ein bischen mit dem Raspberry.
Ich habe den lighttpd Webserver installiert und auch meine eigene Seite 
erstellt.

Nun meien Frage ich möchte gerne meine Lichter über die Webseite per USB 
schalten.

Am USB Port ist ein USB zu Seriell adapter der ist am STM32F4 
angeschlossen.

1. Es sollte dann über die Webseite ein String zum STM32F4 gesendet 
werden mit der information an oder aus.

2. Der Staus der einzelnen Lichter sollte dann auch auf der Webseite 
Angezeigt werden.

Könnte mir einer weiterhelfen , im Web hab ich nichts gefunden oder 
vielleicht auch  nicht die richtigen Suchbegriffe verwendet

von Stefan F. (Gast)


Lesenswert?

Du musst dazu ein Script auf dem Webserver ausführen.

Ein Formular auf der Webseite wird per POST an den Server gesendet. Der 
führt ein Script aus, welches die geposteten Parameter auswertet und 
dementsprechend seriell mit dem STM32 kommuniziert.

Ich würde das mit PHP machen.
https://opensource.com/article/17/3/operate-relays-control-gpio-pins-raspberry-pi
http://www.ko4bb.com/getsimple/index.php?id=serial-port-access-from-php-with-raspberry-pi

Oder mit einer Qt Anwendung, die selbst Webserver ist: 
http://stefanfrings.de/qtwebapp/index.html

Auf jeden Fall solltest du zuerst die Webseite entwickeln, ohne 
Kommunikation zum STM32.Dann machst du den STM32 fertig, ohne 
Kommunikation zum Webserver. Kannst du  ja mit einem seriellen 
Terminalprogramm (Cutecom, Hammer Terminal) testen. Wenn diese beiden 
Teile unabhängig laufen, erst dann bringst du sie zusammen.

von andre (Gast)


Lesenswert?

Stefanus F. schrieb:
> Du musst dazu ein Script auf dem Webserver ausführen.

> Ich würde das mit PHP machen.
> 
https://opensource.com/article/17/3/operate-relays-control-gpio-pins-raspberry-pi
> 
http://www.ko4bb.com/getsimple/index.php?id=serial-port-access-from-php-with-raspberry-pi
>

Der STM32 funktioniert bereits tadellos.

mein problem ist dahin gehend das PHP in der Webseite zu integrieren für 
die Kommunikation.

ich habe für meine Anwendung auch keine Beispiele gefunden.

ich habe den raspberry erst seit ein paar Tagen

von achkomm (Gast)


Lesenswert?

ich habe für meine Anwendung auch keine Beispiele gefunden.


Komm, das Netz ist voll davon.
Suchbegriffe hast Du ja schon passend, raspberry kannst Du dabei 
weglassen.

von Stefan F. (Gast)


Lesenswert?

andre schrieb:
> mein problem ist dahin gehend das PHP in der Webseite zu integrieren für
> die Kommunikation.
> ich habe für meine Anwendung auch keine Beispiele gefunden.

Hast du die beiden PHP Tutorials angesehen, die ich Dir empfohlen habe?

von andre (Gast)


Lesenswert?

Stefanus F. schrieb:

> Hast du die beiden PHP Tutorials angesehen, die ich Dir empfohlen habe?

Ja das hab ich gemacht.

>
http://www.ko4bb.com/getsimple/index.php?id=serial-port-access-from-php-with-raspberry-pi
>

bei diesem weis ich auch nicht welchew nummer ich dort am USB eingebe
$serial->deviceSet("/dev/ttyUSB0");

von Stefan F. (Gast)


Lesenswert?

andre schrieb:
> bei diesem weis ich auch nicht welchew nummer ich dort am USB eingebe
> $serial->deviceSet("/dev/ttyUSB0");

Stecke deinen USB-UART Adapter an und gebe danach "sudo dmesg" ein. Dann 
müsste eine Meldung erscheinen, wie das Device heisst. Es müsste 
irgendwas mit /dev/tty... sein.

Dann teste die Kommunikation mit deinem STM32, indem du ein 
Terminalprogramm  (Cutecom) verwendest. Dort wirst du dieses Device auch 
einstellen müssen.

von andre (Gast)


Lesenswert?

Stefanus F. schrieb:

> Stecke deinen USB-UART Adapter an und gebe danach "sudo dmesg" ein. Dann
> müsste eine Meldung erscheinen, wie das Device heisst. Es müsste
> irgendwas mit /dev/tty... sein.
>
> Dann teste die Kommunikation mit deinem STM32, indem du ein
> Terminalprogramm  (Cutecom) verwendest. Dort wirst du dieses Device auch
> einstellen müssen.
Die Kommunikation funktionier tadellos.

von Testfall (Gast)


Lesenswert?

Wo genau ist dann dein Problem?

Du kannst dem stm Daten schicken. Bau das in ein Skript und führe das 
per php (Google: "php execute Script") aus.

"kein Beispiel gefunden" zählt nicht. Konkrete Probleme bitte oder eben 
mit den Grundlagen - zum Beispiel auf Basis der genannten Tutorials - 
bekannt machen.

von Stefan F. (Gast)


Lesenswert?

andre schrieb:
> Die Kommunikation funktionier tadellos.

Dann weißt du zwangsläufig auch, welches Device du angeben musst. Wo war 
nochmal das Problem?

von andre (Gast)


Lesenswert?

Testfall schrieb:
> Wo genau ist dann dein Problem?
>
> Du kannst dem stm Daten schicken. Bau das in ein Skript und führe das
> per php (Google: "php execute Script") aus.
>
> "kein Beispiel gefunden" zählt nicht. Konkrete Probleme bitte oder eben
> mit den Grundlagen - zum Beispiel auf Basis der genannten Tutorials -
> bekannt machen.

Mein Problem ist wie ich das in meine HTML Seite einbaue und speichere 
ich das script mit welche Rechte

von Stefan F. (Gast)


Lesenswert?

andre schrieb:
> Mein Problem ist wie ich das in meine HTML Seite einbaue und speichere
> ich das script mit welche Rechte

Das ist doch Haarklein in dem ersten Tutorial erklärt, das ich Dir 
empfohlen habe.

von achkomm (Gast)


Lesenswert?

Dat wird nix...

von pegel (Gast)


Lesenswert?

Was spielt eigentlich der Raspi für eine Rolle in dem ganzen Projekt.

Wenn schon ein STM32F4 im Spiel ist, sieh dir einfach das Beispiel
"Webserver mit SSI and CGI" an.

von andre (Gast)


Lesenswert?

pegel schrieb:
> Was spielt eigentlich der Raspi für eine Rolle in dem ganzen
> Projekt.
>
> Wenn schon ein STM32F4 im Spiel ist, sieh dir einfach das Beispiel
> "Webserver mit SSI and CGI" an.

Dort nutze ich den LWIP WEB-Server leider wird der Speicher langsam 
knap.

Deshalb der Raspi

von pegel (Gast)


Lesenswert?

Na dann.
Eine Möglichkeit wäre allerdings noch, Web Seiten und andere Daten 
unkomprimiert auf eine SD Karte auslagern.

von Heinz (Gast)


Lesenswert?

Ich würde den STM nicht direkt über die Webseite per UART ansteuern.
Ähnliches hatte ich anfangs auch gemacht, war dann aber bei 
Erweiterungen
und Änderungen sehr unflexibel und wurde geändert.


Ich hätte folgenden Vorschlag (bei mir seit langem im Einsatz):
---------------------------------------------------------------
a) UDP-Server in Python, der die UART bedient
Der Server lauscht auf einem UDP-Port und verarbeitet UDP Datenpakete
In den Datenpaketen stecken die Befehle, die dann per UART
an das angeschlossene Gerät gesendet werden

b) dann so wie oben beschrieben mit php arbeiten, aber das php schickt
 UDP-Befehle an den Server und nicht direkt Befehler per UART.



Hier der sehr "übersichtliche" Server, der meine FS20 Aktoren im 
Netzwerk ansprechbar macht:


#!/usr/bin/python

#-------------------------------------------------------------
# imports
#-------------------------------------------------------------
from socket import *
import serial
import time


#-------------------------------------------------------------
# UDP server configuration
#-------------------------------------------------------------
HOST = "0.0.0.0"
PORT = 49454


#-------------------------------------------------------------
# serial RS232 interface
#-------------------------------------------------------------
ser = serial.Serial('/dev/ttyS0', 9600)


#-------------------------------------------------------------
# main loop
#-------------------------------------------------------------
serversock = socket(AF_INET, SOCK_DGRAM)
ADDR = (HOST, PORT)
serversock.bind(ADDR)
print('waiting for UDP connection on port', PORT)

while 1:
  data, sender_addr = serversock.recvfrom(128)
  ser.write(data)

von Stefan F. (Gast)


Lesenswert?

Heinz schrieb:
> a) UDP-Server in Python, der die UART bedient
> Der Server lauscht auf einem UDP-Port und verarbeitet UDP Datenpakete
> In den Datenpaketen stecken die Befehle, die dann per UART
> an das angeschlossene Gerät gesendet werden

Das gibt es schon fertig und hört auf den Namen "socat".

https://unix.stackexchange.com/questions/453974/create-a-udp-to-serial-bridge-with-socat

von Heinz (Gast)


Lesenswert?

Mein Aspekt war eigentlich  nur, dass ich anregen wollte, die serielle 
Schnittstelle nicht direkt an die http POST Requests anzuknoten.

Aber viele Wege führen nach Rom insofern ist deine Anmerkung absolut 
berechtigt ;)

von Sascha W. (sascha-w)


Lesenswert?

andre schrieb:
> pegel schrieb:
>> Was spielt eigentlich der Raspi für eine Rolle in dem ganzen
>> Projekt.
>>
>> Wenn schon ein STM32F4 im Spiel ist, sieh dir einfach das Beispiel
>> "Webserver mit SSI and CGI" an.
>
> Dort nutze ich den LWIP WEB-Server leider wird der Speicher langsam
> knap.
dann lass doch die Seite[n] die die Befehle entgegen nimmt oder aktuelle 
Zustände liefert (am besten per JSON) auf dem STM.
Oder sende die Daten per UDP aus dem PHP-Script vom Raspi zum STM.

Sascha

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.