Close

mape

Vytvořené odpovědi

Aktuálně jsou na stránce zobrazeny 3 příspěvky - 1. až 3. (celkem z 3)
  • Autor
    Příspěvky
  • 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.

    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.

    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.

Aktuálně jsou na stránce zobrazeny 3 příspěvky - 1. až 3. (celkem z 3)