Uno R3 als webserver met Ethernet-schild

Hallo en welkom op onze blog post vandaag.

 

Vandaag presenteren we u onze Ethernet Shield W5100 Voordat. Het schild kan eenvoudig worden aangesloten op onze microcontroller, compatibel met Arduino Uno R3, en breidt de microcontroller uit met een Ethernet-interface en een SD-kaartlezer.

De achtergrond was het verzoek van een kennis die een enkele analoge sensor monitort door middel van een microcontroller, compatibel met Arduino Uno R3. Hij wil het nu opvragen via een webinterface. Hij wil echter geen ESP en een verbinding via WLAN gebruiken, maar de Microcontroller, compatibel met Arduino UnoSluit R3 aan op zijn netwerk via LAN-kabel omdat Het is te onbetrouwbaar en produceert te veel EM-emissies.

 

1. Testopstelling

Voor ons experiment hebben we, naast het W5100 Ethernet Shield, een Microcontroller, compatibel met Arduino Uno R3en elke analoge sensor. In dit voorbeeld gebruik ik een eenvoudige Helderheidssensor die kan worden vervangen door elke analoge sensor.

We plaatsen het Ethernet-schild zorgvuldig op de Microcontroller, compatibel met Arduino UnoR3. We verbinden de helderheidssensor als volgt:

 

Uno R3

Helderheidssensor

5v

Midden

Gnd

-

A0

S

 

2. Programmering

De programmering van de Microcontroller, compatibel met Arduino UnoDankzij de Arduino bibliotheken is R3 bijna net zo eenvoudig als de ESP-modules.

We hebben alleen de bibliotheken nodig. Spi.h en Ethernet.h, omdat de IDE ermee geïnstalleerd kan worden.

Handig vinden we een werkend voorbeeld onder 'Bestand' -> 'Voorbeelden' -> "Ethernet" -> "WebServer" die we slechts iets hoeven aan te passen.

Omdat we DHCP willen gebruiken indien beschikbaar, vervangen we de regel "Ethernet.begin(mac, ip);" door de volgende code:

 

 

  Als (Ethernet.Beginnen(Mac) == 0) {     Seriële.println('Kan Ethernet niet configureren met DHCP');     probeer samen te komen met IP-adres in plaats van DHCP:     Ethernet.Beginnen(Mac, Ip);   Server.Beginnen();   Seriële.Afdrukken("server is op ");   Seriële.println(Ethernet.localIP());   }

Aangezien we slechts één waarde in de "void loop( moeten produceren) kunnen we de lus "voor" vervangen door:

 

            Int sensorLezen = analoogLezen(0);             Client.Afdrukken("analoge ingang");             Client.Afdrukken("0");             Client.Afdrukken(" is ");             Client.Afdrukken(sensorLezen);             Client.println("<br &>");

De volledige code ziet er als volgt uit:

 

 

/*
 Webserver

 Een eenvoudige webserver die de waarde van de analoge invoerpins weergeeft.
 met behulp van een Arduino Wiznet Ethernet-schild.

 Circuit:
 * Ethernet-schild bevestigd aan pinnen 10, 11, 12, 13
 * Analoge ingangen bevestigd aan pinnen A0 tot en met A5 (optioneel)

 gemaakt 18 dec 2009
 door David A. Mellis
 gewijzigd 9 april 2012
 door Tom Igoe
 gewijzigd op 2 september 2015
 door Arturo Guadalupi

 */

#include <Spi.H>
#include <Ethernet.H>

Voer hieronder een MAC-adres en IP-adres in voor uw controller.
Het IP-adres is afhankelijk van uw lokale netwerk:
Byte Mac[] = {   0xDE 0xDE, 0xAD 0xAD, 0xBE 0xBE, 0xEF 0xEF, 0xFE, 0xED
};
Ipaddress Ip(192, 168, 168, 51);

De Ethernet-serverbibliotheek initialiseren
met het IP-adres en de poort die u wilt gebruiken
(poort 80 is standaard voor HTTP):
EthernetServer Server(80);

Void Setup() {   Open seriële communicatie en wacht tot de poort is geopend:   Seriële.Beginnen(9600);      start de Ethernet-verbinding en de server:   Als (Ethernet.Beginnen(Mac) == 0) {     Seriële.println('Kan Ethernet niet configureren met DHCP');     probeer samen te komen met IP-adres in plaats van DHCP:     Ethernet.Beginnen(Mac, Ip);   Server.Beginnen();   Seriële.Afdrukken("server is op ");   Seriële.println(Ethernet.localIP());   }
}


Void Lus() {   lijsten voor binnenkomende klanten   Ethernetclient Client = Server.Beschikbaar();   Als (Client) {     Seriële.println("nieuwe klant");     een http-aanvraag eindigt met een lege regel     Booleaanse currentLineIsBlank = Waar;     Terwijl (Client.Aangesloten()) {       Als (Client.Beschikbaar()) {         Char C = Client.Lezen();         Seriële.Schrijven(C);         als u aan het einde van de regel bent gekomen (u een nieuwe regel hebt ontvangen         teken) en de regel is leeg, het http-verzoek is beëindigd,         zodat u een antwoord sturen         Als (C == 'n' && currentLineIsBlank) {           een standaardhttp-antwoordkop verzenden           Client.println("HTTP/1.1 200 OK");           Client.println("Inhoudstype: tekst/html");           Client.println("Verbinding: sluiten");  de verbinding wordt gesloten na voltooiing van het antwoord           Client.println("Vernieuwen: 5");  de pagina om de 5 seconden automatisch vernieuwen           Client.println();           Client.println("<! DOCTYPE HTML>");           Client.println("<html>");           de waarde van elke analoge invoerpen uitvoer             Int sensorLezen = analoogLezen(0);             Client.Afdrukken("analoge ingang");             Client.Afdrukken("0");             Client.Afdrukken(" is ");             Client.Afdrukken(sensorLezen);             Client.println("<br &>");           //}           Client.println("</html>");           Breken;         }         Als (C == 'n') {           je begint een nieuwe lijn           currentLineIsBlank = Waar;         } Anders Als (C != 'A'r') {           je hebt een personage gekregen op de huidige lijn           currentLineIsBlank = Valse;         }       }     }     Geef de webbrowser de tijd om de gegevens te ontvangen     Vertraging(1);     Sluit de verbinding:     Client.Stoppen();     Seriële.println("client losgekoppeld");   }
}

 

3. 

We openen nu het IP-adres in onze webbrowser en zien de waarde van de sensor. Het display wordt elke 5 seconden bijgewerkt.

 

 

Het is dus heel goed mogelijk om je sensoren aan te sluiten op je thuisnetwerk zonder ESP en zonder Wlan.

En als je dat niet doet. Microcontroller, compatibel met Arduino UnoR3 heeft: we zullen u binnenkort presenteren in de blog verdere modules waarmee u uw microcontroller met een LAN-kabel in uw netwerk integreren.

Ik wens iedereen veel plezier sleutelen, en afscheid te nemen tot de volgende keer.

De jouwe Markus Neumann

 

Für arduinoProjekte für anfängerSensoren

1 Kommentar

Timo

Timo

Guten Abend,

wie kann ich die Werte mit einem zweiten Arduino auf dem Seriellen monitor auslesen. Also auch mit einem Ethernetshield. Finde leider kein brauchbares Beispiel im Netz

Einen Kommentar hinterlassen

Alle Kommentare werden vor der Veröffentlichung moderiert

Aanbevolen blog berichten

  1. Installeer ESP32 nu van de raad van bestuur
  2. Lüftersteuerung Raspberry Pi
  3. Arduino IDE - Programmieren für Einsteiger - Teil 1
  4. ESP32 - das Multitalent
  5. OTA - Over the Air - ESP Programmeren via Wi-Fi