ESP8266 loopt vast

Software vragen voor ESP chip familie
Berichten: 132
Geregistreerd: 21 Feb 2013, 16:04

Re: ESP8266 loopt vast

Berichtdoor René » 11 Feb 2017, 21:39

ik ga vanavond/vannacht de code weer draaien om te kijken of het morgenvroeg de draad weer oppakt als er pulsen komen. Maar ik wil ook wel beter begrijpen wat ik nu eigenlijk draai:)

Advertisement

Berichten: 132
Geregistreerd: 21 Feb 2013, 16:04

Re: ESP8266 loopt vast

Berichtdoor René » 11 Feb 2017, 23:05

inmiddels ben ik behoorlijk in verwarring.
als ik #define SIMULATIE uitzet(comment) dan werken mijn "echte pulsen" niet meer.
Morgen maar eens met een fris hoofd de code eens echt bestuderen....

Berichten: 132
Geregistreerd: 21 Feb 2013, 16:04

Re: ESP8266 loopt vast

Berichtdoor René » 12 Feb 2017, 10:54

Mogge!
Nog eens netjes de test en de "werkelijke loop" gedraaid. Allebei met een tellertje.
De test loop door , soms duurt het een paar seconden voor hij verder loopt maar dan gaat hij weer verder.

De werkelijke loop met //#define SIMULATIE loopt vast. meestal na 239 loops. Soms eerder, ook als ik de send time korter maak of als ik de Serial.println(url); uitzet.
Wat voor testje zou ik kunnen doen om mijn eigen omgeving afhankelijkheid uit te schakelen. Ik bedoel WIFI en PC poort?

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: ESP8266 loopt vast

Berichtdoor nicoverduin » 12 Feb 2017, 11:05

Ik ben zo eens gaan googelen en kwam meerdere artikelen tegen waar het op lijkt dat als je in een WiFi sessie bent interrupts niet goed werken. Je zou de interrupts kunnen disabelen door net voor de Client.connect() de interrupt te disconnecten:
cpp code
detachInterrupt(2);


En na de Client.close() weer te attachen

cpp code
attachInterrupt(2, onPulse, FALLING);
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 132
Geregistreerd: 21 Feb 2013, 16:04

Re: ESP8266 loopt vast

Berichtdoor René » 12 Feb 2017, 11:14

Ik neem aan in de getTime() functie
Ik heb dit gedaan



Code: Alles selecteren
char * getTime()                                // functie om tijd op te halen van website
{
    char        *startPositie;                  // start positie van datum veld in regel
    uint8_t     charArrayIndex = 0;             // index binnen array
    char        charArray[200];                 // ff ruim genomen buffer voor ontvangen regels
    charArray[0] = '\0';                        // de regel leegmaken
    static WiFiClient client;
    //
    // maak connectie met een server om de tijd te ontvangen
    //

    detachInterrupt(2);
    while (!client.connect("www.google.com", 80)) {
        Serial.println("connection failed, retrying...");
    }
    client.print("HEAD / HTTP/1.1\r\n\r\n");    // dit zorgt ervoor dat de server de tijd teruggeeft
    while (!client.available()) {
        yield();                                // om de stress op de server te verlichten
    }
    //
    // Als er data is te verwerken
    //
    while (client.available()) {
        charArray[charArrayIndex] = client.read();      // lees teken in de tabel
 
        if (charArray[charArrayIndex] == '\r') {        // blijven lezen tot er een return komt
            charArray[charArrayIndex] = '\0';           // en sluit te tekst af met een '\0'. De return halen we gelijk weg
            //
            // kijk of dit de datumregel is
            //
            startPositie = strstr(charArray, "\nDate: ");
            //
            // is dit is onze regel?
            //
            if (startPositie != NULL) {
                //
                // yep dus skip 7 posities en we hebben het startpunt
                //
                startPositie = startPositie + 7; //was 7
                client.stop();
                attachInterrupt(2, onPulse, FALLING);
                return startPositie;
            } else {
                // Serial.println(" niet de gewenste regel dus zet hem maar weer op 0 in else");
                //
                charArray[0] = '\0';
                charArrayIndex = 0;
            }
        } else {
            charArrayIndex++;
        }
    }
    Serial.println("De tijd server stuurt niets terug");
    client.stop();
    attachInterrupt(2, onPulse, FALLING);
    startPositie = charArray;
    return startPositie;                                        // lege tabel dus geen datum
}


Zonder resultaat. loopt nog steeds vast ik de "echte" loop na 238 loops

Berichten: 132
Geregistreerd: 21 Feb 2013, 16:04

Re: ESP8266 loopt vast

Berichtdoor René » 12 Feb 2017, 11:15

ik laat hem nu eens lopen met een sentTime van 10 seconden

Berichten: 132
Geregistreerd: 21 Feb 2013, 16:04

Re: ESP8266 loopt vast

Berichtdoor René » 12 Feb 2017, 11:18

nu eerst wat anders, aan het eind van de middag verder

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: ESP8266 loopt vast

Berichtdoor nicoverduin » 12 Feb 2017, 12:35

Helaas de interruot lijkt het ook niet te zijn. Heb bij mij stopt hij bij 247x consequent. Heb ook al de TX buffer van de UART vergroot. Maakt geen zak uit.
Leuke uitdaging :mrgreen: :mrgreen:
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Gebruikers-avatar
Berichten: 5043
Geregistreerd: 13 Mei 2013, 20:57
Woonplaats: Heemskerk

Re: ESP8266 loopt vast

Berichtdoor nicoverduin » 12 Feb 2017, 13:06

Weer een stapje verder...... hij blijft 'hangen' op een antwoord van Google. Nu nog uitzoeken of daar een limiet in zit. anders eens een andere time server proberen. Ook een eigen URL gebruikt maar zelfde effect.
Docent HBO Technische Informatica, Embedded ontwikkelaar & elektronicus
http://www.verelec.nl

Berichten: 132
Geregistreerd: 21 Feb 2013, 16:04

Re: ESP8266 loopt vast

Berichtdoor René » 12 Feb 2017, 13:15

ik had het ook al eens met nu.nl geprobeerd met hetzelfde resultaat

VorigeVolgende

Terug naar ESP Software

Wie is er online?

Gebruikers in dit forum: Geen geregistreerde gebruikers en 6 gasten