String will nicht so wie ich

Hi,

also mein Vorhaben Einlesen einer RFID Karte dann abfrage einer webseite

z.b. http://192.168.12.100/abfrage.php?rfid=12345678

Die Webseite will ich einfach auslesen das geht auch aber nur mit einer fester URL.

auszug: geht String location = "/abfrage.php"; client.println(location);

Jedoch bekomme ich es einfach nicht hin den String neu zu setzen

geht nicht: String location = '/abfrage.php'; client.println(location);

eigentlich muss die RFID noch mit übergeben werden deshalb will ich auch den String verändern :-( Ich hoffe es kann mir jemand helfen

char location = '/abfrage.html'; client.println(location); client.println();

geht auch nicht und ich weiß nicht wieso. Es sieht so aus als ist die Variable leer

Stringfunktionen sind ziemlich lästig auf dem Arduino, du kannst Deinen Request aber stattdessen auch häppchenweise senden:

    char rfid[] = "123456";

    client.print("GET /abfrage.php?rfid=");   // ohne Zeilenumbruch, also print statt println
    client.print( rfid );
    client.println("HTTP/1.0");  // hier ist die 1. Zeile des Request Headers zuende, also println
    client.println();

Nicht vergessen, wenn der Webserver als "virtual named host" konfiguriet ist, noch den Hostnamen mitzusenden:

char rfid[] = "123456";
char host[] = "www.myrfidservice.com";

    client.print("GET /abfrage.php?rfid=");   // ohne Zeilenumbruch, also print statt println
    client.print( rfid );
    client.println("HTTP/1.0");  // hier ist die 1. Zeile des Request Headers zuende, also println
    client.println(host);
    client.println();

Vor dem HTTP fehlt ein Leerzeichen. :roll_eyes:

stimmt. war mir gar nicht aufgefallen.

Ich könnte mich irren, aber soweit ich weiß ist die Übermittlung eines Hosts erst ab HTTP/1.1 mit drin...?

Da wäre der Code dann ungefähr:

    char rfid[] = "123456";
    char host[] = "www.myrfidservice.com";

    client.print("GET /abfrage.php?rfid=");   // ohne Zeilenumbruch, also print statt println
    client.print( rfid );
    client.println(" HTTP/1.1");  // hier ist die 1. Zeile des Request Headers zuende, also println
    client.print("Host: ");
    client.println(host);
    client.println(); // Wichtig ist die leere Zeile, die das Ende des Requests mitteilt

Habs aber nicht getestet, daher ohne Gewähr. ;)

Ich bin begeistert Dankeschön das geht nun sogar :-)

Nun noch eine andere kurze Frage

Ich erhalte bei folgender Ausgabe der RFID ID seriell stück für Stück einwahnfrei

    for (i=0; i<5; i++) 
    {
      Serial.print(rfidTagCurrent[i], BIN);
    }
    // ETX

jedoch brauche ich die Werte in einer Variable zur übergabe in die funktion jedoch irgendwie macht er das nicht

    for (i=0; i<5; i++) 
    {
      Serial.print(rfidTagCurrent[i], BIN);
    }
    // ETX

    byte Test;
    Test += rfidTagCurrent[0];
    Test += rfidTagCurrent[1];
    Test += rfidTagCurrent[2];
    Test += rfidTagCurrent[3];    
    Test += rfidTagCurrent[4];    
    Serial.print(Test, BIN);

eigentlich sollte ich noch nun eine saubere ausgabe erhalten? Jedoch leider sieht das nur ein wie ein Teil

Probier

    unsigned long test = (rfidTagCurrent[0]-'0')*10000 + (rfidTagCurrent[1]-'0')*1000 + (rfidTagCurrent[2]-'0')*100 + (rfidTagCurrent[3]-'0')*10 + rfidTagCurrent[4]-'0';
    Serial.print(test, BIN);

Also so gnaz verstehe ich den Code wenn ich ehrlich bin eigentlich nicht :-( Mal anders gefragt wie siehts den aus wenn ich das als HEX stat bin haben will. vielleicht verstehe ich es dann

Und so ganz funktionieren tut der code leider auch nicht.

Ah, sorry, nicht BIN sondern DEC... :blush:

Hm irgendwie kommt da trotzdem was anderes raus als es sollte :-(

ahhh nun gehts das Program war es gibt ja auch Werte mit 255 deshalb hat das mit dem *100 net ganz geklappt. :-) Dankegeschön :-)