truc2geek

2014/09/09

Arduino et shield Ethernet : serveur web

Filed under: Arduino, Informatique, Programmation — Étiquettes : , , , — truc2geek @ 02:33

Vous avez une carte Arduino, et vous aimez ça.
Vous avez aussi un shield Ethernet, qui traîne dans un coin. Soudainement, vous avez une idée pour l’utiliser.
Quel hasard, moi pareil! Je vais expliquer pourquoi et comment, dans mon cas, je vais l’utiliser.

contexte

Ce projet est en lien avec mes articles « Arduino : gérer des paramètres », pour deux raisons :

  • d’abord, je vais utiliser mon code de gestion des paramètres
  • mais surtout, j’ai besoin d’afficher des données pour débugger l’application TesterSerieV1.3j

Je m’explique :
L’application Arduino TesterSerie V1.3j, en cours de dev, se comporte différemment selon si je lui envoie la même donnée :

  • via le moniteur série de l’IDE Arduino
  • ou via mon application Python Serial-01

Donc, j’ai besoin de vérifier ce qui se passe exactement, du côté de l’application Arduino, quand j’envoie des données par le port série.
Je veux simplement afficher la valeur de certaines variables.
L’idée, c’est de connecter l’Arduino à mon réseau, et visualiser les données dans le navigateur Internet.
L’Arduino sera donc utilisé comme serveur web (en local).

Le shield Ethernet est pourvu d’un emplacement pour carte SD, mais on ne l’utilise pas pour l’instant.

Un superbe schéma :

Scan_03.png

1e version, Ethernet V0.01 : une page web statique

le code

J’ai presque repris tel quel le code d’exemple nommé « WebServer », fourni avec l’IDE Arduino.
01.png

Mais je l’ai intégré dans l’application TesterSerie V1.3i, et le résultat est nommé Ethernet_V0_01.

Deux bibliothèques à importer :

02.png

De nouvelles variables globales, et initialiser le serveux web dans la fonction setup() :

03.png

On ajoute le bloc de code ci-dessous dans la fonction loop() :

04.png

côté Freebox

On peut soit attriber une adrese IP à l’Arduino dans le code, soit laisser le routeur (la Freebox, dans mon cas) attribuer
lui-même une adresse IP : pour cela il suffit de donner seulement l’adresse mac quand on utilise « Ethernet.begin() ».

C’est le DHCP, et le routeur doit être configuré (chez moi, je n’ai pas dû changer les paramètres) :
09.png

10.png

test

On envoie le code dans l’Arduino, on ouvre le moniteur série :

05.png

On copie-colle cette adresse IP dans un nouvel onglet du navigateur Internet :
06.png

On valide, voici le résultat dans le moniteur série :

07.png

et dans le navigateur :

08.png

Voici le lien vers Ethernet V0.01.

2e version, Ethernet V0.02 : une page web dynamique

le code

On va utiliser un tableau de String, qui aura une portée globale dans l’application Arduino, pour stocker les informations les
plus importantes. Ces données seront affichées sur la page web.

Dans les variables globales, on déclare donc un tableau de String contenant 6 éléments (index de 0 à 5), et un int pour connaître
à tout instant le nombre de valeurs réellement stockées.
11.png

Deux nouvelles fonctions sont nécessaires :

  • la 1e, TabDebugIni(), initialise les 6 valeurs
  • la 2e, TabDebugAjout(), appelle la 1e si on a déjà 6 valeurs stockées, et ensuite stocke la valeur reçue en argument

12.png

Dans la fonction setup(), on appelle la 1e fonction :
13.png

On va stocker une seule chaîne pour chaque test.
Dans la 1e partie de la fonction loop(), juste avant de transmettre la chaîne reçue à la fonction lireChaineRecue() :
14.png

Modifier la 2e partie de la fonction loop(), pour afficher la requête reçue dans le moniteur série :
18.png

test

On envoie cette 2e version à l’Arduino, on ouvre le moniteur série, tout va bien :
19.png

Côté navigateur, on actualise la page, résultat dans le moniteur série :

20.png

La page actualisée :

21.png

On entre une chaîne de test, dans le moniteur série, par exemple celle permettant d’afficher tous les paramètres :
22.png

23.png

On actualise la page :
24.png

Nouveau test, avec <Test;f> :
25.png

27.png

26.png

Résultat : on a bien les deux valeurs dans le tableau.

Donc on a maintenant une fonctionnalité supplémentaire, qui permet d’aider à débugger.
On aurait sûrement pu trouver une manière plus simple, mais ça fait plaisir d’utiliser ce fameux shield Ethernet.

A noter qu’on a limité à 6 le nombre de chaînes stockées dans tabDebug, ce sera peut-être insuffisant dans certains cas.
Comme les variables du type String occupent beaucoup de place en mémoire, il faudra peut-être utiliser plutôt des tableaux
de char si on veut stocker plus de valeurs…

En tout cas, on va pouvoir utiliser cette solution pour le dev de l’application Python TesterSerie V1.3j.

Voici le lien vers le code de cette version, Ethernet V0.02.

Advertisements

Laisser un commentaire »

Aucun commentaire pour l’instant.

RSS feed for comments on this post. TrackBack URI

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s

Créez un site Web ou un blog gratuitement sur WordPress.com.

%d blogueurs aiment cette page :