Obsah fóra
PravidláRegistrovaťPrihlásenie




Odpovedať na tému [ Príspevok: 1 ] 
AutorSpráva
Offline

Užívateľ
Užívateľ
Obrázok užívateľa

Registrovaný: 17.02.14
Prihlásený: 18.01.24
Príspevky: 450
Témy: 198
Bydlisko: Poprad-okolie
Príspevok NapísalOffline : 31.08.2019 0:13

Dnes by som rád poukázal na možnosť ovládať vývojovú dosku ESP32 zasielaním UDP správ pre jednoduché ovládanie ZAP/VYP. Je to jedna z najjednoduchších metód, ako odosielať dáta, spracovať ich a na základe prijatej informácie vykonať akciu. ESP32 je platformou, ktorá sa vo väčšine prípadov v súvislosti s WiFi konektivitou využíva ako webserver, alebo webclient, ktorý sa pripája na vzdialený server a POST, GET metódou, prípadne s integráciou MQTT protokolu odosiela dáta vzdialenému serveru / hostovi.

Knižnice pre ESP32 písané v C++, tzv. Arduino core (framework) umožňujú využiť aj asynchrónne UDP knižnice pre odosielanie a prijímanie dát. Zaujímavosťou je asynchrónnosť, keďže fungujú na "pozadí" a používateľ nemusí programovať zložité funkcie pre prijatie pripojenia, spracovanie informácie a pod. Aby sme dáta do vývojovej dosky ESP32 dokázali odoslať, potrebujeme jednoduchého UDP klienta. V mojom prípade som využil Windows verziu pomerne známeho klienta Packet Sender.

Je to univerzálny klient (nie)len pre UDP, podporuje aj TCP spojenia, vrátane SSL, je teda možné vykonať požiadavku aj na zabezpečenom porte s využitím certifikátu certifikačnej autority, klientského certifikátu, serverového certifikátu (ak Packet Sender prijíma dáta ako server). Packet Sender vyžaduje navoliť si tzv. mód pre pomalé zariadenia. ESP32 nestihlo spracovať datagram prichádzajúci z Packet Sendera, ak nebola možnosť s pridaním pauzy 500ms zvolená.
Ovládanie ESP32 prostredníctvom UDP datagramov
Packet Sender má jednoduché rozhranie, ktoré dovoľuje špecifikovať protokol prenosu, umožňuje vložiť cieľovú IP adresu zariadenia (ESP32), prenosový port a v poslednom rade aj odosielanú informáciu (text). UDP negarantuje doručenie správ. Neobsahuje CRC - kontrólny súčin odosielaných dát. Z toho dôvodu sa ESP32 snaží samostatnou UDP správou odpovedať na IP adresu a port odosielateľa, pre potvrdenie prijatia správy.

Avšak aj tu platí, že správa nemusí doputovať do Packet Sendera. V logu je možné vidieť odosielané dáta a zároveň prijaté dáta. Odozva na odoslanú informáciu je pomerne malá, cca 70ms. Počas tejto doby ESP32 stihne spracovať datagram, aplikovať daný stav na výstupný vývod (ovláda diódu, relé) a odoslať spätný datagram na IP adresu a port odosielateľa. V tomto prípade ESP32 z IP adresy 192.168.1.9 a portu 1234 na cieľovú IP adresu Packet Sendera 192.168.1.5 a port 51282.
Ovládanie ESP32 prostredníctvom UDP datagramov
ESP32 informuje používateľa aj prostredníctvom Sériovej linky (UART-u), pričom vypisuje prijaté pripojenie s bitovou dĺžkou informácie a aj informáciou samotnou, dokáže rozlíšiť aj preposielaciu metódu (Unicast, Multicast, Broadcast), zobrazuje aj IP adresu odosielateľa vrátane portu (neskôr použité pre návratový datagram). V prípade rozpoznania akcie ZAP / VYP vypíše ESP32 na UART aj informáciu o aplikovaní stavu: Zapinam rele, Vypinam rele.
Ovládanie ESP32 prostredníctvom UDP datagramov
Schéma zapojenia:
Ovládanie ESP32 prostredníctvom UDP datagramov
Zdrojový kód pre ESP32:
Kód:
#include "WiFi.h"
#include "AsyncUDP.h"
const char* ssid = "WiFi_meno";
const char* pass = "heslo_WiFi";
const int rele = 23;
AsyncUDP udp;

void setup()
{
  Serial.begin(115200);
  pinMode(rele, OUTPUT);
  WiFi.disconnect(true);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, pass);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  if (udp.listen(1234)) {
    Serial.print("UDP Listening on IP: ");
    Serial.println(WiFi.localIP());
    udp.onPacket([](AsyncUDPPacket packet) {
      Serial.print("UDP Packet Type: ");
      Serial.print(packet.isBroadcast() ? "Broadcast" : packet.isMulticast() ? "Multicast" : "Unicast");
      Serial.print(", From: ");
      Serial.print(packet.remoteIP());
      Serial.print(":");
      Serial.print(packet.remotePort());
      Serial.print(", To: ");
      Serial.print(packet.localIP());
      Serial.print(":");
      Serial.print(packet.localPort());
      Serial.print(", Length: ");
      Serial.print(packet.length()); //dlzka packetu
      Serial.print(", Data: ");
      Serial.write(packet.data(), packet.length());
      Serial.println();
      String myString = (const char*)packet.data();
      if (myString == "ZAP") {
        Serial.println("Zapinam rele");
        digitalWrite(rele, LOW);
      } else if (myString == "VYP") {
        Serial.println("Vypinam rele");
        digitalWrite(rele, HIGH);
      }
      packet.printf("Got %u bytes of data", packet.length());
    });
  }
}

void loop()
{
  delay(1000);
  udp.broadcast("Anyone here?");
}

Viac zaujímavých projektov a viac informácii o tomto projekte je možné nájsť na adrese: https://arduino.php5.sk/udp-control-esp32.php
Packet Sender je možné stiahnuť z adresy: https://packetsender.com/


Odpovedať na tému [ Príspevok: 1 ] 


Podobné témy

 Témy  Odpovede  Zobrazenia  Posledný príspevok 
V tomto fóre nie sú ďalšie neprečítané témy. Ovládanie hlasom pre Arduino/NodeMCU/ESP32/Raspberry/Orange Pi ... projekty

v Mikropočítače

1

1995

16.09.2017 9:16

ado130 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. UDP Session

v Siete

8

567

16.01.2011 16:54

majky358 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. UDP tunnel

v Sieťové a internetové programy

1

421

11.11.2010 15:21

ice-g Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. c++ UDP pakety

v Assembler, C, C++, Pascal, Java

1

509

05.01.2012 16:46

Fico Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. UDP Hole Punching bez servera

v Ostatné

0

334

27.07.2012 23:08

nehalem Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. otvorenie tcp a udp porty

v Operačné systémy Microsoft

0

387

18.05.2015 21:07

heron987 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. hamachi - ako na tcp/udp, pls poradte

v Siete

1

565

03.02.2012 10:31

majky358 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. GRBL, UNO+ ESP32

v Mikropočítače

0

662

15.05.2021 23:23

stevo512 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ESP32 - PHY Ethernet LAN8720

v Články

0

1769

20.10.2022 21:00

martinius96 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hladinomer + Zrážkomer - Arduino / ESP8266 / ESP32

v Články

0

887

05.11.2020 13:02

martinius96 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Hladinomer - Arduino, ESP32, ESP8266 + ultrazvuk

v Články

0

1260

22.09.2019 0:01

martinius96 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Kurzy (krypto)mien - Arduino / ESP32 / ESP8266

v Články

0

988

15.11.2019 1:03

martinius96 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ESP-IDF v simulátore Wokwi - ESP32

v Články

0

542

20.10.2022 20:58

martinius96 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. Android s Arduinom/ESP32 - vzájomná komunikácia

v Android, iOS, Windows Phone (Mobile)

1

1070

26.10.2021 12:14

sento01 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. ThingSpeak - IoT platforma pre Arduino / ESP8266 / ESP32

v Články

0

1286

16.01.2020 23:59

martinius96 Zobrazenie posledných príspevkov

V tomto fóre nie sú ďalšie neprečítané témy. BLE Beacon na ESP32 - vysielanie vlastných dát

v Články

0

618

27.08.2023 1:01

martinius96 Zobrazenie posledných príspevkov


Nemôžete zakladať nové témy v tomto fóre
Nemôžete odpovedať na témy v tomto fóre
Nemôžete upravovať svoje príspevky v tomto fóre
Nemôžete mazať svoje príspevky v tomto fóre

Skočiť na:  

Powered by phpBB Jarvis © 2005 - 2024 PCforum, webhosting by WebSupport, secured by GeoTrust, edited by JanoF
Ako väčšina webových stránok aj my používame cookies. Zotrvaním na webovej stránke súhlasíte, že ich môžeme používať.
Všeobecné podmienky, spracovanie osobných údajov a pravidlá fóra