Créez un serveur Web avec Arduino! – Serveur d’impression
La dernière fois, nous avons affiché les données de luminosité du capteur de lumière à l'aide d'une entrée analogique sur l'Arduino. Maintenant, nous savons comment traiter les entrées et les sorties avec l’Arduino! Aujourd’hui, je voudrais aller plus loin et connecter l’Arduino à un réseau. En activant les capacités réseau sur l’Arduino, les possibilités du projet s’ouvrent. Malgré sa petite taille, il peut devenir un serveur Web! Cette fois, j’aimerais créer un programme qui transforme l’Arduino en serveur Web à l’aide d’un module appelé bouclier Ethernet. Cela nous permettra de connecter un câble LAN et d'activer la mise en réseau sur l'Arduino.
Sommaire
Que pouvons-nous faire lorsqu'un capteur de lumière est connecté à un réseau?
La dernière fois, j’avais expliqué que si le capteur de lumière était placé dans un espace sombre, sa résistance augmentait, et s’il était placé dans un endroit lumineux, la résistance diminuait.
Si un capteur de lumière est connecté à un réseau, vous pouvez transmettre les mesures du capteur de lumière sur le réseau! En intégrant ce serveur Web Arduino à un programme PHP ou Ruby, il devient possible de développer des programmes simples qui mesurent la durée de la journée pour chaque jour ou qui déterminent si une personne est toujours au bureau en fonction de l'éclairage de bureau ou des robots de programme qui interagissent avec l'environnement. API Twitter pour tweeter régulièrement la luminosité actuelle.
La recette électronique du jour
Qu'est-ce qu'un module Arduino Shield?
Il existe de nombreux modules appelés blindages pour Arduino, qui peuvent être utilisés pour étendre facilement l'ensemble des fonctionnalités disponibles. Outre le bouclier Ethernet que nous utiliserons aujourd’hui, il existe un accéléromètre ainsi que de nombreux autres boucliers que vous pouvez utiliser sans avoir à construire un circuit à partir de zéro.
Recherche Google pour "bouclier Arduino"
Aujourd'hui, nous allons utiliser Ethernet Shield R3. Le bouclier Ethernet vous permet de connecter votre Arduino à un réseau. Plusieurs exemples utilisant le bouclier Ethernet inclus dans le carnet de croquis Arduino. Nous allons donc les utiliser pour faire fonctionner Arduino en tant que serveur.
Préparer le bouclier Ethernet
Commençons par connecter le blindage Ethernet à l’Arduino.
1. Déballage
(Les produits Arduino sont toujours dans une boîte si cool…)
Cela ressemble à cela une fois que cela a été déballé.
2. Connectez-vous à l'Arduino
Connectons l’Arduino.
Placez le corps de l’Arduino sur le fond et connectez les pieds du blindage Ethernet aux emplacements appropriés.
Nous avons maintenant terminé de connecter l’unité Arduino au bouclier Ethernet. Vous pouvez avoir des problèmes de connexion si vous pliez l’un des pieds lorsque vous retirez ou insérez le bouclier. Soyez donc prudent.
3. Ouvrez le programme exemple
Nous allons maintenant entrer dans le développement du programme. Le développement n’est pas difficile. Pour cela, nous allons utiliser le programme exemple WebServer pour la section Ethernet du carnet de croquis.
[File]-[Examples]-[Ethernet]-[WebServer]
4. Modifier le programme
Ceci est un exemple de programme qui nous permet d’utiliser l’Arduino en tant que serveur. Une fois que nous aurons accédé au serveur Arduino, nous trouverons les données d’entrée des broches analogiques affichées en HTML.
#comprendre
#comprendre
octet mac[] =
0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED; // Spécifie l'adresse MAC qui se trouve sur le bouclier Ethernet
IPAddress ip (192,168,0,177); // Spécifiez l'adresse IP à attribuer au serveur Arduino
Serveur EthernetServer (80); // Spécifiez le port que le serveur utilisera (puisqu'il s'agira de HTTP, vous pouvez le laisser à 80)
void setup()
// Ouvrez les communications série et attendez que le port s'ouvre:
Serial.begin (9600);
while (! Série)
; // attend que le port série se connecte. Nécessaire pour Leonardo seulement
Ethernet.begin (mac, ip); // Nous essayons ici de nous connecter via un bouclier Ethernet
server.begin ();
Serial.print ("le serveur est à");
Serial.println (Ethernet.localIP ());
boucle vide () {
Client EthernetClient = server.available (); // Surveiller s'il existe une connexion externe au serveur
si (client) {
Serial.println ("nouveau client");
// une demande http se termine par une ligne vide
boolean currentLineIsBlank = true;
while (client.connected ())
if (client.available ())
char c = client.read ();
Serial.write (c);
// si vous êtes arrivé au bout de la ligne (reçu une nouvelle ligne
// caractère) et la ligne est vide, la requête http est terminée,
// afin que vous puissiez envoyer une réponse
if (c == 'n' & amp; & amp; amp; currentLineIsBlank)
// envoie un en-tête de réponse http standard
client.println ("HTTP / 1.1 200 OK");
client.println ("Content-Type: text / html");
client.println ("Connection: close"); // la connexion sera fermée après l'achèvement de la réponse
client.println ("Refresh: 5"); // actualise la page automatiquement toutes les 5 secondes
client.println ();
client.println ("");
client.println ("");
// affiche la valeur de chaque broche d'entrée analogique
pour (int analogChannel = 0; analogChannel & amp; lt; 6; analogChannel ++)
int sensorReading = analogRead (analogChannel);
client.print ("entrée analogique");
client.print (analogChannel);
client.print ("est");
client.print (sensorReading);
client.println ("");
client.println ("");
Pause;
si (c == 'n')
// tu commences une nouvelle ligne
currentLineIsBlank = true;
sinon si (c! = 'r')
// vous avez un personnage sur la ligne en cours
currentLineIsBlank = false;
// donne le temps au navigateur Web pour recevoir les données
retarder (1);
// ferme la connexion:
client.stop ();
Serial.println ("client déconnecté");
}
}
1 2 3 4 5 6 sept 8 9 dix 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
#comprendre #comprendre octet Mac[[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED ; // Spécifie l'adresse MAC qui se trouve sur le bouclier Ethernet Adresse IP ip( 192,168,0,177); // Spécifiez l'adresse IP à attribuer au serveur Arduino EthernetServer serveur(80); // Spécifiez le port que le serveur utilisera (puisqu'il s'agira de HTTP, vous pouvez le laisser à 80) vide installer() // Ouvrez les communications série et attendez que le port s'ouvre: En série.commencer(9600); tandis que (!En série) ; // attend que le port série se connecte. Nécessaire pour Leonardo seulement
Ethernet.commencer(Mac, ip); // Nous essayons ici de nous connecter via un bouclier Ethernet serveur.commencer(); En série.impression("le serveur est à"); En série.imprimer(Ethernet.localIP());
vide boucle() { EthernetClient client = serveur.disponible(); // Surveiller s'il existe une connexion externe au serveur si (client) { En série.imprimer("Nouvelle cliente"); // une demande http se termine par une ligne vide booléen currentLineIsBlank = vrai; tandis que (client.lié()) si (client.disponible()) carboniser c = client.lis(); En série.écrire(c); // si vous êtes arrivé au bout de la ligne (reçu une nouvelle ligne // caractère) et la ligne est vide, la requête http est terminée, // afin que vous puissiez envoyer une réponse si (c == 'n' Etampli;ampli;Etampli;ampli; currentLineIsBlank) // envoie un en-tête de réponse http standard client.imprimer("HTTP / 1.1 200 OK"); client.imprimer("Content-Type: text / html"); client.imprimer("Connexion: proche"); // la connexion sera fermée après l'achèvement de la réponse client.imprimer("Actualiser: 5"); // actualise la page automatiquement toutes les 5 secondes client.imprimer(); client.imprimer(""); client.imprimer(""); // affiche la valeur de chaque broche d'entrée analogique pour (int canal analogique = 0; canal analogique Etampli;lt; 6; canal analogique++) int lecture de capteur = analogiqueRead(canal analogique); client.impression("entrée analogique"); client.impression(canal analogique); client.impression(" est "); client.impression(lecture de capteur); client.imprimer("");
client.imprimer(""); Pause;
si (c == 'n') // tu commences une nouvelle ligne currentLineIsBlank = vrai;
autre si (c ! = 'r') // vous avez un personnage sur la ligne en cours currentLineIsBlank = faux;
// donne le temps au navigateur Web pour recevoir les données retard(1); // ferme la connexion: client.Arrêtez(); En série.imprimer("client déconnecté"); } } |
Il existe deux endroits où vous devez modifier le programme:
Adresse Mac
Une adresse MAC est comme un numéro de produit unique qui diffère selon les composants matériels. L’adresse MAC inscrite sur le bouclier Ethernet que nous utilisons aujourd’hui doit être écrite sur le bouclier lui-même ou sur la boîte dans laquelle elle est entrée. Consultez-le et modifiez le code, en préfixant l’adresse «0x».
Ici, il est écrit à l’arrière du bouclier Ethernet.
adresse IP
Définissez l'adresse IP en fonction de la configuration réseau de l'ordinateur actuel que vous utilisez. Il existe généralement un routeur lorsque vous utilisez un réseau à domicile. Dans ce cas, vous pouvez connaître l'adresse IP de l'ordinateur à l'aide de la méthode ci-dessous, puis attribuer une adresse IP à l'Arduino en en choisissant une qui ne se heurte pas à d'autres appareils sur le réseau. Sur un Mac, vous pouvez vérifier la [Network] section de la [System Preferences]ou entrez «ifconfig» dans le champ [Terminal].
Sous Windows, ouvrez un [command prompt] et entrez “ipconfig”.
Aujourd'hui, l'ordinateur et Arduino sont connectés au routeur par un câble LAN, comme indiqué ci-dessous. Il peut y avoir différentes différences dans les configurations réseau, alors assurez-vous de vérifier votre propre configuration d’environnement.
Enfin, le programme est en cours d'exécution et le serveur fonctionne!
Une fois que vous avez configuré les adresses MAC et IP, compilons le programme et téléchargez-le.
Une fois que vous avez chargé le programme sur votre unité Arduino, allons de l'avant et entrez l'URL en fonction de l'adresse IP que vous avez configurée précédemment dans votre navigateur. Comme je l’ai réglé sur 192.168.0.177, j’ai saisi «http://192.168.0.177/» dans le navigateur. Et les valeurs de l'entrée analogique ont été affichées.
Ce programme est conçu pour actualiser le navigateur toutes les 5 secondes et afficher la valeur de l’entrée analogique, mais comme il n’ya rien d’autre connecté à l’Arduino, la valeur d’entrée augmente et diminue. En reliant ici le circuit au capteur d'entrée de lumière que nous avons créé la dernière fois, nous pouvons surveiller les données du capteur de lumière à chaque fois que nous accédons au serveur.
Voici le circuit avec l'entrée analogique que nous avons faite la dernière fois
Une fois le circuit terminé, nous le connectons à l'Arduino. Nous ne voulons utiliser que l'entrée analogique # 0 cette fois-ci, alors modifions notre programme. Dans la partie du code commençant par «for» autour de la ligne 36, la valeur d'entrée est surveillée en spécifiant le numéro d'entrée analogique. Ce bloc commençant par «for» est appelé «for statement» et est utilisé chaque fois que nous voulons évaluer quelque chose à plusieurs reprises.
for (valeur initiale; condition de bouclage; action effectuée après chaque boucle) que fait-on si la condition est vraie
Ici, il s'agit d'obtenir les valeurs d'entrée en boucle dans l'ordre des canaux analogiques 0 à 5. Aujourd’hui, nous ne nous intéressons qu’au # 0, nous pouvons donc supprimer la boucle «for» ou la terminer après un cycle.
// Exécute le contenu de la boucle lorsque la variable analogChannel (valeur initiale définie sur 0) est inférieure à 6. À la fin de chaque boucle, ajoutez 1 à analogChannel.
pour (int analogChannel = 0; analogChannel <6; analogChannel ++)
int sensorReading = analogRead (analogChannel);
client.print ("entrée analogique");
client.print (analogChannel);
client.print ("est");
client.print (sensorReading);
client.println ("
");
// Exécute le contenu de la boucle lorsque la variable analogChannel (valeur initiale définie sur 0) est inférieure à 6. À la fin de chaque boucle, ajoutez 1 à analogChannel. pour (int canal analogique = 0; canal analogique Etlt; 6; canal analogique++) int lecture de capteur = analogiqueRead(canal analogique); client.impression("entrée analogique"); client.impression(canal analogique); client.impression(" est "); client.impression(lecture de capteur); client.imprimer(" ");
|
Modèle 1: Puisque nous ne voulons que la valeur du canal 0, modifiez la condition de la boucle «pour»
pour (int analogChannel = 0; analogChannel <1; analogChannel ++)
int sensorReading = analogRead (analogChannel);
client.print ("entrée analogique");
client.print (analogChannel);
client.print ("est");
client.print (sensorReading);
client.println ("
");
pour (int canal analogique = 0; canal analogique Etlt; 1; canal analogique++) int lecture de capteur = analogiqueRead(canal analogique); client.impression("entrée analogique"); client.impression(canal analogique); client.impression(" est "); client.impression(lecture de capteur); client.imprimer(" ");
|
Modèle 2: écrivez le code sans indiquer le «pour»
int sensorReading = analogRead (0); // Spécifie 0 dans analogRead
client.print ("entrée analogique");
client.print (analogChannel);
client.print ("est");
client.print (sensorReading);
client.println ("
");
int lecture de capteur = analogiqueRead(0); // Spécifie 0 dans analogRead client.impression("entrée analogique"); client.impression(canal analogique); client.impression(" est "); client.impression(lecture de capteur); client.imprimer(" "); |
Modifiez le programme en utilisant l’un des deux modèles ci-dessus et lancez-le.
Maintenant, la valeur de luminosité du capteur de lumière est affichée sur le serveur. Après cela, vous pouvez exécuter un programme différent sur un PC séparé qui accède périodiquement au serveur, lit les données de luminosité et les utilise en tant qu'entrée. En utilisant ces «blindages» de module externe Arduino, vous pouvez vous rapprocher de ce que vous souhaitez créer plus tôt, sans avoir à créer un circuit à partir de zéro. La prochaine fois, nous essayerons de réaliser un projet encore plus pratique en utilisant Arduino et son bouclier Ethernet! Ne le manquez pas!
Commentaires
Laisser un commentaire