Nano -> Wemos data pošle vždy 2x

Odpovědět
cevepe
Příspěvky: 42
Registrován: 10 zář 2018, 21:29
Reputation: 0

Nano -> Wemos data pošle vždy 2x

Příspěvek od cevepe » 16 kvě 2019, 22:53

Ahojte,
snažím se poslat naměřená data z Arduina NANO do Wemos D1 mini Pro, který data dále přes wifi pošle do internetu. Arduino NANO simuluji přes sériový monitor, kam pošlu číslo. Wemos číslo příjme, uloží ho na internet, avšak znovu provedete jakoby další příjmutí prázdných dat a odesílá znovu - naprázdno. Celkově tedy posílá 2x ... mou vloženou hodnotu a pak prázdné.
Nevíte proč to posílá 2x?

Dále mám dotaz na použití CHAR ... potřebuji přes seriák (RX - TX) posílat krom čísel i znaky, písmena. Co místo CHAR použít, aby to bralo třeba: 23|34.5|24%

Hrozně moc děkuji za výpomoc.

Kód: Vybrat vše

void loop()
{
  if (Serial.available() != 0)
  {
    char inChar = Serial.read();
    wifiData = WiFi.RSSI();

    Serial.print("Prijata data z NANO:");
    Serial.println(inChar);    

    WiFiClient client;
    client.setTimeout(1000);
    if (!client.connect("example.cz", 80)) {
      Serial.println(F("Na example.cz se nepodařilo připojit."));
      digitalWrite(LED_WIFI_CONN, HIGH);
      return;
    }
  
    client.println("GET /data.php?data="+wifiData+"|"+inChar+" HTTP/1.1");
    client.println("Host: www.example.cz");
    client.println("Connection: close");
    if (client.println() == 0) {
      Serial.println(F("Failed to send request with connect example.cz"));
      digitalWrite(LED_WIFI_CONN, HIGH);
      return;
    } else {
      digitalWrite(LED_SEND_CONN, HIGH);
      delay(1000);
      digitalWrite(LED_SEND_CONN, LOW);
    }
        
    
    Serial.println("Data odeslána na: example.cz/data.php?data=?????");    
  }
}

KarelBrno
Příspěvky: 40
Registrován: 05 kvě 2019, 15:12
Reputation: 0

Re: Nano -> Wemos data pošle vždy 2x

Příspěvek od KarelBrno » 17 kvě 2019, 09:36

Co to znamená, že přijme "prázdná" data? Není to třeba znak CR (nebo LF) z toho, že v sériovém monitoru napíšeš svůj znak a pak dáš Enter (tj. pošle se i znak toho enteru)?

Jinak pokud chceš posílat přes serial i řetězce, máš dvě možnosti - buď číst znaky a ukládat si je někam do doby, kdy Serial.available() vrací že tam něco je (pozor, mezi přečtení znaku a znovuzavolání available() musí být nějaká prodleva), nebo je číst do doby, kdy se tam objeví znak představující stop-ku (třeba char(0)).

cevepe
Příspěvky: 42
Registrován: 10 zář 2018, 21:29
Reputation: 0

Re: Nano -> Wemos data pošle vždy 2x

Příspěvek od cevepe » 17 kvě 2019, 09:43

Přes sériový monitor pošlu: 123 ... dám enter a ono to udělá tohle ... rozkouskuje to na 1 ... 2 ... 3 ... enter. Není možné to tam prostě poslat jako jednotný výstup, jak ho zadávám tj. Prijata data z NANO:123 .... a konec?

Prijata data z NANO:1
Prijata data z NANO:2
Prijata data z NANO:3
Prijata data z NANO:

KarelBrno
Příspěvky: 40
Registrován: 05 kvě 2019, 15:12
Reputation: 0

Re: Nano -> Wemos data pošle vždy 2x

Příspěvek od KarelBrno » 17 kvě 2019, 09:57

Ale ten tvůj program dělá přesně to, že přijme vždy jen jeden znak a ten hned odešle přes wifi.
Musel bys místo toho si ty přijaté znaky ukládat a až když přijde např. char(13) (to bude asi ten "prázdný" znak na konci), tak uložené znaky odeslat.

cevepe
Příspěvky: 42
Registrován: 10 zář 2018, 21:29
Reputation: 0

Re: Nano -> Wemos data pošle vždy 2x

Příspěvek od cevepe » 17 kvě 2019, 10:06

Mockrát děkuji. Netušil jsem, že to takhle přesně funguje.
Na internetu jsem našel script, kterým odeslaná data se sjednotí.

Kód: Vybrat vše

   String  readString="";
   while (Serial.available()) 
   {
     delay(2); 
     char c = Serial.read();  
     readString += c;
   }

KarelBrno
Příspěvky: 40
Registrován: 05 kvě 2019, 15:12
Reputation: 0

Re: Nano -> Wemos data pošle vždy 2x

Příspěvek od KarelBrno » 17 kvě 2019, 10:23

Jojo takhle by to šlo. Teda za předpokladu, že ten serial monitor odesílá vše najednou a neposílá znaky okamžitě kdy je napíšeš na klávesnici... z Arduina taky budeš potřebovat posílat ten řetězec najednou, jinak by ten čekací delay(2) nemusel stačit.

Jen pro jistotu by bylo dobré to ještě "očistit" o řídící znaky, tj. něco jako

Kód: Vybrat vše

if (c >= 32)
  readString += c; 

cevepe
Příspěvky: 42
Registrován: 10 zář 2018, 21:29
Reputation: 0

Re: Nano -> Wemos data pošle vždy 2x

Příspěvek od cevepe » 29 kvě 2019, 17:22

Pokud bych chtěl přes seriovou linku posílat pouze data TAM, ale zpět už nikoliv .... stačí nechat zapojeno jeno RX to TX .... ale opačně kablík TX to RX nezapojovat?

Uživatelský avatar
kiRRow
Příspěvky: 1152
Registrován: 07 kvě 2019, 07:03
Reputation: 0
Bydliště: Opava

Re: Nano -> Wemos data pošle vždy 2x

Příspěvek od kiRRow » 29 kvě 2019, 18:49

RX je přijímací pin
TX je vysílací pin

Uživatelský avatar
gilhad
Příspěvky: 779
Registrován: 07 bře 2018, 11:22
Reputation: 0

Re: Nano -> Wemos data pošle vždy 2x

Příspěvek od gilhad » 29 kvě 2019, 19:58

Ale v podstatě ano - pokud nechceš potvrzení, tak ti jeden kabel stačí

Odpovědět

Kdo je online

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