Ethernet TCP spojenie s Arduino

Ethernet TCP spojenie s Arduino

Ethernet TCP spojenie s Arduino

Zo softvérového hľadiska nadviazanie spojenia Ethernet s Arduino Je to veľmi jednoduché. Ak to chcete urobiť, použite Ethernetová knižnica. Táto knižnica je určená pre a Ethernetový štít ktorý je založený na integr W5100, ale existujú aj iné rôzne dosky alebo moduly a/alebo ktoré používajú iné integrované, ako napr ENC28J60. Pre zjednodušenie jeho používania a zvýšenie kompatibility používajú ostatné knižnice (takmer) to isté API že Ethernetová knižnica, budete musieť iba nahradiť alternatívnu knižnicu pôvodnou alebo ju zahrnúť (keď je názov iný) na jej miesto, aj keď sú v kóde použité rovnaké (alebo veľmi podobné) funkcie. V mojom prípade používam UIPEthernet knižnica de Norbert Truchsess podľa rovnakého procesu, ktorý opíšem v tomto texte.

Modul ENC28J60 na použitie s knižnicou UIPEthernet

1. Definujte ethernetové pripojenie

Či sa chystáte prijať rolu zákazník ako napr Server, najprv musíte definovať spojenie s funkciou začať () ktorý môže byť odovzdaný ako parameter iba MAC adresa a čakať na server DHCP na sieti priradiť a IP adresa a zvyšok konfigurácie alebo je tiež možné uviesť (voliteľne) viac parametrov, kým nebude definovaná úplná konfigurácia:

  1. Dirección MAC (čo už bolo spomenuté)
  2. IP adresa štítu alebo modulu
  3. IP adresa servera DNS (iba jeden server)
  4. IP adresa Brána
  5. Maska siete

Odporúča sa uviesť všetky parametre, pokiaľ ich odpočet nie je obvyklý, aby sa predišlo nesprávnej konfigurácii (napríklad, že brána nie je prvou adresou siete).

Z vyššie uvedeného sa zdá, že je zrejmé, že údaje predstavujúce IP adresy je potrebné používať pomerne často, preto knižnica obsahuje triedu IP adresa z ktorých sa inštancia objektov IP adries. Parametre, ktoré ju definujú, sú štyri bajty adresy IPV4

La MAC adresa Pre túto knižnicu je definované ako 6-bajtové pole. MAC adresa je (má byť) jedinečný identifikátor, v ktorom prvé bajty označujú výrobcu a model a posledné bajty označujú konkrétne zariadenie. Integrovaný ENC28J60 nezahŕňa MAC adresu, pokiaľ sa nerozhodnete zakúpiť aj a Integrovaná MAC adresa od Microchip (alebo celý blok OUI adries na IEEE ak je počet zariadení dostatočne veľký na to, aby sa to oplatilo). Ak nemáte MAC adresu, môžete si ju vymyslieť a dbať na to, aby nebola v konflikte s ostatnými v sieti, kde sa zariadenie nachádza.

Ak sa konfigurácia vykonáva pomocou servera DHCP namiesto „ručne“, funkcia localIP() Je užitočné pozrieť sa na adresu, ktorú server pridelil modulu. Na obnovenie pridelenej adresy (ak uplynul príslušný čas) Ethernetová knižnica poskytuje funkciu udržiavať () ktorý bude informovať aj vrátením kódu, ktorý zodpovedá stavu obnovenia:

  1. Operácia nemala žiadny účinok
  2. Chyba pri obnovovaní adresy IP
    Použitie pridelenej adresy IP na rovnakom serveri nebolo možné predĺžiť
  3. Adresa IP bola úspešne obnovená
  4. Opätovné prepojenie adresy IP zlyhalo
    Použitie pridelenej IP adresy nebolo možné rozšíriť na žiadnom serveri
  5. Adresa IP bola úspešne pridelená

S informáciami, ktoré ste doteraz videli, môžete napísať príklad toho, ako by sa iniciovalo ethernetové pripojenie konfiguráciou adresy IP prostredníctvom servera DHCP v sieti. Nasledujúci príklad kódu sa pokúša obnoviť IP adresu každé určité časové obdobie a hlási výsledok.

Nižšie uvedený príklad priraďuje IP adresu a zvyšok konfigurácie manuálne pomocou objektov IP adresa aby sa to dalo pohodlnejšie čítať a (v prípade zložitejšieho kódu) aby sa predišlo chybám, ktoré by mohli nastať, ak by bola adresa (chybne) zapísaná pri každom použití.

2. Spustite pripojenie v režime klienta alebo servera

Pri inicializácii pripojenia v režime servera je to práve vyvíjaný mikroriadený systém, ktorý počúva požiadavky z iných systémov. Ak chcete spustiť pripojenie ako server, použite EthernetServer() a port, na ktorom bude server počúvať, je uvedený ako parameter. EthernetServer() je konštruktérom triedy server, ktorý podporuje všetky ethernetové operácie ako server. Aj keď najortodoxnejšia vec je zavolať konštruktérovi EthernetServer(), nie je nezvyčajné nájsť niekoľko príkladov, ktoré priamo používajú triedu server alebo alternatívne knižnice pre ethernetové pripojenie, ktoré sa rozhodnú použiť tento inštanciačný systém.

Pripojenie ako klient je to, ktoré vytvára požiadavky na serverový systém, ktorý na ne čaká a zodpovedajúcim spôsobom na ne odpovedá. Ak chcete inicializovať pripojenie ako klient, použite EthernetClient() čo je konštruktérom triedy Zákazník pôvod všetkých ethernetových operácií ako klient.

Na rozdiel od toho, čo sa stane s režimom servera, o ktorom sa predpokladá, že funguje od okamihu vytvorenia inštancie triedy (hoci bude reagovať na klientov iba vtedy, ak to tak naozaj je), musíte pred použitím overiť, či je pripojenie klienta pripravené. Klientsky objekt, ktorý sa vytvorí pri inicializácii pripojenia, sa môže dotazom zistiť, či je dostupný. Do štruktúry môžu byť zahrnuté napríklad operácie dotazov if(EthernetClient) vykonať ich iba vtedy, keď je dostupné pripojenie klienta.

3. Vytvorte spojenie ako klient

Ako už bolo povedané, akonáhle je spojenie vytvorené, je to klient, kto preberá iniciatívu zadávať dopyty. Server bude čakať na túto iniciatívu a podľa toho odpovie. Je to teda klient, ktorý sa pripája k serveru, na to používame pripojiť () označujúci server ako parametre (IP adresa alebo URL) a puerto v tom, kto počúva.

Na základe výsledku operácie funkcia vráti hodnoty

  1. (ÚSPECH) Spojenie bolo úspešne nadviazané
  2. Nadviazanie spojenia
  3. (VYPRŠAL) Časový limit uplynul bez nadviazania spojenia
  4. (INVALID_SERVER) Server sa nenašiel alebo neodpovedá správne
  5. (SKRÁTENÝ) Spojenie bolo prerušené pred úplným nadviazaním
  6. (INVALID_RESPONSE) Odpoveď servera je nesprávna

Pred začatím dopytovania je potrebné overiť, či je spojenie s funkciou funkčné pripojený() to sa vráti pravdivý ak je už dostupný resp nepravdivý inak.

Príklad nižšie ilustruje pripojenie ako klient, ktorý každých 10 sekúnd kontroluje, či existuje pripojenie k serveru (nie je určené ako produktívne, len na zobrazenie syntaxe funkcií), čo je mimochodom, produkčný webový server by sa veľmi nepáčil.

4. Odošlite údaje

Podobne ako iné známejšie triedy, ako napr Sériovýa pri porovnateľnom použití aj triedy Zákazník y server mať funkcie

  • písať(fakt) o písať(vyrovnávacia pamäť, dĺžka)

    Odošle informácie pomocou objektu klienta alebo servera, z ktorého sú vyvolané. Parameter "data" je jediný byte o spáliť zatiaľ čo "buffer" je pole byte o spáliť z ktorých sa odošle množstvo rovnajúce sa „dĺžke". Táto funkcia sa používa na binárne operácie v porovnaní s ďalšími dvoma, ktoré sú zvyčajne vyhradené na odosielanie textu.

  • vytlačiť(dáta, základňa)

    Odošle ako klient alebo server (v závislosti od triedy, z ktorej sa používa) informácie zodpovedajúce „údajom“ ako text. Ak informácia nie je vyjadrená ako text (napríklad je to celé číslo), možno použiť voliteľný parameter „základ“ na výber prevodu, ktorým môže byť jedna z konštánt BIN, OCT, DEC alebo HEX, ktoré označujú, resp. základy zodpovedajúce binárnemu (základ 2), osmičkovému (základ 8), desiatkovej (základ 10) a šestnástkovej sústave (základ 16)

  • println(dáta, základňa)

    Operácia je totožná s predchádzajúcou s výnimkou odoslania, po informácii výslovne označenej parametrom "data", návrat vozíka (kód 13, ktorý môže byť reprezentovaný ako \r) a koniec riadku (kód 10, ktorý môže byť reprezentované \n) Tieto kódy sú často označované skratkou CR (Carriage Return) a LF (riadkový posuv)

Tri predchádzajúce funkcie vrátia počet bajtov, ktoré boli odoslané, rovnako ako ekvivalentné funkcie triedy Sériový; Ako bolo uvedené vyššie, prevádzka je porovnateľná.

5. Príjem dát

Rovnako ako v prípade operácií odosielania údajov sú operácie prijímania porovnateľné s operáciami široko používanými Sériový. Prijímací protokol je tiež podobný: skontrolujte, či je k dispozícii (dostatok) údajov (dostupný) a v takom prípade si ich prečítajte


  • k dispozícii ()

    Vráti počet bajtov, ktoré sú k dispozícii na čítanie. Táto funkcia je prítomná v oboch triedach Zákazník ako server; V prvom prípade hlási počet bajtov, ktoré server odoslal ako odpoveď na požiadavku a ktoré má klient k dispozícii na čítanie (čítať), a v druhom prípade klient (objekt), ktorý vykonal operáciu alebo je falošný, ak žiadna neexistuje.

  • čítať()

    Používa sa na čítanie informácií, ktoré boli prijaté. Táto funkcia je dostupná iba v triede Zákazník. Ak vyvíjaná aplikácia plní úlohu servera, na čítanie informácií, ktoré prišli, je potrebné vytvoriť inštanciu objektu klienta s odpoveďou funkcie. k dispozícii () diskutované v predchádzajúcej časti.

Nasledujúci príklad je „server caps“, ktorý počúva na porte 2000 a odpovedá na požiadavky tým, čo bolo odoslané všetkými veľkými písmenami, ak je to možné. Dá sa otestovať napr PuTTY alebo jednoducho s telnet 2000 Určite to nie je veľmi praktické, jeho účelom je len ukázať, ako získať dáta, ktoré mu klient posiela zo servera.

6. Ukončite pripojenie

Aj keď je obvyklé, že serverová aplikácia beží neobmedzene dlho, klientske pripojenia sa vytvárajú, vytvárajú pripojenia a ukončujú sa, čo umožňuje obnovenie zdrojov a ich použitie v iných pripojeniach alebo vyhradené na iné použitie programu. Funkcia stop () triedy Zákazník Používa sa na ukončenie pripojenia klienta a uvoľnenie všetkých zdrojov, ktoré používa.

Skutočnosť, že klient ukončí spojenie, keď bol informačný objekt dopytu odoslaný alebo prijatý, serveru tiež umožňuje uvoľniť zdroje na ich pridelenie iným spojeniam alebo iným účelom. Skrátka, aj keď sa to zdá byť zanedbateľné, je vhodné ukončiť spojenie, keď sa skončia operácie klienta.

Ďalšou dobrou praxou pri ukončovaní pripojenia klienta je vyprázdnenie ktoré trieda používa. Na tento účel je k dispozícii funkcia spláchnuť() by mal byť volaný po ukončení klientskeho spojenia s stop ()

Príklad dotazu HTTP GET

Na lepšie objasnenie všetkých vyššie uvedených skutočností je nižšie uvedený úplnejší príklad žiadostí. TCP pomocou požiadaviek GET pomocou HTTP protokol. V príklade sú hodnoty získané analógovými senzormi pripojenými k doske Arduino odoslané na webový server, ktorý ich uloží do databázy.

Pridať komentár

Možno ste zmeškali