- fchao-Sinus-Wechselrichter AliExpress         
Ergebnis 1 bis 10 von 97

Thema: esp8266, Arduino IDE: neuer Versuch: warum wird website sofort beendet?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    HaWe
    Gast
    ja, String(...) funktioniert auch als Funktion, (String) ist ein explizites typecasting.
    Und ja, ich freue mich auch sehr, dass jetzt de 2.5.2 funktioniert!
    Nochmals vielen Dank für die erfolgreiche Mitarbeit und Hilfe!
    Geändert von HaWe (25.10.2019 um 19:16 Uhr)

  2. #2
    HaWe
    Gast
    PS,
    ein Randproblem: wie lösen eigentlich Arduinorianer das Extrahieren des eingegeben Strings?
    das ist zwar etwas, das ich gelöst habe mit eigenen Funktionen, aber ich kann mir ehrlich gessagt nicht vorstellen, dass es da bei Arduino noch keine fertige Funktion gibt...?

    Code:
    //----------------------------------------------------------------------------
    // String functions
    //----------------------------------------------------------------------------
    
    int16_t  strstrpos(char * haystack,  char * needle)   // find 1st occurance of substr in str
    {
       char *p = strstr(haystack, needle);
       if (p) return p - haystack;
       return -1;   // Not found = -1.
    }
    
    //-------------------------------------------------------
    const int  MAXLEN = 1024;
    const int  TOKLEN = 64;
    
    //-------------------------------------------------------
    char * cstringarg( char* haystack, char* vname, char* sarg ) {
       int i=0, pos=-1;
       unsigned char  ch=0xff;
       const char*  kini = "&";       // start of varname: '&'
       const char*  kin2 = "?";       // start of varname: '?'
       const char*  kequ = "=";       // end of varname, start of argument: '='
       char  needle[TOKLEN] = "";     // complete pattern:  &varname=abc1234
    
       strcpy(sarg,"");
       strcpy(needle, kini);
       strcat(needle, vname);
       strcat(needle, kequ);
       pos = strstrpos(haystack, needle); 
       if(pos==-1) {
          needle[0]=kin2[0];
          pos = strstrpos(haystack, needle);
          if(pos==-1) return sarg;
       }
       pos=pos+strlen(vname)+2; // start of value = kini+vname+kequ   
       while( (ch!='&')&&(ch!='\0') ) {
          ch=haystack[pos+i];    
          if( (ch=='&')||(ch==';')||(ch==' \n')||(ch=='\r') ||(ch=='\0')
            ||(i+pos>=strlen(haystack))||(i>TOKLEN-1) ) {
               sarg[i]='\0';
               return sarg;
          }       
          if( (ch!='&') ) {
              sarg[i]=ch;          
              i++;       
          }      
       } 
       return sarg;
    }
    
    
    // *SNIP*
    
       cstringarg(strinput, "uname", struname); // uname
       cstringarg(strinput, "upwd", strupwd); // upwd
       if ( (strlen(strupwd)==strlen(website_upwd)) && (strcmp(website_upwd, strupwd)==0)
              && (strlen(struname)==strlen(website_uname)) && (strcmp(website_uname, struname)==0) 
             )         
       {
       //...
       }
    Geändert von HaWe (25.10.2019 um 19:17 Uhr)

  3. #3
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Mit String-Funktionen.

    Normalerweise geht das sinngemäß:

    1. Liefere erstes Vorkommen eines Zeichens in Zeichenkette
    2. extrahiere aus erster Zeichenkette eine Neue, von Position bis Position
    3. Suche in neuer Zeichenkette nach Zeichen, dass das Ende markiert
    4. extrahiere vom Anfang der Zeichenkette bis zu der Position des Endezeichens
    5. gewünschter Inhalt ist extrahiert

    Zwei Methoden für Strings habe ich für Arduino schon gefunden:

    - indexOf()
    - lastIndexOf()

    interessant auch:
    - substring()

    indexOf() findet die Position eines gesuchten Zeichens
    substring() extrahiert eine Zeichenkette anhand einer Start- und Endposition


    Arduino.cc, TUTORIALS > Built-In Examples > 08.Strings
    Geändert von Moppi (23.10.2019 um 21:07 Uhr)

  4. #4
    HaWe
    Gast
    ja, so schrittweise habe ich es ja prinzipiell auch gemacht in meinen Funktionen, ich meinte aber fertige Arduino-Funktionen, die prinzipiell alles komplett erledigen ( allerdings bei mir mit ISO C ctrings, nicht C++ Strings)

  5. #5
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    Musst Du eine Funktion schreiben, dies das dann erledigt, wie Du das brauchst. Oder vielleicht gibt es eine fertige Bibliothek schon?
    Braucht man aber auch nicht wirklich. Wenn man die Zeichenkette kennt, die kommt, also weiß, wo Start- und Endzeichen sind, kann man so einen Ausdruck in einer Codezeile formulieren.

    MfG

  6. #6
    Erfahrener Benutzer Robotik Einstein
    Registriert seit
    18.03.2018
    Beiträge
    2.650
    zum Beispiel:

    Wenn der String so vom Browser, per GET, übermittelt wird:

    Code:
    ?uname=...&upwd=...



    Dann kann die ganze Zeile eingelesen werden mit:

    Code:
    String rS = client.readStringUntil('\r');
    Und das Extrahieren der Informationen in der richtigen Reihenfolge, wenn nur zwei Felder existieren, könnte dann so funktionieren:


    Code:
    String website_uname = rS.substring(rS.indexOf('=')+1,rS.indexOf('&'));
    String website_upwd = rS.substring(rS.lastIndexOf('=')+1);
    Sollen die Feldbezeichnungen überprüft werden, stehen die Feldbezeichnungen und deren inhalte (upwd=...) in anderer Reihenfolge, soll die Funktion Inhalte, beliebig übermittelter Formularfelder, extrahieren? - Dann wird das Vorgehen natürlich komplizierter.


    MfG


    PS: der Code ist nur beispielhaft, habe nicht verifiziert, ob er so fehlerfrei compiliert wird. Soll nur der Anschauung dienen, wie es gemeint ist.
    Geändert von Moppi (24.10.2019 um 06:24 Uhr)

  7. #7
    HaWe
    Gast
    nein, es ging doch nicht darum, so eine Funktion aus Einzel-Schritten neu zu schreiben, genau das habe ich doch bereits getan (cstringarg() ).
    Es ging darum, ob Arduino so etwas wie mein cstringarg() bereits fertig für diese und ähnliche Zwecke zur Verfügung stellt, das würde es für komplette Anfänger einfacher machen und es müsste nicht jeder das Rad neu erfinden.

Ähnliche Themen

  1. arduino ide mit esp8266
    Von NotEvil im Forum NodeMCU-Board und ESP8266, ESP32-Serie
    Antworten: 4
    Letzter Beitrag: 12.01.2017, 14:17
  2. Raspberry Pi 3: Neuer Bastelrechner ist ab sofort verfügbar
    Von Roboternetz-News im Forum Neuigkeiten / Technik-News / Nachrichten / Aktuelles
    Antworten: 4
    Letzter Beitrag: 29.02.2016, 20:56
  3. [ERLEDIGT] Google wird am Lenovo-Tablet ohne Zutun beendet
    Von oberallgeier im Forum Offtopic und Community Tratsch
    Antworten: 5
    Letzter Beitrag: 24.11.2015, 08:02
  4. Funktion wird nicht richtig beendet
    Von kowolfgang im Forum C - Programmierung (GCC u.a.)
    Antworten: 16
    Letzter Beitrag: 31.12.2008, 16:37
  5. schieberegister neuer versuch...
    Von Bluesmash im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 12
    Letzter Beitrag: 11.07.2005, 21:10

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen