Ethernet a posielanie dat

Odpovědět
Uživatelský avatar
dzooky
Příspěvky: 124
Registrován: 03 úno 2018, 01:09
Reputation: 0
Bydliště: Fintice
Kontaktovat uživatele:

Ethernet a posielanie dat

Příspěvek od dzooky » 02 srp 2019, 22:22

Ahojte

Mam jedno arduino ktore meria napatia zdroja a zalozneho zdroja, a posiela to do DB
Inspiroval som sa https://www.tweaking4all.com/hardware/a ... data-push/

Stacilo by mi ak data posle raz za minutu ale nefunguje to
Ked skratim interval napr na 10s na posielanie funguje to
Akosi nejde mi to dohlavy preco.

Kód: Vybrat vše

#include <UIPEthernet.h>                                        //ENC28J60

#define Z12             A0
#define B12             A1
#define Z5              A2
#define B5              A3

//hodnoty napati
float b12;
float z12;
float b5;
float z5;
float analog_value;

//hodnoty pouzitych rezistorov
float R1 = 20000.0;
float R2 = 10000.0;
float R3 = 1000.0;
float R4 = 4700.0;

unsigned long last_record;
boolean napajanie;

 
//ENC28j60
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0x01 };
EthernetClient client;
char server[] = "192.168.0.10";

void setup()
  {
    Serial.begin(9600);
    msgs(1,"**********************************");
    msgs(1,"Akcia: Nastavujem vstupne porty");
    pinMode(B12, INPUT);
    pinMode(B5, INPUT);
    pinMode(Z12, INPUT);
    pinMode(Z5, INPUT);

    msgs(1,"Akcia: Inicializujem ethernetovy modul");
    // start Ethernet and UDP
      Ethernet.begin(mac);
      if (Ethernet.begin(mac) == 0)
        {
          msgs(1,"Modul sa nepodarilo nakonfigurovat, nedostal IP");
          for(;;);
        }
    
    msgs(0,"Pridelena IP Addresa: ");
    Serial.println(Ethernet.localIP());
    msgs(1,"**********************************");
    last_record = millis();
  }

void loop()
  {
    nacitanie_napati();
   
    if (millis()-last_record > 10000)
      {
        posli_data();
        last_record = millis();
      }
    
  }
  
void nacitanie_napati()
  {
    //zistenie napatia zdroja
    analog_value = analogRead(Z12);
    z12 = (analog_value*5.0/1024.0)/(R2/(R1+R2));
  
    analog_value = analogRead(Z5);
    z5 = (analog_value*5.0/1024.0)/(R4/(R3+R4));  
    
    //zistenie napatia baterie
    analog_value = analogRead(B12);
    b12 = (analog_value*5.0/1024.0)/(R2/(R1+R2));
  
    analog_value = analogRead(B5);
    b5 = (analog_value*5.0/1024.0)/(R4/(R3+R4));    
  }

void vypis()
  {
    msgs(0,"Napatie zdroja: ");
    msgs(0,String(z12));
    msgs(0,"V/");
    msgs(0,String(z5));
    msgs(1,"V");
    
    msgs(0,"Napatie baterie: ");
    msgs(0,String(b12));
    msgs(0,"V/");
    msgs(0,String(b5));
    msgs(1,"V");
  }

void posli_data()
  {
    if (client.connect(server, 80))
      {
        // Make a HTTP request:
        client.print( "GET /monitoring/monitoring_power.php?");
        client.print("z12=");
        client.print(z12);
        client.print("&&");
        client.print("z5=");
        client.print(z5);
        client.print("&&");
        client.print("b12=");
        client.print(b12);
        client.print("&&");
        client.print("b5=");
        client.print(b5);
        client.println( " HTTP/1.1");
        client.print( "Host: " );
        client.println(server);
        client.println( "Connection: close" );
        client.println();
        client.println();
        client.stop();
      }
    else msgs(1,"SPOJENIE NEUSPESNE");
    
    last_record = millis();
    vypis();
  }

void msgs(boolean type, String msg)
  {
    if(type == 0) Serial.print(msg);
    if(type == 1) Serial.println(msg);
  }

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Ethernet a posielanie dat

Příspěvek od pavel1tu » 03 srp 2019, 08:49

Docela se vyžíváš v podprogramech - pěkné ...

Nepíšeš co to vypíše když to nefunguje - asi nic ?
Pokud to nepíše "SPOJENIE NEUSPESNE", v první řadě bych dal před client.stop(); nějaký delay - začni na 1s a snižuj - to mi blbne nejčastěji, mívám tam od 100 do 250 ms (záleží na kvalitě spojení a rychlosti ukládání do databáze)

Jinak nevidím důvod proč by to nechodilo s delším časem - pokud jsi se nespletl o nulu a je to 10min.

PS: milis() je super, ale koukni na knihovnu <TaskScheduler.h> - pokud někde dělám něco za nějakou dobu (a nemusí se to spouštět od přerušení - to mu moc nechodilo, ale možná to opravil), je to super a má to mnohem více možností než popisuji :-)

PS2: ten last_record = millis(); tam máš 2x , ale asi to nevadí- vyzkoušej ho nechat jen tam, kde se opravdu odešlou data a ne že se jen pokusí je odeslat ....
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
dzooky
Příspěvky: 124
Registrován: 03 úno 2018, 01:09
Reputation: 0
Bydliště: Fintice
Kontaktovat uživatele:

Re: Ethernet a posielanie dat

Příspěvek od dzooky » 03 srp 2019, 22:26

Ahoj

No skusal som casovu slucku 60000 zmenit na 6000.
Pri 6000 to bavi pri 60000 nie.

Pri 60000 nic nevypisuje, ako keby to ani nevolalo alebo tak nejako.
Povodny zdrojak ma po podmienke IF ked ide posielat vypise connected tak mi to aj vypise ale nic nezrobi..
Ked zmenim v zdrojaku php skript co ma volat cekujem log na serveri tam tiez nic nevypisuje.
Ako keby to ani nevolalo

martinius96
Příspěvky: 579
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Ethernet a posielanie dat

Příspěvek od martinius96 » 03 srp 2019, 22:54

Síce som s tou knižnicou ani tými modulmi nerobil (Som Wiznetista :D W5100, W5500), ale myslím si, že ten softvérový stack ti "spadne". Ak je to dlhšie ako pár sekúnd v nečinnosti.
Tým, že máš tie slučky krátke, tak sa to drží akoby keep-alive. Ale problém nastane po čase nečinnosti. Schválne si skús pred tým pripojením vypísať IP adresu cez Ethernet.localIP(). Prípadne to použi s podmienkou if (Ethernet.begin(mac) == 0) a skús nastaviť vlastnú MAC + IP vždy, keď je táto podmienka splnená a verím, že ti to bude fachať. ;)

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Ethernet a posielanie dat

Příspěvek od pavel1tu » 04 srp 2019, 10:02

Tu desku nemám,
ani nepíšeš jaké máš Arduino,

vyzkoušel jsi tam dát to DELAY jak jsem psal ?

Mne to funguje, ale musel jsem to upravit na jiný shield, knihovnu, atd. + mám těch delay(200) před odpojením komunikace

V pohodě odesílám Ubatt,Usolar,Presure,Humidity, Temperature na místní SQL běžící na BananaPi
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
dzooky
Příspěvky: 124
Registrován: 03 úno 2018, 01:09
Reputation: 0
Bydliště: Fintice
Kontaktovat uživatele:

Re: Ethernet a posielanie dat

Příspěvek od dzooky » 04 srp 2019, 21:36

martinius96 v pohode vzdy to ma IP adresu
pavel1tu mam UNO, dal som tam ten delay, 250 bavi super dik

Uživatelský avatar
pavel1tu
Příspěvky: 2054
Registrován: 26 říj 2017, 08:28
Reputation: 0
Bydliště: Trutnov
Kontaktovat uživatele:

Re: Ethernet a posielanie dat

Příspěvek od pavel1tu » 05 srp 2019, 15:12

Tvé kody jsou velmi "nestandartní", typu něco jsem někde zkopíroval a ejhle ono to chodí/nechodí....

Viz:

Kód: Vybrat vše

//ENC28j60
byte mac[] = { 0xAA, 0xBB, 0xCC, 0xDD, 0xEE, 0x01 };
EthernetClient client;
char server[] = "192.168.0.10";  //nemá nic společného s nastavením síťové karty - je to adresa serveru kam asi ukládáš data
kartu nastavuješ jako klienta a definuješ nějakou IP adresu serveru ?

dále

Kód: Vybrat vše

    // start Ethernet and UDP
      Ethernet.begin(mac);
žádné UDP, jen žádáš DHCP server o IP

za mne slátanina a jednou až budeš něco hledat co která část dělá - se ti to vrátí
UNO, NANO, Mikro, PRO mini, DUE, ESP32S2, RPi PICO
Pavel1TU
"Správně napsaný kod lze číst jako knihu"

Uživatelský avatar
dzooky
Příspěvky: 124
Registrován: 03 úno 2018, 01:09
Reputation: 0
Bydliště: Fintice
Kontaktovat uživatele:

Re: Ethernet a posielanie dat

Příspěvek od dzooky » 07 srp 2019, 19:34

No hlavne ze tomu rozumiem ja nie :D
pavel1tu píše:
05 srp 2019, 15:12
kartu nastavuješ jako klienta a definuješ nějakou IP adresu serveru ?
Co je na tom nezrozumitelne?
Pre mna jasne ako facka.
Arduino je klient a data kde sa data posielaju je server.
Teda adresara 192.168.0.10 je ip adresa mojho servera (raspberry) kam tlaci data.
A arduino/klient dostane IP od DHCP teda vsetci dostanu.

pavel1tu píše:
05 srp 2019, 15:12
dále

Kód: Vybrat vše

    // start Ethernet and UDP
      Ethernet.begin(mac);
žádné UDP, jen žádáš DHCP server o IP

za mne slátanina a jednou až budeš něco hledat co která část dělá - se ti to vrátí
Tak je to na tej stranke odkial som cerpal a ktoru si mi posunul mimichodom ty len ja to mam prerobene na DHCP nie staticky.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 8 hostů