INHOUDSOPGAWE:

Aan die gang met Arduino en Ethernet: 8 stappe
Aan die gang met Arduino en Ethernet: 8 stappe

Video: Aan die gang met Arduino en Ethernet: 8 stappe

Video: Aan die gang met Arduino en Ethernet: 8 stappe
Video: Lesson 02 Arduino IDE Software | Robojax Arduino Step By Step Course 2024, Julie
Anonim
Aan die gang met Arduino en Ethernet
Aan die gang met Arduino en Ethernet

U Arduino kan maklik met die buitewêreld kommunikeer via 'n bedrade Ethernet -verbinding. Maar voordat ons begin, word aanvaar dat u 'n basiese kennis van rekenaarnetwerk het, soos kennis oor hoe om rekenaars aan 'n hub/router te koppel met RJ45 -kabels, wat 'n IP- en MAC -adres is, ensovoorts. Hier is ook 'n goeie oorsig oor Ethernet.

U benodig 'n Arduino Uno of 'n versoenbare bord met 'n Ethernet -skild wat die W5100 Ethernet -kontroleerder IC (byna almal) volgens die prentjie gebruik.

Verder moet u die kaart via die eksterne DC -aansluiting voed - die W5100 IC gebruik meer stroom as wat die USB -krag kan verskaf. 'N 9V 1.5A proppakket/muurwrat is voldoende.

Stap 1:

Beeld
Beeld

Uiteindelik word die skilde warm - dus wees versigtig om nie die W5100 aan te raak na langdurige gebruik nie. As u nie seker is nie - dit is die W5100 IC.

Stap 2:

As u eers u Arduino met Ethernet aangeskakel het en die eksterne krag aangesluit het-is dit 'n goeie idee om te kyk of dit alles werk. Maak die Arduino IDE oop en kies File> Voorbeelde> Ethernet> Webbediener. Dit laai 'n eenvoudige skets wat data wat van die analoog insette ingesamel is, in 'n webblaaier sal vertoon. Moet dit egter nog nie oplaai nie, maar dit moet effens aangepas word.

U moet die IP -adres van die Ethernet -skild spesifiseer - wat in die skets gedoen word. Dit is eenvoudig, gaan na die reël:

IPAddress ip (10, 1, 1, 77);

En verander dit om by u eie opset te pas. Byvoorbeeld, in ons huis is die router se IP -adres 10.1.1.1, die drukker 10.1.1.50 en alle rekenaars is onder … 50. Dus stel ek my skild -IP op 10.1.1.77 deur die lyn te verander na:

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

As u egter net een skild het, laat dit dan staan. Daar is moontlik 'n baie, baie, statisties skaars kans om 'n MAC -adres te hê wat dieselfde is as u bestaande hardeware, dus dit is 'n ander tyd om dit te verander.

Stap 3:

Beeld
Beeld

As u egter net een skild het, laat dit dan staan. Daar is moontlik 'n baie, baie, statisties skaars kans om 'n MAC -adres te hê wat dieselfde is as u bestaande hardeware, dus dit is 'n ander tyd om dit te verander.

Stoor en laai die skets op sodra u dit aangebring het. Maak nou 'n webblaaier oop en navigeer na die IP -adres wat u in die skets ingevoer het, en u moet iets soortgelyk aan die prentjie kry.

Wat is besig om te gebeur?

Die Arduino is geprogrammeer om 'n eenvoudige webblad te bied met die waardes gemeet aan die analoog insette. U kan die blaaier verfris om opgedateerde waardes te kry. Let asseblief op die punt dat die Ethernet -skilde digitale penne 10 ~ 13 gebruik, sodat u dit vir niks anders kan gebruik nie. Sommige Arduino Ethernet -skilde het moontlik ook 'n microSD -kaartaansluiting, wat ook 'n ander digitale pen gebruik - raadpleeg die dokumentasie om uit te vind watter een.

Stap 4:

Noudat ons kan sien dat die Ethernet -skild werk, kan ons na iets nuttiger gaan. Kom ons ontleed die vorige voorbeeld op 'n eenvoudige manier en kyk hoe ons meer interessante data oor die netwerk kan versprei en vertoon. Ter verwysing word al die Ethernet-verwante funksies deur die Ethernet Arduino-biblioteek hanteer. As u die vorige skets wat ons pas gebruik het, ondersoek, is die gedeelte wat van belang sal wees:

for (int analogChannel = 0; analogChannel <6; analogChannel ++) {int sensorReading = analogRead (analogChannel); client.print ("analoog invoer"); client.print (analogChannel); client.print ("is"); client.print (sensorReading); client.println (""); } client.println ("");

Hopelik behoort hierdie gedeelte van die skets bekend te wees - onthou hoe ons serial.print () gebruik het; in die verlede toe u data na die seriële monitorkas gestuur het? Nou kan ons dieselfde doen, maar om data van ons Ethernet -skild na 'n webblaaier terug te stuur - met ander woorde 'n baie basiese tipe webbladsy. die uitset in 'n leesbare formaat - HTML -kode. Ek is nie 'n webwerfontwikkelaar nie (!), En ek sal nie te veel in HTML ingaan nie.

As u egter mooi geformateerde webblaaie met u Arduino wil aanbied, is dit 'n goeie begin. In die belang van eenvoud is die volgende twee funksies die nuttigste:

client.print ("is");

Client.print (); stel ons in staat om teks of data terug te stuur na die webwerf. Dit werk op dieselfde manier as serial.print (), dus daar is niks nuuts nie. U kan ook die datatipe spesifiseer op dieselfde manier as met serial.print (). U kan dit natuurlik ook gebruik om data terug te stuur. Die ander nuttige reël is:

client.println ("");

wat die HTML -kode na die webblaaier terugstuur om die nuwe reël te begin. Die deel wat die vervoer/nuwe reël eintlik veroorsaak, is die

wat 'n HTML -kode (of 'tag') vir 'n nuwe reël is.

As u dus meer uitgebreide webbladskerms skep, kan u net ander HTML -etikette in die client.print () plaas; verklaring. As u meer wil leer oor HTML -opdragte, is hier 'n goeie tutoriaalwebwerf.

Ten slotte - let op dat die skets die data slegs sal stuur wanneer dit aangevra is, dit is wanneer dit 'n versoek van die webblaaier ontvang het.

Stap 5: Toegang tot u Arduino via die internet

Toegang tot u Arduino via die internet
Toegang tot u Arduino via die internet

So ver so goed. Maar wat as u toegang tot u Arduino van buite die plaaslike netwerk wil verkry?

U benodig 'n statiese IP -adres - dit wil sê dat die IP -adres wat u internetdiensverskaffer aan u verbinding toewys, dieselfde moet bly. As u nie 'n statiese IP het nie, moet u dit nie verander nie, solank u u modem/router permanent op u IP verlaat. Dit is egter nie 'n optimale oplossing nie.

As u ISP u glad nie 'n statiese IP kan bied nie, kan u steeds voortgaan met die projek deur 'n organisasie te gebruik wat 'n dinamiese DNS bied. Hierdie organisasies bied u u eie statiese IP -gasheernaam (bv. Mojo.monkeynuts.com) in plaas van 'n nommer, hou u veranderende IP -adres dop en koppel dit aan die nuwe gasheernaam. Wat ek kan insamel, moet u modem hierdie DDNS-dienste ondersteun (het 'n ingeboude kliënt vir …).

As 'n voorbeeld is twee ondernemings No-IP en DynDNS.com. Let daarop dat ek nie die twee gebruik het nie; dit word net as voorbeelde aangebied. Om u IP -adres te vind … dit kan gewoonlik gevind word deur aan te meld by die administrasiebladsy van u router - dit is gewoonlik 192.168.0.1, maar kan anders wees. Raadpleeg u verskaffer of ISP of hulle die hardeware verskaf het. In hierdie voorbeeld, as ek 10.1.1.1 in 'n webblaaier invoer, en nadat ek my wagwoord vir die modemadministrasie ingevoer het, word die volgende skerm volgens die prent weergegee.

Stap 6:

Beeld
Beeld

Wat u soek, is u WAN IP -adres, soos u kan sien in die prent hierbo. Om die grapmakers weg te hou, het ek 'n paar van my adres verduister.

Die volgende ding wat u moet doen, is om port-forwarding aan te skakel. Dit vertel die router waarheen inkomende versoeke van die buitewêreld herlei moet word. As die modem so 'n versoek ontvang, wil ons die versoek na die poortnommer van ons Ethernet -skild stuur. Gebruik die:

EthernetServer -bediener (125);

funksie in ons skets het die poortnommer op 125 gestel. Die konfigurasieskerm van elke modem sal anders lyk, maar as voorbeeld hier is een in die prent.

Stap 7:

Beeld
Beeld

U kan dus sien dat die inkomende poortgetalle op reël nommer een in die prent hierbo op 125 gestel is, en die IP -adres van die Ethernet -skild is op 10.1.1.77 gestel - dieselfde as in die skets.

Nadat ons die instellings gestoor het, is ons gereed. Die eksterne adres van my Ethernet -skild is die WAN: 125, so om toegang tot die Arduino te kry, tik ek my WAN -adres met: 125 aan die einde in die blaaier van die afgeleë webapparaat, wat die eensame Ethernet -hardeware tuis sal kontak.

Verder moet u moontlik die firewall -instellings van u modem verander, sodat poort 125 "oop" kan wees vir inkomende versoeke. Raadpleeg u dokumentasie van die modem vir meer inligting oor hoe u dit kan doen. Nou kan ek my WAN- en poortnommer in die URL -veld invoer, van basies enige internetverbinding in die vrye wêreld en die resultate ontvang. Byvoorbeeld, vanaf 'n telefoon wanneer dit via LTE -mobiele data aan die internet gekoppel is.

In hierdie stadium kan u dus data op 'n eenvoudige webbladsy wat deur u Arduino geskep is, vertoon en dit vanaf enige plek met onbeperkte internettoegang verkry. Met u vorige Arduino -kennis, kan u nou data van sensors of ander dele van 'n skets gebruik om dit te herwin.

Stap 8: Vertoon sensordata op 'n webblad

Vertoon sensordata op 'n webblad
Vertoon sensordata op 'n webblad

As 'n voorbeeld van die vertoon van sensordata op 'n webwerf, laat ons 'n goedkoop en gewilde temperatuur- en humiditeitsensor gebruik - die DHT22. U moet die DHT22 Arduino -biblioteek installeer, wat u op hierdie bladsy kan vind. As dit u eerste keer met die DHT22 is, eksperimenteer met die voorbeeldskets wat by die biblioteek is, sodat u kan verstaan hoe dit werk.

Koppel die DHT22 met die datapen aan Arduino D2, Vin aan die 5V -pen en GND aan … GND. Nou vir ons skets - om die temperatuur en humiditeit op 'n webblad te vertoon. As u nie op hoogte is van HTML nie, kan u aanlyn -dienste soos hierdie gebruik om die kode te genereer, wat u dan kan aanpas om in die skets te gebruik. In die onderstaande voorbeeld word die temperatuur- en humiditeitsdata van die DHT22 op 'n eenvoudige webwerf weergegee:

#sluit "SPI.h" #include "Ethernet.h" in

// vir DHT22 -sensor

#sluit "DHT.h" in #definieer DHTPIN 2 #definieer DHTTYPE DHT22

// Voer 'n MAC -adres en IP -adres vir u beheerder hieronder in.

// Die IP -adres sal van u plaaslike netwerk afhang: byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; IPAddress ip (10, 1, 1, 77);

// Begin die Ethernet -bedienerbiblioteek

// met die IP -adres en poort wat u wil gebruik // (poort 80 is standaard vir HTTP): EthernetServer -bediener (125); DHT dht (DHTPIN, DHTTYPE);

leemte opstelling ()

{dht.begin (); // Maak reekskommunikasie oop en wag totdat die poort oopgemaak word: Serial.begin (9600); terwyl (! Serial) {; // wag totdat die seriële poort verbind is. Net nodig vir Leonardo} // begin die Ethernet -verbinding en die bediener: Ethernet.begin (mac, ip); bediener.begin (); Serial.print ("bediener is by"); Serial.println (Ethernet.localIP ()); }

leemte lus ()

{// luister na inkomende kliënte EthernetClient -kliënt = server.available (); if (kliënt) {Serial.println ("nuwe kliënt"); // 'n http -versoek eindig met 'n leë reël boolean currentLineIsBlank = true; terwyl (client.connected ()) {if (client.available ()) {char c = client.read (); Reeks.skryf (c); // as jy aan die einde van die reël gekom het ('n nuwe reël // karakter gekry het) en die reël leeg is, het die http -versoek geëindig, // sodat jy 'n antwoord kan stuur as (c == 'n '&& currentLineIsBlank) {// stuur 'n standaard http -antwoordopskrif client.println ("HTTP/1.1 200 OK"); client.println ("Inhoudstipe: teks/html"); client.println ("Verbinding: sluit"); // die verbinding sal gesluit word nadat die reaksie client.println ("Refresh: 30") voltooi is; // verfris die bladsy outomaties elke 30 sek. client.println (); client.println ("");

client.println ("");

// kry data van die DHT22 -sensor

float h = dht.readHumidity (); float t = dht.readTemperature (); Serial.println (t); Serial.println (h);

// hiervandaan kan ons ons eie HTML -kode invoer om die webbladsy te skep

client.print ( Kantoorweer

Kantoor temperatuur - );

kliënt.afdruk (t);

client.print ( grade Celsius

);

client.print ("

Humiditeit - );

kliënt.afdruk (h);

client.print ( persent

);

client.print ("

Blad verfris elke 30 sekondes <

. );

breek;

} as (c == 'n ') {// jy 'n nuwe reël begin currentLineIsBlank = true; } anders as (c! = 'r') {// jy 'n karakter op die huidige reël currentLineIsBlank = false gekry het; }}}} // gee die webblaaier tyd om die datavertraging (1) te ontvang; // sluit die verbinding: client.stop (); Serial.println ("kliënt ontkoppel"); }}

Dit is 'n wysiging van die IDE se voorbeeldskets van die webserver wat ons voorheen gebruik het - met 'n paar wysigings. Eerstens sal die webblad elke 30 sekondes outomaties verfris - hierdie parameter word in die reël gestel:

client.println ("Verfris: 30"); // verfris die bladsy outomaties elke 30 sekondes

… en die pasgemaakte HTML vir ons webblad begin onder die reël:

// hiervandaan kan ons ons eie HTML -kode invoer om die webbladsy te skep

U kan dan die vereiste HTML in die funksies van client.print () invoeg om die benodigde uitleg te skep. Uiteindelik - hier is 'n voorbeeldskerm van die voorbeeldskets by die werk.

Dus, dit is 'n ander nuttige manier om u Arduino met die buitewêreld te laat kommunikeer. Hierdie pos word deur pmdway.com aan u gebring - alles vir vervaardigers en elektronika -entoesiaste, met gratis aflewering wêreldwyd.

Aanbeveel: