Innehållsförteckning:

Komma igång med Arduino och Ethernet: 8 steg
Komma igång med Arduino och Ethernet: 8 steg

Video: Komma igång med Arduino och Ethernet: 8 steg

Video: Komma igång med Arduino och Ethernet: 8 steg
Video: Kom igång med Rugged Robot 2024, Juli
Anonim
Komma igång med Arduino och Ethernet
Komma igång med Arduino och Ethernet

Din Arduino kan enkelt kommunicera med omvärlden via en trådbunden Ethernet -anslutning. Men innan vi börjar kommer det att antas att du har en grundläggande förståelse för datornätverk, till exempel kunskapen om hur du ansluter datorer till en hubb/router med RJ45 -kablar, vad en IP- och MAC -adress är, och så vidare. Här är också en snabb översikt över Ethernet.

Du behöver ett Arduino Uno eller kompatibelt kort med en Ethernet -sköld som använder W5100 Ethernet -styrenhetens IC (i stort sett alla) enligt bilden.

Dessutom måste du driva kortet via det externa DC -uttaget - W5100 IC använder mer ström än USB -strömmen kan leverera. Ett 9V 1,5A pluggpaket/väggvårta räcker.

Steg 1:

Bild
Bild

Slutligen - skärmarna blir heta - så var försiktig så att du inte vidrör W5100 efter längre användning. Om du inte är säker - det här är W5100 IC.

Steg 2:

När du har din Ethernet-aktiverade Arduino och har den externa strömmen ansluten-är det en bra idé att kontrollera att allt fungerar. Öppna Arduino IDE och välj Arkiv> Exempel> Ethernet> Webbserver. Detta läser in en enkel skiss som visar data som samlats in från de analoga ingångarna i en webbläsare. Men ladda inte upp den ännu, den behöver en liten ändring.

Du måste ange IP -adressen för Ethernet -skölden - vilket görs inuti skissen. Detta är enkelt, gå till raden:

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

Och ändra den för att matcha din egen inställning. Till exempel, i vårt hem är routerns IP -adress 10.1.1.1, skrivaren är 10.1.1.50 och alla datorer är under … 50. Så jag kommer att ställa in min skärm -IP till 10.1.1.77 genom att ändra linjen till:

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

Men om du bara har en sköld, låt den vara. Det kan finnas den mycket, mycket, statistiskt sällsynta chansen att ha en MAC -adress som är densamma som din befintliga maskinvara, så det skulle vara en annan tid att ändra den.

Steg 3:

Bild
Bild

Men om du bara har en sköld, låt den vara. Det kan finnas den mycket, mycket, statistiskt sällsynta chansen att ha en MAC -adress som är densamma som din befintliga maskinvara, så det skulle vara en annan tid att ändra den.

När du har gjort dina ändringar, spara och ladda upp skissen. Öppna nu en webbläsare och navigera till IP -adressen du angav i skissen, och du bör presenteras med något som liknar bilden.

Vad händer?

Arduino har programmerats för att erbjuda en enkel webbsida med värdena uppmätta med de analoga ingångarna. Du kan uppdatera webbläsaren för att få uppdaterade värden. Vid denna tidpunkt - observera att Ethernet -sköldarna använder digitala stift 10 ~ 13, så du kan inte använda dem till något annat. Vissa Arduino Ethernet -sköldar kan också ha ett microSD -kortuttag, som också använder en annan digital pin - så kolla med dokumentationen för att ta reda på vilken.

Steg 4:

Men nu när vi kan se att Ethernet -skärmen fungerar kan vi gå vidare till något mer användbart. Låt oss dissekera föregående exempel på ett enkelt sätt och se hur vi kan distribuera och visa mer intressant data över nätverket. Som referens hanteras alla Ethernet-relaterade funktioner av Ethernet Arduino-biblioteket. Om du undersöker den tidigare skissen som vi just använde är avsnittet som kommer att vara av intresse:

för (int analogChannel = 0; analogChannel <6; analogChannel ++) {int sensorReading = analogRead (analogChannel); client.print ("analog ingång"); client.print (analogChannel); client.print ("är"); client.print (sensorReading); client.println (""); } client.println ("");

Förhoppningsvis bör denna del av skissen vara bekant - kom ihåg hur vi har använt serial.print (); tidigare när du skickade data till seriell bildskärmslåda? Nu kan vi göra samma sak, men att skicka data från vår Ethernet -skärm tillbaka till en webbläsare - med andra ord en mycket grundläggande typ av webbsida. Det finns dock något du kanske vill eller inte vill lära dig för att formatera utdata i ett läsbart format - HTML -kod. Jag är inte en webbplatsutvecklare (!) Så kommer inte att fördjupa mig i HTML för mycket.

Men om du vill servera snyggt formaterade webbsidor med din Arduino och så vidare, här skulle vara en bra början. För enkelhetens skull kommer följande två funktioner att vara de mest användbara:

client.print ("är");

Client.print (); tillåter oss att skicka text eller data tillbaka till webbsidan. Det fungerar på samma sätt som serial.print (), så inget nytt där. Du kan också ange datatypen på samma sätt som med serial.print (). Naturligtvis kan du också använda den för att skicka data tillbaka också. Den andra användbara raden är:

client.println ("");

som skickar HTML -koden tillbaka till webbläsaren som säger att den ska starta en ny rad. Den del som faktiskt orsakar vagnretur/ny linje är

som är en HTML -kod (eller "tagg") för en ny rad.

Så om du skapar mer detaljerade webbsidor kan du bara infoga andra HTML -taggar i client.print (); påstående. Om du vill lära dig mer om HTML -kommandon, här är en bra självstudieplats.

Slutligen - notera att skissen bara skickar data när den har begärts, det vill säga när den har fått en begäran från webbläsaren.

Steg 5: Få tillgång till din Arduino över internet

Få tillgång till din Arduino över internet
Få tillgång till din Arduino över internet

Än så länge är allt bra. Men vad händer om du vill komma åt din Arduino från det lokala nätverket?

Du behöver en statisk IP -adress - det vill säga den IP -adress som din internetleverantör tilldelar din anslutning måste vara densamma. Om du inte har en statisk IP, så länge du lämnar ditt modem/router permanent swiched på din IP bör inte ändras. Det är dock inte en optimal lösning.

Om din ISP inte alls kan erbjuda dig en statisk IP kan du fortfarande gå vidare med projektet genom att använda en organisation som erbjuder en dynamisk DNS. Dessa organisationer erbjuder dig ditt eget statiska IP -värdnamn (t.ex. mojo.monkeynuts.com) istället för ett nummer, håll koll på din ändrade IP -adress och länka det till det nya värdnamnet. Vad jag kan ta reda på måste ditt modem stödja (ha en inbyggd klient för …) dessa DDNS-tjänster.

Som ett exempel är två företag No-IP och DynDNS.com. Observera att jag inte har använt dessa två, de erbjuds bara som exempel. Nu, för att hitta din IP -adress … vanligtvis kan detta hittas genom att logga in på din routers administrationssida - det är vanligtvis 192.168.0.1 men kan vara annorlunda. Fråga din leverantör eller ISP om de levererade hårdvaran. I det här exemplet, om jag anger 10.1.1.1 i en webbläsare och efter att ha angett mitt modemadministrationslösenord, visas följande skärm enligt bilden.

Steg 6:

Bild
Bild

Det du letar efter är din WAN IP -adress, som du kan se på bilden ovan. För att hålla busarna borta har jag svartat ut en del av min adress.

Nästa sak att göra är att slå på port-forwarding. Detta berättar för routern var man ska omdirigera inkommande förfrågningar från omvärlden. När modemet tar emot en sådan begäran vill vi skicka denna begäran till portnumret på vår Ethernet -sköld. Använda:

EthernetServer -server (125);

funktion i vår skiss har satt portnumret till 125. Varje modems konfigurationsskärm kommer att se annorlunda ut, men som ett exempel här är en i bilden.

Steg 7:

Bild
Bild

Så du kan se från rad nummer ett i bilden ovan, inkommande portnummer har ställts in på 125 och Ethernet -skärmens IP -adress har ställts in till 10.1.1.77 - samma som i skissen.

Efter att ha sparat inställningarna är vi klara. Den externa adressen till min Ethernet -sköld kommer att vara WAN: 125, så för att komma åt Arduino skriver jag min WAN -adress med: 125 i slutet i webbläsaren på den fjärranslutna webbenheten, som kommer att kontakta den ensamma Ethernet -hårdvaran hemma.

Dessutom kan du behöva ändra modemets brandväggsinställningar så att port 125 kan vara "öppen" för inkommande förfrågningar. Vänligen se din modemdokumentation för mer information om hur du gör detta. Nu från i princip vilken Internet -ansluten enhet som helst i den fria världen kan jag ange mitt WAN- och portnummer i URL -fältet och få resultaten. Till exempel från en telefon när den är ansluten till Internet via LTE -mobildata.

Så i det här skedet kan du nu visa data på en enkel webbsida som skapats av din Arduino och komma åt den var som helst med obegränsad tillgång till Internet. Med din tidigare Arduino -kunskap kan du nu använda data från sensorer eller andra delar av en skiss och visa den för hämtning.

Steg 8: Visa sensordata på en webbsida

Visa sensordata på en webbsida
Visa sensordata på en webbsida

Som ett exempel på att visa sensordata på en webbsida, låt oss använda en billig och populär temperatur- och luftfuktighetssensor - DHT22. Du måste installera DHT22 Arduino -biblioteket som finns på denna sida. Om det här är första gången med DHT22, experimentera med exempelskissen som ingår i biblioteket så att du förstår hur det fungerar.

Anslut DHT22 med datapinnen till Arduino D2, Vin till 5V -stiftet och GND till … GND. Nu för vår skiss - att visa temperatur och luftfuktighet på en webbsida. Om du inte kan HTML kan du använda onlinetjänster som denna för att generera koden, som du sedan kan ändra för att använda i skissen. I exemplet nedan visas data om temperatur och luftfuktighet från DHT22 på en enkel webbsida:

#inkludera "SPI.h" #inkludera "Ethernet.h"

// för DHT22 -sensor

#inkludera "DHT.h" #define DHTPIN 2 #define DHTTYPE DHT22

// Ange en MAC -adress och IP -adress för din handkontroll nedan.

// IP -adressen beror på ditt lokala nätverk: byte mac = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED}; IPAddress ip (10, 1, 1, 77);

// Initiera Ethernet -serverbiblioteket

// med IP -adressen och porten du vill använda // (port 80 är standard för HTTP): EthernetServer -server (125); DHT dht (DHTPIN, DHTTYPE);

void setup ()

{dht.begin (); // Öppna seriell kommunikation och vänta på att porten öppnas: Serial.begin (9600); medan (! Seriell) {; // vänta på att seriell port ska anslutas. Behövs endast för Leonardo} // starta Ethernet -anslutningen och servern: Ethernet.begin (mac, ip); server.begin (); Serial.print ("servern är på"); Serial.println (Ethernet.localIP ()); }

void loop ()

{// lyssna efter inkommande klienter EthernetClient -klient = server.available (); if (klient) {Serial.println ("ny klient"); // en http -begäran slutar med en tom rad boolean currentLineIsBlank = true; medan (client.connected ()) {if (client.available ()) {char c = client.read (); Serial.write (c); // om du har kommit till slutet av raden (fått en ny rad // tecken) och raden är tom har http -begäran slutat, // så att du kan skicka ett svar om (c == 'n' && currentLineIsBlank) {// skicka en standard http -svarsrubrik client.println ("HTTP/1.1 200 OK"); client.println ("Innehållstyp: text/html"); client.println ("Anslutning: stäng"); // anslutningen stängs efter att svaret client.println ("Refresh: 30") har slutförts; // uppdatera sidan automatiskt var 30: e sekund client.println (); client.println ("");

client.println ("");

// få data från DHT22 -sensorn

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

// härifrån kan vi ange vår egen HTML -kod för att skapa webbsidan

client.print ( Office Weather

Kontorstemperatur - );

client.print (t);

client.print ( grader Celsius

);

client.print ("

Luftfuktighet - );

client.print (h);

client.print ( procent

);

client.print ("

Sidan uppdateras var 30: e sekund <

. );

ha sönder;

} om (c == 'n') {// du startar en ny rad currentLineIsBlank = true; } annars om (c! = 'r') {// du har fått ett tecken på den aktuella raden currentLineIsBlank = false; }}}} // ge webbläsaren tid att ta emot datafördröjningen (1); // stäng anslutningen: client.stop (); Serial.println ("klient frånkopplad"); }}

Det är en modifiering av IDE: s webbservers exempelskiss som vi använde tidigare - med några få ändringar. Först uppdateras webbsidan automatiskt var 30: e sekund - den här parametern ställs in på raden:

client.println ("Uppdatera: 30"); // uppdatera sidan automatiskt var 30: e sekund

… och den anpassade HTML för vår webbsida börjar under raden:

// härifrån kan vi ange vår egen HTML -kod för att skapa webbsidan

Du kan sedan helt enkelt infoga erforderlig HTML inuti client.print () -funktionerna för att skapa den layout du behöver. Slutligen - här är ett exempel på skärmdump av exempelskissen på jobbet.

Så där har du det, ett annat användbart sätt att få din Arduino att interagera med omvärlden. Detta inlägg kommer till dig av pmdway.com - allt för tillverkare och elektronikentusiaster, med gratis leverans över hela världen.

Rekommenderad: