Diaľkové ovládanie pomocou ESP Now.

Sekcia určená pre Arduino nadšencov

Moderátor: Moderátori

boro
Stály člen
Stály člen
Príspevky: 118
Dátum registrácie: 10 Nov 2010, 00:00
Vek: 80

Diaľkové ovládanie pomocou ESP Now.

Príspevok od používateľa boro » 11 Okt 2020, 16:59

Zdravím,prosím o pomoc pri riešení DO pomocou ESP32, protokol Now,aby nebola potrebná sieť WiFi.Potrebujem ovládať
stav jedného pinu(HIGH,LOW) na ESP32 pomocou tlačítka na druhom ESP32 a naopak.
Ďakujem boro
0

Sahasrar
Stály člen
Stály člen
Príspevky: 233
Dátum registrácie: 16 Máj 2015, 00:05
Bydlisko: TN

Re: Diaľkové ovládanie pomocou ESP Now.

Príspevok od používateľa Sahasrar » 11 Okt 2020, 23:13

Pre zrhnutie mas dva ESP32 a na kazdom jedno tlacidlo... Ak stlacim tlacidlo na ESP32_1 tak na ESP_2 sa rozsvieti led a ak stlacim tlacidlo na ESP32_2 tak sa rozsvieti led na ESP32_1? Rezim spojenia dvoch ESP32 ma byt na priamo teda peer-to-peer... Sú rovnocenné alebo jeden je Master a druhy Slave?
0

boro
Stály člen
Stály člen
Príspevky: 118
Dátum registrácie: 10 Nov 2010, 00:00
Vek: 80

Re: Diaľkové ovládanie pomocou ESP Now.

Príspevok od používateľa boro » 12 Okt 2020, 08:28

Dobrý deň,áno režim spojenia má byť napriamo peer-to-peer a sú rovnocenné.Prípadne by mohol byť aj Master-Slave.Skúšal som :Bezdrátová komunikace ESP-Now s ESP32 (Arduino návody).Funguje mi to podľa autora,ale neviem ako by som ten skeč mohol prispôsobiť mojim potrebám.
boro
0

Sahasrar
Stály člen
Stály člen
Príspevky: 233
Dátum registrácie: 16 Máj 2015, 00:05
Bydlisko: TN

Re: Diaľkové ovládanie pomocou ESP Now.

Príspevok od používateľa Sahasrar » 12 Okt 2020, 10:03

No to je nevýhoda arduina.... Aj na zložité veci sú návody len skopírujes a ides aj ked nevies co to vlastne robi :D ESP_Now som este nepoužil ja by som to riešil pomocou http klienta... Ale ako pozerám ten skeč tak zdá sa mi, že tam nieje ani práca s príjmaním dát...

-- Spojený príspevok 12 Okt 2020, 09:29 --

Trochu som to preštudoval a ak máte čas na to to vyskúšať... Ja som to neskúšal takže skúsim poradiť iba z rýchlika... skúsil by som urobiť zmenu v callbacku OnDataRecieve...

Kód: Vybrať všetko

void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
  char macStr[18];
  unsigned long realTime;
  snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
           mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
  Serial.print("ttLast Packet Recv from: "); Serial.println(macStr);
  Serial.print("ttLast Packet Recv Data: "); Serial.println((char *)data);
  Serial.println("");
  realTime = millis();
  Serial.print("Recv delay: "); Serial.print(realTime - lastRecvTime); Serial.println(" ms.");
  lastRecvTime = realTime;
}
Keďže tam máme výpis na sériovú linku Serial.print("ttLast Packet Recv Data: "); Serial.println((char *)data); tak potom (char *)data musia obsahovať prijaté dáta... Tu by som to rozdelil a dal by som klasickú podmienku if

Kód: Vybrať všetko

    if (data == "ON") {
     digitalWrite(x, HIGH);}
    else if (ledka == "OFF") {
        digitalWrite(x, HIGH);}
To je čo sa týka príjmatela... Na odosielatelovi by som to spravil obdobne vo funkcii SendData()

Kód: Vybrať všetko

  val = digitalRead(pinTlacitka);
  if (val == HIGH) {         
    data = "ON";
  } else {
    data = "OFF"; 
  }
esp_err_t result = esp_now_send(peer_addr, data, DATASIZE);
0

boro
Stály člen
Stály člen
Príspevky: 118
Dátum registrácie: 10 Nov 2010, 00:00
Vek: 80

Re: Diaľkové ovládanie pomocou ESP Now.

Príspevok od používateľa boro » 13 Okt 2020, 14:26

Ďakujem pekne za radu, a chcel by som sa ešte spýtať,či predposledný kód nemá byť takto:

if(data=="ON"){
digitalWrite(x,HIGH);}
else if (data=="OFF"){
digitalWrite(x,LOW);}

S pozdravom boro

-- Spojený príspevok 13 Okt 2020, 14:16 --

Ešte niečo.Vložil som to do skeču a pri kompilácii sa to zastavilo pri: data="ON"; a vypísalo:incompatibile types in.....
Tá konšrukcia musí byť iná.Aká?
Ďakujem boro
0

Sahasrar
Stály člen
Stály člen
Príspevky: 233
Dátum registrácie: 16 Máj 2015, 00:05
Bydlisko: TN

Re: Diaľkové ovládanie pomocou ESP Now.

Príspevok od používateľa Sahasrar » 13 Okt 2020, 15:41

Ano, tá podmieka IF môže byť aj takto... to už záleží čisto na programátorovi, ako nastaví celú logiku...

Skús sem dať to chybové hlásenie, skúsim ti stým poradiť alebo napíš súkromnú správu nech s tým nezaťažujeme fórum.... Ale podľa mňa to len bude zlý dátový typ...
Vyskúšal by som to aj ja len problém, že nemám momentálne 2ks ESPčiek na ktorých by som to mohol odtestovať... Ja som všetky takéto úlohy riešil čisto len cez HTTP pretože mi to príde, že je tam viac možností a hlavne je to kompatibilné a univerzálne aj s inými vecami a s celou sieťou okolo...

-- Spojený príspevok 13 Okt 2020, 14:47 --

Z návodu zistujem, že funkcia send data používa pre posielanie dát integer...
esp_now_send(const uint8_t *peer_addr, const uint8_t *data, size_t len)
takže prepíš si to takto a malo by to fungovať....

Kód: Vybrať všetko

  val = digitalRead(pinTlacitka);
  if (val == HIGH) {         
    data = 1;
  } else {
    data = 0;
  }
esp_err_t result = esp_now_send(peer_addr, data, DATASIZE);
Teraz dúfam, že som netrepol chujovinu a kolegovia z fóra ma neukameňujú za to :D :D :D
0

boro
Stály člen
Stály člen
Príspevky: 118
Dátum registrácie: 10 Nov 2010, 00:00
Vek: 80

Re: Diaľkové ovládanie pomocou ESP Now.

Príspevok od používateľa boro » 17 Okt 2020, 08:16

Zdravím,ďakujem za rady,už to funguje.
boro
0

Napísať odpoveď
  • Podobné témy
    Odpovedí
    Zobrazení
    Posledný príspevok