Close

Arduino ThinSpeak Měření teploty ze čtyř míst

Úvodní stránka Fórum Vaše projekty Arduino Arduino ThinSpeak Měření teploty ze čtyř míst

  • Toto téma obsahuje celkem 32 odpovědí. Do diskuze (6 diskutujících) se naposledy zapojil uživatel nielda a poslední změna proběhla před 7 roky a 8 měsíci.
Aktuálně je na stránce zobrazeno 15 příspěvků - 16. až 30. (celkem z 33)
  • Autor
    Příspěvky
  • #3885
    terje
    Účastník

    Díky,funguje. Ještě dotaz. Dá se na thingspeak získat nějaká historie dat nebo jen to co je tam aktuálně zobrazeno.

    #3886
    Ondra78
    Účastník

    Ano, /export/-Download all of this Channel’s feeds in CSV format.

    #4043
    terje
    Účastník

    Chlapi díky. Jestli se chcete podívat na můj kanál, tak uživatel „terje_ard“. Zatím jenom ze dvou čidel.

    #5409
    mape
    Účastník

    Ahoj borci; v první řadě bych vám chtěl poděkovat, že jsem díky vám zprovoznil logování teploty na ThingSpeak. Kompilátor mi neustále házel chyby a po promarněném víkendu, kdy už jsem chtěl moduly vyhodit z okna :)) jsem si všimnul, že Ondra78 používá verzi 1.6.3 a přitom web arduina mi vnutil 1.6.5, která ten kód vyhodnotí s chybami. Takže to bych chtěl napsat pro všechny ostatní, aby neztráceli naději 😀
    A teď k mojí otázce: mám takovýto testovací program

    
    #include <EtherCard.h>
    #define APIKEY  "ZMH0T5WDETDGCY67"
    #include <OneWire.h>
    #include <DallasTemperature.h>
    #define ONE_WIRE_BUS 3
    
    OneWire oneWire(ONE_WIRE_BUS);
    DallasTemperature sensors(&oneWire);
      
    byte mymac[] = { 0xDE,0xAD,0xBE,0xEF,0xFE,0xED };
    const char website[] PROGMEM = "api.thingspeak.com";
    byte Ethernet::buffer[700];
    
    uint32_t timer;
    Stash stash;
    
    void setup () {
      Serial.begin(9600);
      Serial.println("\n[webClient]");
      sensors.begin();
      if (ether.begin(sizeof Ethernet::buffer, mymac) == 0) 
        Serial.println( "Failed to access Ethernet controller");
      if (!ether.dhcpSetup())
        Serial.println("DHCP failed");
    
      ether.printIp("IP:  ", ether.myip);
      ether.printIp("GW:  ", ether.gwip);  
      ether.printIp("DNS: ", ether.dnsip);  
    
      if (!ether.dnsLookup(website))
        Serial.println("DNS failed");
        
      ether.printIp("SRV: ", ether.hisip);
    }
    
    void loop () {
      sensors.requestTemperatures();
      ether.packetLoop(ether.packetReceive());
      
      if (millis() > timer) 
      {
        Serial.println(millis());
        timer = millis() + 660000; 
        delay(200); 
        byte sd = stash.create();
        stash.print("&field1=");
        stash.print(String(sensors.getTempCByIndex(0), DEC));     // print the value (0 to 1024) as string
        stash.save();
    
        Stash::prepare(PSTR("POST /update HTTP/1.1" "\r\n" 
                            "Host: $F" "\r\n" 
                            "Connection: close" "\r\n" 
                            "X-THINGSPEAKAPIKEY: $F" "\r\n" 
                            "Content-Type: application/x-www-form-urlencoded" "\r\n" 
                            "Content-Length: $D" "\r\n" 
                            "\r\n" 
                            "$H"),
                website, PSTR(APIKEY), stash.size(), sd);
    
        ether.tcpSend();
      }
    }
    

    Funguje to, ale pouze 10 minut, pak se musí přípravek resetovat, proč? Přes sériovou linku vidim, že program žije a v intervalech nastavených v programu problikne i ethernetový modul a dioda na routeru. Vygooglil jsem, že TCP protokol má timeout 10 minut, ale moc tomu nerozumim, je to pravda? Jak tedy upravit program? A jak je možný, že vám to funguje bez problému? Neni případně problém na mojim routeru? Řeším to teď teda tak, že mám časové relé, které mi zapíná modul (nano + mini ethernet modul HR911105A) jednou za 30minut na 1minutu. Děkuji za každou radu.

    #5413
    Aleš
    Účastník

    Zkoušel jsi ten interval zkrátit třeba na 2 minuty? Jak se to bude chovat ?

    #5414
    mape
    Účastník

    Vypadne to po 10ti minutách, takže výsledků bude 5-6. Když udělám interval 30s, bude výsledků víc, ale zase pouze 10minut.

    #5415
    Aleš
    Účastník

    To je divné. V meteostanici http://xanadu.khnet.info/meteo.php mám ethernet shield nastavený na pevnou IP adresu, data se odesílají každou minutu, a běží to naprosto bez problému asi 2 roky. To samé přes WiFi s ESP8266 se data odesílají na ThinSpeak každých 5 minut, a také to jede v kuse třeba měsíc.
    Zkusil bych nastavit pevnou IP adresu. Když to nepomůže, tak zkusit vytvořit krátký prográmek, který bude odněkud stahovat (GET) nějaká data v intervalu např. 2 minut, a sledovat, jestli to také vypadne.

    #5416
    mape
    Účastník

    Já mám ten malej ethernetovej modul, nikoliv ethernet shield. Se statickou IP adresou to funguje normálně. Ale proč s DHCP ne? Píše se o tom i tady
    https://forum.arduino.cc/index.php?topic=302559.0
    ale týpek to „vyřešil“ tim, že si koupil rovnou nový modul.

    #5417
    Aleš
    Účastník

    Aha. Tak to je jasné. DHCP server má nastavený Lease time na 10minut. To je doba na kterou ti DHCP server přidělí IP adresu. Když se těch 10 minut nic neděje, tak ji odpojí, a může ji přidělit jinému zařízení. Na 10 minut se nastavuje jenom v místě, kde se připojuje hodně lidí na krátkou dobu – třeba free WiFi na nádraží apod. Běžně je nastavujena na 1440 minut, já ho mám doma nastavený na 0 – neomezeně. Takže buď přenastavit lease time, nebo to vyřešit tak, jak je to popsané v jednom z příspěvků z toho fóra:

    Then try this code. It connects to a server every 30 seconds. See how long it goes.
    https://playground.arduino.cc/Code/WebClient
    It has the dhcp begin call commented out, but the code is there to use it.

    Místo čekání x minut tam udělat smyčku, která každých 30s stáhne něco odněkud z webu. Potom by měla i vydržet ta pronajatá IP adresa.

    Nebo nechat nastavenou pevnou IP adresu.

    #5418
    Aleš
    Účastník

    Teď ale koukám, že ten příklad je pro w5100/w5200 🙁

    #5419
    Aleš
    Účastník
    #10627
    nielda
    Účastník

    Ahoj. Možná mám úplně hloupý dotaz, ale třeba mi pomůžeš. V oblasti Arduina jsem začátečník a programování se taky učím. Chtěl jsem si vyzkoušet tvůj program, ale nevím jak z Code uvedeném v článku to dostanu do srozumitelného stavu pro IDE. Moc dík.

    #10643
    Ondra78
    Účastník

    nielda > koho se ptáš? CTRLc a CTRLv nefunguje?

    #10644
    nielda
    Účastník

    To samozřejmě funguje. Ale pokud to takto přes schránku zkopíruji. Je vše v jednom bloku bez struktury a řádkovaní. Asi to dělám blbě.

    #10645
    Ondra78
    Účastník

    Teď jsem to zkoušel a v pohodě.
    OS: Linux Mint 17.3
    prohlížeč:FireFox 51.0.1
    IDE: 1.6.12

Aktuálně je na stránce zobrazeno 15 příspěvků - 16. až 30. (celkem z 33)
  • Pro reakci na toto téma se musíte přihlásit.