PHP-Script für LoRaWAN Sensordaten
07.07.2024
Elektronik | Funk | Software
Der Technik-Blog
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.
Hauptartikel: Arduino weltweit steuern
Code Dokumentation: Arduino UDP Controller
Code Dokumentation: Python UDP Relay
Ü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.
Bild: Erfolgreiches Einschalten der LED mit Rückmeldung
Bild: Wenn der Steuerbefehl fehl schlägt oder das Board bzw. der Server offline ist
Bild: Abfrage von IP-Adresse und Laufzeit des Controllers
Download PHP Source Code (ZIP)
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> |
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
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?
WeiterlesenIn diesen Artikel zeigen wir wie man große Lasten mittels eines MOSFET-Transistors über das Arduino Board steuert und die Drehzahl von einem Motor regelt
WeiterlesenAEQ-WEB © 2015-2024 All Right Reserved