Cet article montre comment créer un serveur Web Ethernet Arduino qui contrôle un relais connecté à une lampe.
Vous pouvez accéder à votre serveur Web avec n’importe quel appareil doté d’un navigateur et connecté au même réseau.

Ressources recommandées :
Si vous aimez les projets Arduino et que vous souhaitez en construire davantage, je vous recommande de suivre mon cours Arduino Step-by-step Projects – Build 25 Projects.

Remarque : si vous n’êtes pas à l’aise avec la tension secteur, mais que vous voulez quand même essayer de faire le projet, vous pouvez remplacer le module de relais par une LED, par exemple. Le code et les schémas sont très similaires.
Blindage Ethernet
Le blindage Ethernet Arduino connecte votre Arduino à Internet de manière simple. Montez simplement ce module sur votre carte Arduino, connectez-le à votre réseau avec un câble RJ45 et suivez quelques étapes simples pour commencer à contrôler vos projets via le Web.
Noter: vous devez connecter un câble Ethernet de votre routeur à votre blindage Ethernet comme indiqué dans la figure suivante.

Utilisation des broches
Lorsque l’Arduino est connecté à un blindage Ethernet, vous ne pouvez pas utiliser les broches numériques de 10 à 13, car elles sont utilisées pour établir une communication entre l’Arduino et le blindage Ethernet.

Module relais
Un relais est un interrupteur à commande électrique. Cela signifie qu’il peut être allumé ou éteint, en laissant passer ou non le courant. Le module relais est celui de la figure ci-dessous.

Ce module de relais particulier est livré avec deux relais (ces cubes bleus).
Concernant la tension secteur, les relais ont 3 connexions possibles :

- COM: broche commune
- NON: normalement ouvert – il n’y a pas de contact entre la broche commune et la broche normalement ouverte. Ainsi, lorsque vous déclenchez le relais, il se connecte à la broche COM et l’alimentation est fournie à la charge (une lampe, dans notre cas).
- NC: normalement fermé – il y a contact entre la broche commune et la broche normalement fermée. Il y a toujours contact entre les broches COM et NC, même lorsque le relais est éteint. Lorsque vous déclenchez le relais, le circuit est ouvert et aucune alimentation n’est fournie à la charge.
Concernant ce projet, il est préférable d’utiliser un circuit normalement ouvert, parce que nous voulons allumer la lampe de temps en temps. Lisez ce tutoriel pour en savoir plus sur l’utilisation d’un module relais avec la carte Arduino.
Les connexions entre le relais et l’Arduino sont vraiment simples :

- Terre: va au sol
- EN 1: commande le premier relais. Doit être connecté à une broche numérique Arduino
- EN 2: commande le second relais. Doit être connecté à une broche numérique Arduino
- VCC: passe au 5V
Pièces nécessaires
Voici une liste complète des composants dont vous avez besoin pour ce projet :
Vous pouvez utiliser les liens précédents ou accéder directement à MakerAdvisor.com/tools pour trouver toutes les pièces pour vos projets au meilleur prix !
Code
Copiez le code suivant sur votre IDE Arduino et avant de le télécharger sur votre carte Arduino, lisez le « Configuration de votre réseau » section ci-dessous.
/*
* Rui Santos
* Complete Project Details https://www.raspberryme.com
*/
#include <SPI.h>
#include <Ethernet.h>
// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1, 111);
// Initialize the Ethernet server library
// with the IP address and port you want to use
// (port 80 is default for HTTP):
EthernetServer server(80);
// Relay state and pin
String relay1State = "Off";
const int relay = 7;
// Client variables
char linebuf[80];
int charcount=0;
void setup() {
// Relay module prepared
pinMode(relay, OUTPUT);
digitalWrite(relay, HIGH);
// Open serial communication at a baud rate of 9600
Serial.begin(9600);
// start the Ethernet connection and the server:
Ethernet.begin(mac, ip);
server.begin();
Serial.print("server is at ");
Serial.println(Ethernet.localIP());
}
// Display dashboard page with on/off button for relay
// It also print Temperature in C and F
void dashboardPage(EthernetClient &client) {
client.println("<!DOCTYPE HTML><html><head>");
client.println("<meta name=\"viewport\" content=\"width=device-width, initial-scale=1\"></head><body>");
client.println("<h3>Arduino Web Server - <a href=\"/\">Refresh</a></h3>");
// Generates buttons to control the relay
client.println("<h4>Relay 1 - State: " + relay1State + "</h4>");
// If relay is off, it shows the button to turn the output on
if(relay1State == "Off"){
client.println("<a href=\"/relay1on\"><button>ON</button></a>");
}
// If relay is on, it shows the button to turn the output off
else if(relay1State == "On"){
client.println("<a href=\"/relay1off\"><button>OFF</button></a>");
}
client.println("</body></html>");
}
void loop() {
// listen for incoming clients
EthernetClient client = server.available();
if (client) {
Serial.println("new client");
memset(linebuf,0,sizeof(linebuf));
charcount=0;
// an http request ends with a blank line
boolean currentLineIsBlank = true;
while (client.connected()) {
if (client.available()) {
char c = client.read();
//read char by char HTTP request
linebuf[charcount]=c;
if (charcount<sizeof(linebuf)-1) charcount++;
// if you've gotten to the end of the line (received a newline
// character) and the line is blank, the http request has ended,
// so you can send a reply
if (c == '\n' && currentLineIsBlank) {
dashboardPage(client);
break;
}
if (c == '\n') {
if (strstr(linebuf,"GET /relay1off") > 0){
digitalWrite(relay, HIGH);
relay1State = "Off";
}
else if (strstr(linebuf,"GET /relay1on") > 0){
digitalWrite(relay, LOW);
relay1State = "On";
}
// you're starting a new line
currentLineIsBlank = true;
memset(linebuf,0,sizeof(linebuf));
charcount=0;
}
else if (c != '\r') {
// you've gotten a character on the current line
currentLineIsBlank = false;
}
}
}
// give the web browser time to receive the data
delay(1);
// close the connection:
client.stop();
Serial.println("client disonnected");
}
}
Configuration de votre réseau
Jetez un œil à la configuration de l’extrait de code de votre réseau :
byte mac[] = {
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192,168,1,XXX);
Important: vous devrez peut-être remplacer cette variable surlignée en rouge par des valeurs appropriées adaptées à votre réseau, sinon votre Arduino n’établira pas de connexion avec votre réseau.
Remplacez la ligne suivante par une adresse IP disponible et adaptée à votre réseau :
IPAddress ip(X, X, X, X);
Dans mon cas, ma plage IP est 192.168.1.X et avec le logiciel Scanner IP en colère Je sais que l’IP 192.168.1.111 est disponible sur mon réseau, car il n’y a aucun appareil actif sur mon réseau avec exactement la même adresse IP :
IPAddress ip(192, 168, 1, 111);
Schémas
Câblez votre circuit conformément au schéma ci-dessous :

Manifestation
Votre serveur Web Arduino ressemble à la figure ci-dessous :

Voici une démonstration montrant ce que vous avez à la fin de ce projet :

Conclusion
Avec ce projet, vous avez construit un serveur Web Arduino qui active et désactive un relais.
Maintenant, vous pouvez utiliser ce projet pour contrôler n’importe quel appareil électronique que vous voulez.
Ce projet est une version simplifiée de l’un de mes projets dans les projets Arduino étape par étape. Si vous avez aimé ce projet, assurez-vous de consulter le cours qui comprend 23 projets Arduino.
Merci d’avoir lu,
Rui et Sara

