Arduino v praxi – komunikácia s využitím siete Ethernet

Arduino v praxi – komunikácia s využitím siete Ethernet
TME S.r.o. Pridal  TME S.r.o.
  144 zobrazení
3
 0
Arduino a príbuzné platformy

Tvorenie rozsiahlych počítačových sietí už pekných niekoľko desiatok rokov prestalo slúžiť len na pripojenie počítačov. Zníženie cien a zvýšenie výpočtového výkonu malých mikrokontrolérov začalo rýchly proces pripojenia k miestnym Ethernetovým sieťam alebo dokonca globálnej internetovej sieti, nízkonapäťových zariadení, najmä vykonávajúcich kontrolné, ovládacie a meracie funkcie. Okrem toho sa tieto riešenia začali objavovať aj v profesionálnych priemyselných sieťach, postupne nahraďujúcich staršie systémy založené na RS232 a ich derivátoch. So začiatkom 21. storočia sa teda začala éra tzv. Internetu vecí (ang. Internet of Things – IoT). Kým súčasnému IoT trhu dominujú zariadenia komunikujúce hlavne prostredníctvom bezdrôtových sietí a štandardov WiFi, ZigBee, BLE alebo Z-Wave, stále v mnohých hardvérových riešeniach (hlavne z tzv. IIoT segmentu – Industrial Internet of Things), ktoré vyžadujú spoľahlivosť prenosu a bezpečnosť dát, je jedným z najpopulárnejších riešení aj naďalej Ethernet. Vývojári platformy Arduino nenechali bez odpovede dopyt hlásený od staviteľov zariadení IIoT a štandardná ponuka modulov Arduino sa rozšírila o nadstavby Ethernet Shield 2, určené pre jednotlivých užívateľov, alebo Arduino MKR ETH SHIELD pre profesionálne riešenia založené na kontroléroch WIZnet W5100/W5200/W5500 a integrujúce sústavy MAC a PHY v jednom integrovanom systéme. Táto ponuka bola pomerne rýchlo rozšírená nezávislými výrobcami o ďalšie a oveľa lacnejšie moduly založené na populárnych sústavách ENC28J60 . Tento článok poskytuje stručnú charakteristiku oboch riešení: oficiálne rozloženie založené na rade W5x00a primárne vyvinuté komunitou Open Source/Open Hardware založenej na moduloch ENC28J60.

Komunikácia pomocou modulov WizNet W5x00 a knižnice Arduino Ethernet

Nepochybnou výhodou oficiálnych modulov založených na rade W5x00(vrátane ich hardvérových náprotivkov, napr. nadstavieb OKYSTAR OKY2102 alebo DFROBOT DFR0125) je poskytnutie plnej softvérovej podpory vo forme ethernetovej knižnice zabudovanej do zásobníka Arduino. Používateľ tak môže začať vytvárať program hneď po spustení Arduino IDE, bez potreby inštalovať ďalšie softvérové balíky.

Obrázok 1. Moduly OKY2102 (vľavo) a DFR0125 (vpravo), vybavené regulátorom WizNet W5100

V závislosti od variantu WizNet a množstva dostupnej pamäte RAM podporuje knižnica Ethernet až štyri (pre W5100 a <= 2 kB RAM) alebo osem (W5200 a W5500) paralelné výstupné/prichádzajúce pripojenia. Softvérové rozhranie knižnice bolo rozdelené do piatich tried, zoskupujúcich jednotlivé funkcionality. Trieda Ethernet je zodpovedná za inicializáciu knižnice a nastavenie sieťových nastavení (vrátane adresy IP, adresy podsiete alebo nastavení prístupových brán). Trieda IPAddress bola vytvorená pre adresovanie IP. Ak chcete spustiť jednoduchú serverovú aplikáciu na strane Arduino, budete musieť použiť triedu EtherNetServer, ktorá vám umožní písať a čítať dáta zo všetkých pripojených zariadení. Doplnková trieda je trieda EtherNetClient, ktorá umožňuje v niekoľkých jednoduchých hovoroch pripraviť funkčného sieťového klienta, ktorý vykonáva zápis údajov a operácie čítania zo servera. Pre potreby komunikácie UDP poskytuje knižnica Ethernet triedu EthernetUDP. Kompletný opis tried spolu s metódami bol sprístupnený na adrese:

Charakteristickým spôsobom platformy Arduino boli všetky komplexné softvérové operácie implementované priamo v dodanej knižnici – programátor dostane k dispozícii obmedzené, ale vysoko funkčné API, takže proces vývoja aplikácií je rýchly a nevyžaduje podrobnú znalosť sieťových stohov. Takže poďme analyzovať konštrukciu najjednoduchšej serverovej aplikácie dodávanej s ethernetovou knižnicou, ktorá má za úlohu počúvať prichádzajúce hovory od klienta protokolu Telnet.

Kód aplikácie servera začne pridávať hlavičkové súbory potrebné na vytvorenie SPI komunikácie (moduly WizNet si vymieňajú údaje s mikrokontrolérom pomocou tohto protokolu) a ethernetové hlavičkové súbory:

#include <SPI.h>

#include <Ethernet.h>

Ďalším krokom je konfigurácia sieťových parametrov (MAC adresa radiča, IP adresa prístupovej brány a masky podsiete) a vytvorenie počúvacieho servera na porte číslo 23 (predvolený port pre Telnet protokol):

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

IPAddress ip(192,168,1, 177);

IPAddress gateway(192,168,1, 1);

IPAddress subnet(255, 255, 0, 0);

EthernetServer server(23);

V tele funkcie setup() je potrebné inicializovať ethernetovú knižnicu a spustiť proces počúvania. Okrem toho konfigurácia sériového portu je tiež umiestnená na zobrazenie správ o adrese servera, pripojenie nového klienta a údaje prijaté počas zavedenej relácie:

void setup() {

Ethernet.begin(mac, ip, gateway, subnet);

server.begin();

Serial.begin(9600);

while (!Serial) {

}

Serial.print("Chat server address:");

Serial.println(Ethernet.localIP());

}

Hlavná slučka programu() čaká pripojenie od klienta a kontroluje čitateľné údaje. Ak sú údaje prijaté, odosiela ich klientovi klienta nezmenené, a tak sleduje jednoduchú funkciu ozveny:

void loop() {

EthernetClient client = server.available();

if (client) {

if (!alreadyConnected) {

client.flush();

Serial.println("We have a new client");

client.println("Hello, client!");

alreadyConnected = true;

}

if (client.available() > 0) {

char thisChar = client.read();

server.write(thisChar);

Serial.write(thisChar);

}

}

}

Správnosť aplikácie vyššie je možné testovať pomocou ľubovoľného klienta Telnet (napríklad Putty na Windows alebo príkaz telnet v systéme Linux) alebo pomocou inéhosetu Arduino a triedy EtherNetClient.

Komunikácia pomocou modulov ENC28J60 a externých knižníc

Alternatívnym riešením k oficiálne podporovaným čipom WIZNet W5x00sú moduly na báze kontrolérov ENC28J60 (napr. OKYSTAR OKY3486 alebo ETH CLICK). S nižšou cenou a jednoduchšou inštaláciou do manuálneho puzdra (na rozdiel od systémov W5x00 obsiahnutých v 80-pinových puzdrách LQFP, ENC28J60 je k dispozícii v 28-pinových puzdrách typu SSOP, SOIC, QFN a určený pre montáž do puzdra s prevlečením SPDIP), tento rozloženie je veľmi populárne medzi domácimi nadšencami elektroniky.

Obrázok 2. Moduly OY3486 (vľavo) a ETH CLICK (vpravo) vybavené regulátorom ENC28J60

Napriek nedostatku oficiálnej podpory zo strany Arduino, mnoho open source knižníc bolo k dispozícii vývojárom poskytujúcich rýchlu integráciu čipov ENC28J60 do softvéru. Osobitná pozornosť by sa mala venovať knižnici UIPEthernet a licencovanej knižnici GPLv2 EtherCard. Nepochybnou výhodou prvého z uvedených projektov je kompatibilita API s oficiálnou knižnicou Arduino Ethernet, ktorá umožňuje udržať proces vývoja aplikácií nezávislý na voľbách medzi čipmi W5x00 a rozložením ENC28J60 v hardvérovej vrstve. Druhý projekt – EtherCard – implementuje nezávislé vývojové rozhranie, ktoré sa v závislosti od preferencií programátora môže ukázať ako zaujímavá alternatíva. Rovnako ako u knižnice Arduino Ethernet, implementácia pomerne zložitých funkcií (napr. implementácia klienta DHCP) môže byť realizovaná v niekoľkých riadkoch kódu:

#include <EtherCard.h>

static byte mymac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

byte Ethernet::buffer[700];

void setup () {

Serial.begin(57600);

Serial.println(F("

[testDHCP]"));

if (ether.begin(sizeof Ethernet::buffer, mymac, SS) == 0)

Serial.println(F("Failed to access Ethernet controller"));

Serial.println(F("Setting up DHCP"));

if (!ether.dhcpSetup())

Serial.println(F("DHCP failed"));

 

ether.printIp("My IP: ", ether.myip);

ether.printIp("Netmask: ", ether.netmask);

ether.printIp("GW IP: ", ether.gwip);

ether.printIp("DNS IP: ", ether.dnsip);

}

void loop () {

ether.packetLoop(ether.packetReceive());

}

 



Páčil sa Vám článok? Pridajte k nemu hodnotenie, alebo podporte jeho autora.
 

     

Komentáre k článku

Zatiaľ nebol pridaný žiadny komentár k článku. Pridáte prvý? Berte prosím na vedomie, že za obsah komentárov je zodpovedný užívateľ, nie prevádzkovateľ týchto stránok.
Pre komentovanie sa musíte prihlásiť.

Vyhľadajte niečo na našom blogu

Webwiki ButtonSeo servis