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
1 Reactie
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