Hallo zusammen.
Ich hoffe Ihr könnt mir weiter helfen.
Kurz zum Projekt:
Wie in der Überschrift schon beschreiben versuche ich über einen µC
(Atmega8) der per UART mit einen Microchip RN171-XV W-LAN Modul
verbunden ist über eine Webseite Geräte (aus Testgründen im Moment LED´s
) zu schalten. Die aktuellen Zustände der Ausgänge werden in einer MySQL
Datenbank gespeichert. Als Server dient ein Rasperry Pi . Auf diesem
läuft ein Apache 2 Server mit PHP Modul, die Datenbank (MySQL-Server),
ein Openvpn-Client und ein Wlan-Router (hostapd).
Zur Funktionsweise:
Über die Webseite wird per Button „ein“ Zeichen an das Wlan-Modul
gesendet. Die Verbindung (alles in PHP) wird per „fsockopen“ aufgebaut
und per „fputs“ wird das Zeichen gesendet. Dieses Zeichen wir vom µC
interpretiert und sendet nach der Verarbeitung den aktuellen Zustand des
Ausgangs zurück. Dies wird dann in der Datenbank abgespeichert. Über
„fgets“ wird das Zeichen empfangen. Danach wird per „fclose“ die
Verbindung zum Wlan-Modul wieder abgebaut.
Das Problem besteht darin, dass leider nicht immer die Verbindung zum
Wlan-Modul wieder abgebaut wird. Manchmal funktioniert alles
reibungslos. Aber immer öfter wir die Verbindung nicht abgebaut und ich
muss warten bis ein (ich weiß im Moment nicht genau wie es richtig
heißt. Ich nenne es mal ) „Timer Overflow“ eintritt und somit die
Verbindung abgebaut wird. Während dieser Zeit wartet der Browser
scheinbar auf eine Rückantwort die er nicht bekommt.
Könnt Ihr mir da irgendwie weiterhelfen? Hier kurz die Funktion des
senden und empfangen.
1 |
|
2 | function sende ($ip,$bef) // Funktion erstellen mit Parameterübergabe
|
3 | {
|
4 | //Schreiben und Lesen auf IP
|
5 | $fp=fsockopen($ip,80); // stellt die Verbindng zu einem WLAN Modul ($ip) her mit dem Port 80 und speichert den Dateizeiger in eine Variable ($fp)
|
6 | fputs ($fp, $bef); // schickt Daten ($bef) an die im Dateizeiger ($fp) gespeicherte Adresse
|
7 | $id1 =fgets($fp,128); //ließt STRING, mit der maximalen Länge von 128 Zeichen, ein der von WLAN Modul ($fp) gesendet wird; alternativ kann auch "$buffer =fgetc($fp);" benutzt werden, ließt aber nur einen CHAR ein
|
8 | fclose($fp);
|
9 | $fp=fsockopen($ip,80);
|
10 | $buffer=fgets($fp,128);
|
11 | fclose ($fp); // schließt die Verbindung auf die der Dateizeiger ($fp) zeigt
|
12 | db($buffer,$id1); // über gibt den Inhalt von $buffer an die Funktion db; diese Funktion befindet sich in der Datei db.php
|
13 | echo "$id1";
|
14 | }
|
Gerne schiebe ich auch noch ein paar Codes hinterher.
Danke schon mal im Voraus.
Ernesto