Events

23.05.2022: Tiefpassfilter

:

Elektronik | Funk | Software

Der Technik-Blog

  • Social Media

    Werbung:


    Neue Artikel


    Events

    Der Technik-Blog

    Arduino steuern mit UDP und PHP

    Arduino über PHP steuern

    Alex @ AEQ-WEB

    Dieses Projekt bildet zusammen mit dem Hauptprojekt (Arduino weltweit Steuern) den dafür notwendigen Client. Über ein einfaches HTML-Formular können Steuerbefehle an den Arduino gesendet werden. Ein PHP-Script eröffnet im Hintergrund einen UDP-Socket und sendet den entsprechenden Steuerbefehl weiter an den Relay-Server. Dieser Server sendet das UDP-Paket an den Controller (Arduino) weiter. Anschließend sendet der Controller im Erfolgsfall eine Rückmeldung an das UDP-Relay und dieses wiederum leitet das Datenpaket an den PHP-Script weiter, der auf die Antwort wartet. Kommt innerhalb vom definierten Timeout eine Antwort, so wird diese vom PHP-Script verarbeitet und entsprechend an das HTML-Formular übergeben.

    So funktioniert das Script

    Über den PHP-Code wird ein HTML Formular ausgeben. Dieses kleine Formular besteht aus drei Buttons und zwei Ausgabezeilen. Mittels POST-Methode werden einzelne Steuerbefehle vom Formular an PHP übergeben. Die Buttons können eine am Arduino angeschlossene LED schalten, oder einen Statusbericht vom Arduino anfordern. Bekommt das Script ein entsprechendes Datenpaket vom Server zurück, wird dies entsprechend verarbeitet und eine Ausgabe im Browser erfolgt. Kommt es zu einem Fehler oder kommt keine Antwort vom Controller auf den gesendeten Steuerbefehl, so wird dies mit einer Error-Meldung ausgegeben.

    Werbung:

    Bild: Erfolgreiches Einschalten der LED mit Rückmeldung

    Bild: Wenn der Steuerbefehl fehl schlägt oder das Board bzw. der Server offline ist

    Werbung:

    Bild: Abfrage von IP-Adresse und Laufzeit des Controllers

    Download PHP Source Code (ZIP)

    PHP UDP Controller
    Download
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    <?php
    $ip = "localhost";
    $port = 9999; //UDP port on server
    $timeout = 2; //Timeout in seconds
    
    $msg_out = "";
    $msg_debug = "";
    
    if (isset($_POST["cmd"])) {
    
        $cmd = $_POST["cmd"];
    
        if ($cmd == "CMD:LED=1" || $cmd == "CMD:LED=0" || $cmd == "CMD:INFO") {
            $sock = socket_create(AF_INET, SOCK_DGRAM, SOL_UDP);
            socket_set_option($sock, SOL_SOCKET, SO_BROADCAST, 1);
            socket_set_option($sock, SOL_SOCKET, SO_RCVTIMEO,
                    array("sec" => $timeout, "usec" => 0));
            socket_sendto($sock, $cmd, strlen($cmd), 0, $ip, $port);
    
            while (true) {
                $ret = @socket_recvfrom($sock, $buf, 1024, 0, $ip, $port);
                if ($ret === false) {
                    break;
                }
                if (strpos($buf, "DONE") !== false) {
                    $msg_out = "Arduino switched LED successful!";
                } else if (strpos($buf, "MSG-DEV:") !== false) {
                    $msg_out = $buf;
                } else {
                    $msg_out = "Error!";
                }
                $msg_debug .= "UDP Message: < $buf ><br>";
            }
            socket_close($sock);
        }
    }
    ?>
    
    <!DOCTYPE html>
    <html>
        <body>
            <h1>PHP UDP Controller</h1>
            <p><?php echo $msg_out ?></p>
            <br>
            <form action="" method="POST">
                <button type="submit" name="cmd" value="CMD:LED=1">LED ON</button>
                <button type="submit" name="cmd" value="CMD:LED=0">LED OFF</button>
                <button type="submit" name="cmd" value="CMD:INFO">INFO</button>
            </form>
            <br>
            <small>Received Response from Server (RAW):</small><br>
            <small><?php echo $msg_debug ?></small>
        </body>
    </html>
    

    Werbung:

    PHP Code

    In diesem Absatz sind die einzelnen Befehlszeilen beschrieben:

    2: IP/Domain vom UDP Server Relay
    3: Port vom UDP Server Relay
    4: Timeout für das empfangen von UDP-Paketen in Sekunden
    9-36: Befehle werden ausgeführt, wenn ein Steuerbefehl vom HTML Formular empfangen wurde
    13: Überprüfung auf gültige Steuerbefehle vom Formular
    14: Eröffnet in PHP einen UDP Socket
    15,16: Fügt Zusatzoptionen wie z.B. Timeouts zum Socket hinzu
    18: Sendet das UDP Paket mit dem Steuerbefehl an den Relayserver
    20-33: Wartet und verarbeitet die Rückmeldungen von Controller und Server
    34: Beendet den Socket nach dem Ablauf vom Timeout
    40-54: Einfaches HTML Formular mit drei Buttons, Statusausgabe und Debugausgabe


    122X122

    Über den Autor

    Alex, der Gründer von AEQ-WEB. Seit über 10 Jahren beschäftigt er sich mit Computern und elektronischen Bauteilen aller Art. Neben den Hardware-Projekten entwickelt er auch Webseiten, Apps und Software für Computer.

    Top Artikel in dieser Kategorie:

    Arduino LM358 PT1000 Sensor Converter

    Temperatur messen mit PT1000 & Arduino

    • Video
    • DE/EN

    PT1000 Sensoren können nicht direkt analog mit einem Mikrocontroller gemessen werden. Wie baut man einen Messwandler mit dem LM358 für den PT1000 und Arduino?

    Weiterlesen
    Arduino Smartmeter S0 Watt Counter

    Arduino Smartmeter

    • Video

    In diesem Artikel zeigen wir, wie aus einem einfachen Stromzähler und einem Arduino ein Smartmeter gebaut wird, das den Zählerstand im EEPROM speichern kann

    Weiterlesen

    Social Media

    Werbung:


    Neue Artikel


    Events