Turinys:

Darbo su „Arduino“ir „Ethernet“pradžia: 8 žingsniai
Darbo su „Arduino“ir „Ethernet“pradžia: 8 žingsniai

Video: Darbo su „Arduino“ir „Ethernet“pradžia: 8 žingsniai

Video: Darbo su „Arduino“ir „Ethernet“pradžia: 8 žingsniai
Video: Как управлять серводвигателем | Внешний ПЛК Arduino 2024, Liepa
Anonim
Darbo su „Arduino“ir „Ethernet“pradžia
Darbo su „Arduino“ir „Ethernet“pradžia

„Arduino“gali lengvai bendrauti su išoriniu pasauliu per laidinį Ethernet ryšį. Tačiau prieš pradėdami manysime, kad turite pagrindinį supratimą apie kompiuterių tinklus, pavyzdžiui, žinote, kaip prijungti kompiuterius prie šakotuvo/maršrutizatoriaus RJ45 kabeliais, kas yra IP ir MAC adresas ir pan. Be to, čia yra geras greitas eterneto aprašymas.

Jums reikės „Arduino Uno“arba suderinamos plokštės su „Ethernet“ekranu, kuriame naudojamas „W5100 Ethernet“valdiklio IC (beveik visi jie), kaip parodyta paveikslėlyje.

Be to, jums reikės maitinti plokštę per išorinį nuolatinės srovės lizdą - W5100 IC naudoja daugiau srovės, nei gali tiekti USB maitinimas. Pakaks 9V 1,5A kištuko paketo/sieninės karpos.

1 žingsnis:

Vaizdas
Vaizdas

Galiausiai - skydai įkaista, todėl būkite atsargūs ir nelieskite W5100 po ilgesnio naudojimo. Jei nesate tikri - tai W5100 IC.

2 žingsnis:

Kai turėsite „Ethernet“palaikantį „Arduino“ir prijungsite išorinį maitinimą-pravartu patikrinti, ar viskas veikia. Atidarykite „Arduino IDE“ir pasirinkite Failas> Pavyzdžiai> Eternetas> Tinklalapio serveris. Tai įkelia paprastą eskizą, kuriame bus rodomi duomenys, surinkti iš analoginių įėjimų interneto naršyklėje. Tačiau dar neįkelkite, reikia šiek tiek pakeisti.

Turite nurodyti „Ethernet“skydo IP adresą - tai daroma eskizo viduje. Tai paprasta, eikite į eilutę:

IP adresas ip (10, 1, 1, 77);

Ir pakeiskite jį, kad atitiktų jūsų nustatymus. Pavyzdžiui, mūsų namuose maršrutizatoriaus IP adresas yra 10.1.1.1, spausdintuvas - 10.1.1.50, o visi kompiuteriai yra žemiau… 50. Taigi aš nustatysiu savo skydo IP 10.1.1.77, pakeisdamas eilutę į:

baitas mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};

Tačiau jei turite tik vieną skydą, tiesiog palikite jį. Gali būti labai, labai, statistiškai reta tikimybė, kad MAC adresas bus toks pat kaip jūsų esamos aparatūros, todėl būtų kitas laikas jį pakeisti.

3 žingsnis:

Vaizdas
Vaizdas

Tačiau jei turite tik vieną skydą, tiesiog palikite jį. Gali būti labai, labai, statistiškai reta tikimybė, kad MAC adresas bus toks pat kaip jūsų esamos aparatūros, todėl būtų kitas laikas jį pakeisti.

Atlikę pakeitimus, išsaugokite ir įkelkite eskizą. Dabar atidarykite žiniatinklio naršyklę ir eikite į eskize įvestą IP adresą, ir jums turėtų būti pateiktas kažkas panašaus į paveikslėlį.

Kas vyksta?

„Arduino“buvo užprogramuotas taip, kad pasiūlytų paprastą tinklalapį, kurio vertės būtų išmatuotos pagal analogines įvestis. Galite atnaujinti naršyklę, kad gautumėte atnaujintas vertes. Šiuo metu - atkreipkite dėmesį, kad „Ethernet“skydai naudoja 10–13 skaitmeninius kaiščius, todėl negalite jų naudoti niekam kitam. Kai kurie „Arduino Ethernet“skydai taip pat gali turėti „microSD“kortelės lizdą, kuris taip pat naudoja kitą skaitmeninį kaištį, todėl patikrinkite dokumentus, kad sužinotumėte, kuris iš jų.

4 žingsnis:

Nepaisant to, dabar, kai matome, kaip veikia „Ethernet“skydas, galime pereiti prie kažko naudingesnio. Išsiaiškinkime ankstesnį pavyzdį paprastu būdu ir pažiūrėkime, kaip galime platinti ir rodyti įdomesnius duomenis tinkle. Pavyzdžiui, visas su „Ethernet“susijusias funkcijas tvarko „Ethernet Arduino“biblioteka. Jei išnagrinėsite ankstesnį eskizą, kurį ką tik naudojome, tai bus įdomus skyrius:

for (int analoginis kanalas = 0; analoginis kanalas <6; analoginis kanalas ++) {int sensorReading = analogRead (analogChannel); client.print („analoginė įvestis“); client.print (analoginis kanalas); client.print („yra“); client.print (sensorReading); client.println (""); } client.println ("");

Tikimės, kad šis eskizo skyrius turėtų būti pažįstamas - prisiminkite, kaip naudojome serial.print (); anksčiau siunčiant duomenis į serijinio monitoriaus dėžutę? Na, dabar galime padaryti tą patį, bet siųsti duomenis iš „Ethernet“skydo atgal į žiniatinklio naršyklę - kitaip tariant, labai paprastą tinklalapio tipą. Tačiau yra kažkas, ko galbūt norėsite arba nenorėsite, kad suformatuotumėte išvestis skaitomu formatu - HTML kodu. Nesu svetainių kūrėjas (!), Todėl per daug nesigilinsiu į HTML.

Tačiau jei norite pateikti gražiai suformatuotus tinklalapius naudodami „Arduino“ir pan., Čia būtų gera pradžia. Siekiant paprastumo, šios dvi funkcijos bus naudingiausios:

client.print („yra“);

Client.print (); leidžia mums siųsti tekstą ar duomenis atgal į tinklalapį. Jis veikia taip pat kaip serial.print (), todėl ten nieko naujo. Taip pat galite nurodyti duomenų tipą taip pat, kaip ir su serial.print (). Natūralu, kad taip pat galite jį naudoti norėdami siųsti duomenis atgal. Kita naudinga eilutė yra tokia:

client.println ("");

kuris siunčia HTML kodą atgal į interneto naršyklę ir liepia pradėti naują eilutę. Dalis, kuri iš tikrųjų sukelia vežimo grįžimą/naują eilutę, yra

kuris yra naujos eilutės HTML kodas (arba „žyma“).

Taigi, jei kuriate įmantresnius tinklalapio vaizdus, galite tiesiog įterpti kitų HTML žymų į klientą.print (); pareiškimas. Jei norite daugiau sužinoti apie HTML komandas, čia yra gera pamokų svetainė.

Galiausiai - atkreipkite dėmesį, kad eskizas siųs duomenis tik tada, kai jų buvo paprašyta, tai yra, kai jis gavo užklausą iš žiniatinklio naršyklės.

5 veiksmas: prieiga prie „Arduino“internetu

Prieiga prie „Arduino“internetu
Prieiga prie „Arduino“internetu

Kol kas viskas gerai. Bet ką daryti, jei norite pasiekti „Arduino“iš išorinio tinklo?

Jums reikės statinio IP adreso - tai yra, IP adresas, kurį jūsų interneto paslaugų teikėjas priskiria jūsų ryšiui, turi likti tas pats. Jei neturite statinio IP, tol, kol paliekate modemą/maršrutizatorių visam laikui savo IP, neturėtų pasikeisti. Tačiau tai nėra optimalus sprendimas.

Jei jūsų IPT apskritai negali jums pasiūlyti statinio IP, vis tiek galite tęsti projektą naudodami organizaciją, siūlančią dinaminį DNS. Šios organizacijos vietoj numerio siūlo jums savo statinį IP pagrindinio kompiuterio pavadinimą (pvz., Mojo.monkeynuts.com), sekite kintantį IP adresą ir susiekite jį su nauju pagrindinio kompiuterio pavadinimu. Kiek galiu surinkti, jūsų modemas turi palaikyti (turėti įmontuotą klientą…) šioms DDNS paslaugoms.

Pavyzdžiui, dvi bendrovės yra „No-IP“ir „DynDNS.com“. Atkreipkite dėmesį, kad aš nenaudojau šių dviejų, jie yra tik kaip pavyzdžiai. Dabar, norėdami rasti savo IP adresą … paprastai tai galima rasti prisijungus prie maršrutizatoriaus administravimo puslapio - paprastai jis yra 192.168.0.1, bet gali būti kitoks. Pasiteiraukite savo tiekėjo ar IPT, ar jie tiekė aparatūrą. Šiame pavyzdyje, jei įvedu 10.1.1.1 žiniatinklio naršyklėje ir įvedęs savo modemo administravimo slaptažodį, šis ekranas rodomas kaip parodyta paveikslėlyje.

6 žingsnis:

Vaizdas
Vaizdas

Tai, ko ieškote, yra jūsų WAN IP adresas, kaip matote aukščiau esančiame paveikslėlyje. Kad išdaigininkai nepasirodytų, užtemdžiau kai kuriuos savo adresus.

Kitas dalykas, kurį reikia padaryti, yra įjungti uosto persiuntimą. Tai nurodo maršrutizatoriui, kur nukreipti gaunamas užklausas iš išorinio pasaulio. Kai modemas gauna tokią užklausą, mes norime nusiųsti tą užklausą mūsų „Ethernet“skydo prievado numeriui. Naudojant:

„EthernetServer“serveris (125);

mūsų eskizo funkcija nustatė prievado numerį į 125. Kiekvieno modemo konfigūracijos ekranas atrodys skirtingai, tačiau kaip pavyzdys čia yra vienas paveikslėlyje.

7 žingsnis:

Vaizdas
Vaizdas

Taigi aukščiau esančiame paveikslėlyje matote eilutę numeris vienas, įeinančių prievadų numeriai buvo nustatyti 125, o eterneto skydo IP adresas - 10.1.1.77 - toks pat kaip eskize.

Išsaugoję nustatymus, mes visi pasiruošę. Išorinis mano „Ethernet“skydo adresas bus WAN: 125, todėl norėdamas pasiekti „Arduino“, įvesiu savo WAN adresą su: 125 pabaigoje į nuotolinio žiniatinklio įrenginio naršyklę, kuri susisieks su vieniša „Ethernet“aparatine įranga namuose.

Be to, gali tekti pakeisti modemo užkardos nustatymus, kad 125 prievadas būtų „atidarytas“gaunamoms užklausoms. Jei reikia daugiau informacijos, kaip tai padaryti, patikrinkite modemo dokumentaciją. Dabar iš esmės bet kuriame prie interneto prijungtame įrenginyje laisvajame pasaulyje galiu įvesti savo WAN ir prievado numerį į URL lauką ir gauti rezultatus. Pavyzdžiui, iš telefono, kai jis prijungtas prie interneto per LTE mobiliuosius duomenis.

Taigi šiame etape dabar galite rodyti duomenis paprastame „Arduino“sukurtame tinklalapyje ir prieiti prie jo iš bet kur, kur neribota prieiga prie interneto. Turėdami ankstesnes „Arduino“žinias, dabar galite naudoti jutiklių ar kitų eskizo dalių duomenis ir rodyti juos, kad juos būtų galima paimti.

8 veiksmas: jutiklio duomenų rodymas tinklalapyje

Jutiklio duomenų rodymas tinklalapyje
Jutiklio duomenų rodymas tinklalapyje

Kaip jutiklio duomenų rodymo tinklalapyje pavyzdį, naudokime nebrangų ir populiarų temperatūros ir drėgmės jutiklį - DHT22. Turėsite įdiegti „DHT22 Arduino“biblioteką, kurią rasite šiame puslapyje. Jei pirmą kartą naudojatės DHT22, eksperimentuokite su pavyzdžiu eskizu, pridėtu prie bibliotekos, kad suprastumėte, kaip jis veikia.

Prijunkite DHT22 su duomenų kaiščiu prie „Arduino D2“, „Vin“prie 5 V kaiščio, o GND prie… GND. Dabar mūsų eskizas - rodyti temperatūrą ir drėgmę tinklalapyje. Jei nesate susipažinęs su HTML, galite naudoti tokias internetines paslaugas kaip šis, kad sukurtumėte kodą, kurį galite pakeisti, kad galėtumėte naudoti eskizą. Žemiau pateiktame pavyzdyje DHT22 temperatūros ir drėgmės duomenys pateikiami paprastame tinklalapyje:

#įtraukti „SPI.h“#įtraukti „Ethernet.h“

// DHT22 jutikliui

#įtraukti „DHT.h“#define DHTPIN 2 #define DHTTYPE DHT22

// Žemiau įveskite valdiklio MAC adresą ir IP adresą.

// IP adresas priklausys nuo jūsų vietinio tinklo: baitas mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; IP adresas ip (10, 1, 1, 77);

// Inicijuokite Ethernet serverio biblioteką

// su IP adresu ir prievadu, kurį norite naudoti // (80 prievadas yra numatytasis HTTP): EthernetServer server (125); DHT dht (DHTPIN, DHTTYPE);

negaliojanti sąranka ()

{dht.begin (); // Atidarykite nuoseklųjį ryšį ir palaukite, kol bus atidarytas prievadas: Serial.begin (9600); while (! Serial) {; // laukti, kol serijinis prievadas prisijungs. Reikalingas tik „Leonardo“} // pradėti Ethernet ryšį ir serverį: Ethernet.begin (mac, ip); server.begin (); Serial.print ("serveris yra"); Serial.println (Ethernet.localIP ()); }

tuštumos kilpa ()

{// klausytis gaunamų klientų EthernetClient client = server.available (); if (klientas) {Serial.println („naujas klientas“); // http užklausa baigiasi tuščia eilute boolean currentLineIsBlank = true; while (client.connected ()) {if (client.available ()) {char c = client.read (); Serial.write (c); // jei pasiekėte eilutės pabaigą (gavote naują eilutę // simbolį) ir eilutė tuščia, http užklausa baigta, // kad galėtumėte atsiųsti atsakymą, jei (c == 'n' && currentLineIsBlank) {// siųsti standartinę http atsakymo antraštę client.println ("HTTP/1.1 200 OK"); client.println ("Turinio tipas: tekstas/html"); client.println ("Ryšys: uždaryti"); // ryšys bus uždarytas užbaigus atsakymo klientą.println ("Atnaujinti: 30"); // automatiškai atnaujinti puslapį kas 30 sek. client.println (); client.println ("");

client.println ("");

// gauti duomenis iš DHT22 jutiklio

plūdė h = dht.readHumidity (); plūdė t = dht.readTemperature (); Serijinis.println (t); Serijinis.println (h);

// iš čia mes galime įvesti savo HTML kodą, kad sukurtume tinklalapį

client.print ( Biuro orai

Biuro temperatūra - );

klientas.spaudas (t);

client.print ( laipsnių Celsijaus

);

client.print ("

Drėgmė - );

klientas.spaudas (h);

client.print ( proc

);

client.print ("

Puslapis atnaujinamas kas 30 sekundžių <

. );

pertrauka;

} if (c == 'n') {// pradedate naują eilutę currentLineIsBlank = true; } else if (c! = 'r') {// gavote simbolį dabartinėje eilutėje currentLineIsBlank = false; }}} // duokite žiniatinklio naršyklei laiko duomenų vėlavimui gauti (1); // uždaryti ryšį: client.stop (); Serial.println ("klientas atjungtas"); }}

Tai yra IDE žiniatinklio serverio pavyzdžio eskizo modifikacija, kurią mes naudojome anksčiau - su keliais pakeitimais. Pirma, tinklalapis bus automatiškai atnaujinamas kas 30 sekundžių - šis parametras nustatytas eilutėje:

client.println ("Atnaujinti: 30"); // automatiškai atnaujinti puslapį kas 30 sek

… ir tinkintas mūsų tinklalapio HTML prasideda po eilute:

// iš čia mes galime įvesti savo HTML kodą, kad sukurtume tinklalapį

Tada galite tiesiog įterpti reikiamą HTML į „client.print ()“funkcijas, kad sukurtumėte reikiamą išdėstymą. Galiausiai - čia yra pavyzdinis eskizo darbo ekrano vaizdas.

Taigi, jūs turite tai dar vienas naudingas būdas, kaip „Arduino“bendrauti su išoriniu pasauliu. Šį pranešimą jums pateikia pmdway.com - viskas gamintojams ir elektronikos entuziastams, nemokamas pristatymas visame pasaulyje.

Rekomenduojamas: