Suchen
Inside Forum
Nützliche Links




 
phpforum.de bei Facebook
 
phpforum.de bei Twitter
 

Zurück   PHP Forum: phpforum.de > andere (Programmier-)Sprachen > JavaScript

JavaScript Alles rund um JavaScript, Ajax und die diversen JS-Frameworks.

Antwort
 
Themen-Optionen Ansicht
  #11  
Alt 15.04.2018, 14:44
protestix protestix ist gerade online
Engagierter Besucher
 
Registriert seit: 29.06.2016
Beiträge: 633
Standard AW: Kleiner Webserver (Arduino)

Du rufst eine ip Adresse auf, das sagt aber noch nichts aus was dann aufgerufen wird.
Es kann sich dahinter eine index.html oder eine index.php verbergen oder gar eine andere Seite, je nachdem wie der Server konfiguriert ist.

Was schaut denn der Response vom Server aus wenn du die Adresse im Browser direkt aufrufst.
Dazu noch mal der Hinweis zu F12 und Network in den Browserwerkzeugen, da kannst du das sehen.

Erst wenn du weisst welche Datei aufgerufen wird und was da passiert, kannst du manipulativ eingreifen.

Hast du das HTT-Protokoll schon verstanden?
Mit Zitat antworten
  #12  
Alt 15.04.2018, 15:35
neuling456 neuling456 ist offline
Besucher
 
Registriert seit: 20.12.2009
Beiträge: 35
Standard AW: Kleiner Webserver (Arduino)

Hallo

Nee ich rufe keine Webseite auf, ich schicke damit
"192.168.1.3:80/?sr=30"
nur den Befehl sr=30 an den Arduino, und der Arduino soll dann einfach eine Antwort zurück schicken. Ich habe es nun geschaft, leider klappt das ganze nur im IE, der EDGE braucht anscheint noch irgendwas anderes :-(
Mit Zitat antworten
  #13  
Alt 15.04.2018, 15:47
protestix protestix ist gerade online
Engagierter Besucher
 
Registriert seit: 29.06.2016
Beiträge: 633
Standard AW: Kleiner Webserver (Arduino)

Wäre gut wenn du uns den Code zeigst, wie du es geschafft hast.

Mit Informationen bist du sehr spärlich, du beantwortest immer nur die Hälfte der Fragen, wenn überhaupt, das macht es schwierig dir zu helfen.
Mit Zitat antworten
  #14  
Alt 15.04.2018, 15:53
neuling456 neuling456 ist offline
Besucher
 
Registriert seit: 20.12.2009
Beiträge: 35
Standard AW: Kleiner Webserver (Arduino)

Code vom Arduino
Code:
#include <SparkFunESP8266WiFi.h>
#include <Servo.h>
 
const char mySSID[] = "SSID";
const char myPSK[] = "Kennwort";


const String htmlHeader = "HTTP/1.1 200 OK\r\n\r\n"
                          "<!DOCTYPE HTML>\r\n"                          
                          "<html>\r\n"
                          "</html>\r\n";                      

                         
ESP8266Server server = ESP8266Server(80);

// Servo-Objekt erzeugen
Servo Servo01;
Servo Servo02;

int intPosServo = 90;

void setup()
{
  Serial.begin(9600);  
  initializeESP8266();
  connectESP8266();
  displayConnectInfo();
  serverSetup();
  Servo01.attach(10);
  Servo01.write(intPosServo);
  delay(500);
  Servo01.detach();
  Servo02.attach(11);
  Servo02.write(intPosServo);
  delay(500);
  Servo02.detach();  
}

void loop()
{
  serverDemo();  
}

void initializeESP8266()
{
  int test = esp8266.begin();
  if (test != true)
  {
    Serial.println(F("Error talking to ESP8266."));
    errorLoop(test);
  }
  Serial.println(F("ESP8266 Shield Present"));
}

void connectESP8266()
{
  int retVal = esp8266.getMode();
  if (retVal != ESP8266_MODE_STA)
  { // If it's not in station mode.
    // Use esp8266.setMode([mode]) to set it to a specified
    // mode.
    retVal = esp8266.setMode(ESP8266_MODE_STA);
    if (retVal < 0)
    {
      Serial.println(F("Error setting mode."));
      errorLoop(retVal);
    }
  }
  Serial.println(F("Mode set to station"));
  retVal = esp8266.status();
  if (retVal <= 0)
  {
    Serial.print(F("Connecting to "));
    Serial.println(mySSID);
    retVal = esp8266.connect(mySSID, myPSK);
    if (retVal < 0)
    {
      Serial.println(F("Error connecting"));
      errorLoop(retVal);
    }
  }
}

void displayConnectInfo()
{
  char connectedSSID[24];
  memset(connectedSSID, 0, 24);
  int retVal = esp8266.getAP(connectedSSID);
  if (retVal > 0)
  {
    Serial.print(F("Connected to: "));
    Serial.println(connectedSSID);
  }

  // esp8266.localIP returns an IPAddress variable with the
  // ESP8266's current local IP address.
  IPAddress myIP = esp8266.localIP();
  Serial.print(F("My IP: "));
  Serial.println(myIP);
}

void serverSetup()
{
  server.begin();
  Serial.print(F("Server started! Go to "));
  Serial.println(esp8266.localIP());
  Serial.println();
}

void serverDemo()
{
  String c = "";
  int pos01 = 0;
  int pos02 = 0;
  int pos03 = 0;
  ESP8266Client client = server.available(200);
  if (client)
  {
   
    Serial.println(F("Client Connected!"));
    // an http request ends with a blank line
     
    if (client.connected()) {
     
      if (client.available())
      {        
        c = esp8266.readString();
        Serial.println(c);
        if (c.indexOf("?sr") > 0) {

          pos01 = c.indexOf("sr");
          pos02 = c.indexOf("=", pos01);
          pos03 = c.indexOf(" ", pos02);
          Serial.println(c.substring(pos01, pos02));
          Serial.println(c.substring(pos02 + 1, pos03));
       
        }
        else {
          // give the web browser time to receive the data  
          delay(20);
         // close the connection:
         client.print(htmlHeader);
         client.stop();
         client.flush();
         Serial.println(F("Client abbruch"));                  
        }
      }
    }
    // give the web browser time to receive the data  
    delay(30);
    // close the connection:
   
    if (c.indexOf("?sr") > 0) {
      ServoRun(c.substring(pos01, pos02), c.substring(pos02 + 1, pos03));
    }    
    client.print(htmlHeader);
    client.print("ServoReady");
    client.stop();
    client.flush();
    Serial.println(F("Client disconnected"));
   

    c = "";
    pos01 = 0;
    pos02 = 0;
    pos03 = 0;
  }

}

void ServoRun(String strThisServo, String strDrehWert) {
  int intWarte = 50;
  int intDrehWert = strDrehWert.toInt();
  //Servo01.attach(10);
  //Servo02.attach(11);

  if (intDrehWert < intPosServo) {    
    while(intPosServo >= intDrehWert) {
      if (strThisServo == "sr1") {
        Servo01.attach(10);        
        Servo01.write(intPosServo);    
        delay(intWarte);      
      }
      if (strThisServo == "sr2") {      
        Servo02.attach(11);        
        Servo02.write(intPosServo);    
        delay(intWarte);      
      }      
      intPosServo = intPosServo - 1;
    }  
  }
  else if (intDrehWert > intPosServo) {
    while(intPosServo <= intDrehWert) {
      if (strThisServo == "sr1") {
        Servo01.attach(10);        
        Servo01.write(intPosServo);    
        delay(intWarte);    
      }
      if (strThisServo == "sr2") {
        Servo02.attach(11);
        Servo02.write(intPosServo);    
        delay(intWarte);
      }      
      intPosServo = intPosServo + 1;
    }  
  }
  delay(100);
  Servo01.detach();
  Servo02.detach();
  Serial.println("Servo Fertig");

}



// errorLoop prints an error code, then loops forever.
void errorLoop(int error)
{
  Serial.println(F("Error: ")); Serial.println(error);
  Serial.println(F("Looping forever."));
  for (;;)
    ;
}


Code der Webseite
Code:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Wi-servo</title>

<script src="jquery.js"></script>

<script>

var xhr = new XMLHttpRequest();

function mouseUpSr(angle, ServoNumber)
{
    document.getElementById("zielelement").innerHTML = "Servo in Bewegung"
  TextVar = myform2.inputbox.value;
  ArduinoUrl = "http://" + TextVar + ":80";


    xhr.onreadystatechange = function() {

      if (xhr.readyState == 4) {
        var StringResponse = xhr.responseText;
        document.getElementById("zielelement").innerHTML = StringResponse;
        if (StringResponse.search("ServoReady") > 0 ) {
          setTimeout(function(){SliderEinblenden()}, 1000);
        }

      }
    };


    xhr.open("GET", ArduinoUrl + "/?sr" + ServoNumber + "=" + angle);
    xhr.send(null);



    setTimeout(function(){SliderAusblenden()}, 100);


}


function SliderAusblenden(){

  document.getElementById("range01").disabled = true;
  document.getElementById("range02").disabled = true;
}

function SliderEinblenden(){

  document.getElementById("range01").disabled = false;
  document.getElementById("range02").disabled = false;
}




</script>

</head>


<body>

<h1> <b> Wi-servo </b> </h1>

<div style="margin: 0; width:500px; height:80px;">
  <FORM NAME="myform2" ACTION="" METHOD="GET">
    ESP8266 IP Address:
    <INPUT TYPE="text" NAME="inputbox" VALUE="Arduino IP">
  </FORM>
</div>


<h3> Servo 1 </h3>
<input type="range" id="range01" min="20" max="160" onmouseup="mouseUpSr(this.value, 1)" />
<h3> Servo 2 </h3>
<input type="range" id="range02" min="20" max="160" onmouseup="mouseUpSr(this.value, 2)" />
</br>
<p id="zielelement">Hier erscheint die Server-Antwort.</p>


</body>
</html>
Mit Zitat antworten
  #15  
Alt 15.04.2018, 16:08
protestix protestix ist gerade online
Engagierter Besucher
 
Registriert seit: 29.06.2016
Beiträge: 633
Standard AW: Kleiner Webserver (Arduino)

Die Datei auf deinem Server ist C Code, da bin ich raus.
Vielleicht weiss ja wer anderes zu helfen.
Mit Zitat antworten
  #16  
Alt 15.04.2018, 20:45
Kasalop Kasalop ist offline
Forum-Mitarbeiter
 
Registriert seit: 29.12.2006
Ort: München
Beiträge: 5.808
Standard AW: Kleiner Webserver (Arduino)

Hallo neuling456,

puh. Also erstmal zum Verständnis:
1) Du hast einen Arduino Uno laufen mit Wifi Shield von Sparkfun.
2) Am Arduino hängen 2 Servos, welche du über eine Weboberfläche steuern können möchtest
3) Im Arduino Programm verwendest du den Sparkfun example Server der zum Wifi-Shield dazugeliefert wird
4) Du kannst Daten an den Arduino senden und du erstellst auch eine Antwort, die zurück gesendet wird, aber ein leeres HTML Gerüst ist
5) Du würdest aber gerne Daten zurückgeben (und zwar Befehle)

- Was sind das für Befehle die du an den Webbrowser zurücksenden möchtest?
- Wieso hast du einen anderen header string in Posting #8, als dann im gezeigten Code im Posting #14?

Frage zu deinen Kenntnissen:
- Verstehst du den C Code, den du gepostet hast?
- Verstehst du den HTML / JS Code den du gepostet hast?
- Wie willst du zwei Servos mit einem Parameter steuern? Sollen die immer im gleichen Winkel stehen?
- Verstehst du das HTTP Protokoll (also die Angaben in dem header-string)? Für mich sieht das nämlich in Posting #8 nicht so aus (es sieht falsch aus).

An welchen der Punkte brauchst du Hilfe / können wir dir weiterhelfen?

Lg Kasalop
__________________
Es gibt 10 Arten von Menschen auf der Welt. Die die die binäre Mathematik verstehen und die die sie nicht verstehen!

Zu welcher der Gruppen gehörst du?

Geändert von Kasalop (15.04.2018 um 20:47 Uhr)
Mit Zitat antworten
  #17  
Alt 16.04.2018, 12:01
quantor quantor ist offline
Engagierter Besucher
 
Registriert seit: 25.10.2012
Beiträge: 3.122
Standard AW: Kleiner Webserver (Arduino)

Die Daten müssen normalerweise nur an die Standardausgabe gesendet werden. Du baust irgendeine Verbindung auf.

Du sagst da ist ein "kleiner Webserver" am laufen, welche Software nutzt du dafür?

Oder kann es sein, dass du einen HTTP Server programmieren willst?

Ich kenne mich auch nicht damit aus, aber soweit ich das bisher gesehen habe, gehört dazu eine Schleife die die Anfragen entgegen nimmt. Dein Programm beendet sich aber.
Mit Zitat antworten
  #18  
Alt 16.04.2018, 18:06
neuling456 neuling456 ist offline
Besucher
 
Registriert seit: 20.12.2009
Beiträge: 35
Standard AW: Kleiner Webserver (Arduino)

Hallo

Ja ich verstehe den Code den ich da geschrieben habe.
Noch mal es funktioniert alles, ich kann die Servos Steuern. Ja ich habe mir Teile die ich brauchte aus anderen Skatches kopiert.
Mein Problem was ich jetzt habe ist, das der Befehl "client.print("ServoReady");" den Befehl "ServoReady" an den Client Browser zurück senden soll, das ganze funktioniert auch mit dem IE 11, da Empfange ich den Befehl "ServoReady" beim Client, aber beim EDGE klappt das nicht, da kommt der Befehl nicht an.
Mit Zitat antworten
  #19  
Alt 16.04.2018, 20:43
hellbringer hellbringer ist offline
Forum-Mitarbeiter
 
Registriert seit: 27.03.2008
Beiträge: 31.029
Standard AW: Kleiner Webserver (Arduino)

Zitat:
Zitat von neuling456 Beitrag anzeigen
Mein Problem was ich jetzt habe ist, das der Befehl "client.print("ServoReady");" den Befehl "ServoReady" an den Client Browser zurück senden soll, das ganze funktioniert auch mit dem IE 11, da Empfange ich den Befehl "ServoReady" beim Client, aber beim EDGE klappt das nicht, da kommt der Befehl nicht an.
Das ist halt eine sehr schwammige Beschreibung. Was genau bedeutet "der Befehl kommt nicht an"? An welcher Stelle geht er verloren? Wie sehen HTTP-Request und -Response aus?
Mit Zitat antworten
  #20  
Alt 16.04.2018, 21:01
Kasalop Kasalop ist offline
Forum-Mitarbeiter
 
Registriert seit: 29.12.2006
Ort: München
Beiträge: 5.808
Standard AW: Kleiner Webserver (Arduino)

Und wieder nur die Hälfte der Fragen beantwortet :roll:
Ok, wenn du damit klar kommst, ist weiterhin nicht so ganz klar, wo genau dein Problem liegt. Der header string in Posting #14 sieht gut aus. Der in Posting #8 ist kaputt. Evtl. machen daher manche Browser damit Unsinn. Ansonsten gehört servoReady IN das html gerüst und nicht darunter. Du musst in headerString wirklich nur die HTTP Header stehen haben und die restliche Ausgabe, dann zusammenbauen, wenn du auch die Inhalte dafür hast. Aber wieso überhaupt HTML zurücksenden? Setz die HTTP header so, dass du sauberes json zurückgibst und arbeite dann mit den json daten. Das wäre das sauberste meiner Meinung nach und bedarf ja nur die Anpassung der header / des headerStrings.
Also wo genau hängst du diesbzgl? Und welcher code ist nun der Aktuelle?

Lg Kasalop
__________________
Es gibt 10 Arten von Menschen auf der Welt. Die die die binäre Mathematik verstehen und die die sie nicht verstehen!

Zu welcher der Gruppen gehörst du?
Mit Zitat antworten


Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu
Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Arduino -> USB -> PHPSeite Dr_Honk Skriptsuche 1 03.03.2016 07:36
Seriellen port ARDUINO auslesen speichern windows igelstein PHP 8 07.02.2014 17:32
Webserver A Zugriff über Proxy auf Webserver B tomx992 PHP 5 22.02.2010 12:01
kleiner job? 1laco1 Sonstiges 1 29.01.2009 16:24
Umzug von Webserver auf lokalen Webserver bsf PHP 1 13.07.2006 14:43


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:24 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by NuWiki v1.3 RC1 Copyright ©2006-2007, NuHit, LLC