GPIO über Website und JavaScript?

  • Guten Tag liebes Forum,


    Ich bin seit einiger Zeit aus dem Programmieren raus und bin daher auf Hilfe angewiesen, vielleicht kann mir hier jemand weiterhelfen.

    Ich arbeite an einem "eigentlich kleinem" Raspberry Projekt bei dem es um die Steuerung eines Autos geht. Über HTML habe ich eine Seite aufgebaut, wie es auch in vielen Tutorials zu finden ist, mit der man ersteinmal 4 LED´s (später Motoren) ansteuern kann.

    Soweit so gut... Aber...

    Da das Auto ja fahren und lenken soll, muss gewährleistet sein, dass ich nicht jedesmal eine neue HTML Seite öffne oder ein neues Protokoll senden muss weil das sehr viel Zeit kostet.


    Damit zu meinem Problem und zu meiner Frage:

    Wie schaffe ich es, eine für das Handy optimierte Website so zu erstellen, dass mit einem Tastendruck auf z.B. "Vorwärts" das Auto VOR-fährt und beim loslassen es anhält.

    Oder es dauerhaft Vorfährt und ich dann nur lenke wenn ich mit dem Finger auf eine Richtungstaste drücke bis ich wieder loslasse?

    Bei meiner LED Testschaltung sollte daher die jeweilige LED nur dann aufleuchten, wenn ich eine Taste gedrückt halte. (Button als „Taster“ nicht als Schalter)



    Ich hoffe ihr wisst was ich meine und würde mich sehr über positive Ergebnisse am Ende freuen.:helpnew:

  • Moin


    Ich steuere meine zwei Servos mittels jQuery an (mousedown, mouseup)

    https://www.w3schools.com/jquery/event_mousedown.asp


    Zumindest war es vor vier Jahren so und seitdem hab ich auch nichts mehr verändert. Ob es was besseres, einfacheres gibt kann ich dir nicht sagen. Bin eh ein JS noob.


    Edit:

    Läuft auch auf Touchscreens. Also nicht vom Wort Maus irreleiten lassen.

    https://plus.google.com/photos…67153/6064828938461852946


    Aber es gibt hier ganze Themen zu deiner Frage. Mal die Suchfunktion nutzen.

  • Ich danke dir.

    Aber bei längerem berühren markiert er nur den Text anstatt das Event auszuführen und auf meinem Handy hat es leider nur die Klick-Funktion.


    Kann man dies irgendwie unterbinden ?🤔

  • Das laeuft bei mir auf allen mobilen Geraeten die ich zur Verfuegung habe (und auf einem Linux-PC):


  • Danke Tell. So funktioniert es bei mir auch. Endlich keine Kopierfunktion mehr😬

    Eine Frage habe ich jetzt aber noch.


    Muss ich beim schalten von den GPIO‘s ein extra PHP Dokument anlegen und einbinden oder kann ich das auch in einem Donument lassen?

  • Da ist bloss ein Proof of Concept.


    Jetzt fehlt noch die Uebermittlung des Zustands an den Server (Stichwort AJAX), und ein Programm auf dem Server.


    Bis zum Server gibt's nicht viel anderes als JavaScript. Auf dem Server eine grosse Auswahl an Sprachen und Frameworks. bootsmann empfiehlt ziemlich sicher ein python-Framework, andere raten zu PHP, wieder andere zu node.js und JavaScript.


    Ganz harte machen es mit einem CGI-Programm in C (-: und tschuess, ich muss jetzt hier raus, gleich rumort es :)

  • Kann der Code denn nicht in einem Dokument stehen? Weil da bin ich nämlich raus.


    Ich kann über PHP und 2 Buttons auf der Website den jeweiligen Ausgang schalten. (Ein & Aus)

    Jetzt kann ich also doch nicht so leicht den Befehl beim halten des Buttons weitergeben?:@


    Ich versuche mich schon seit gestern Abend daran, aber einen Durchblick konnte ich mir leider noch nicht wirklich verschaffen:(

  • > Jetzt kann ich also doch nicht so leicht den Befehl beim halten des Buttons weitergeben?

    Wie gesagt, das Stichwort ist AJAX. Eine Google-Suche bringt mehr als 51 Millionen Resultate...


    Hier gibt's ein Beispiel: https://blog.heimetli.ch/ajax-…che-cgi-raspberry-pi.html


    Das JavaScript wird sogar noch einfacher, weil es den IntervalTimer nicht braucht.


    Wenn's weniger Code sein soll: jQuery macht es einfacher (wenn man es erst mal verstanden hat)


    Und kuerzlich habe ich die fetch-API entdeckt, das macht es auch recht einfach (wenn man die Promises versteht)


    Und jedes Framework das etwas auf sich haelt hat natuerlich seine eigene Methode um den XMLHttpRequest zu kapseln.