dimanche 1 mai 2011

Micro serveur web : Xweb32Lite






Introduction:

Le micro serveur Web Xweb32 Lite permet de piloter et de visualiser des variables à l'aide d'un simple navigateur Web.
Comme son nom l'indique, il est "lite" car il tourne uniquement avec un microcontrôleur ATMEGA32, l’utilisation d'images ne seras donc pas prisent en charge.




Les pages web à afficher sont entièrement paramétrables selon vos souhaits, il est même possible d'y intégrer du JavaScript puisque c'est un langage interprété du coté client (votre machine). Malgré sa simplicité, le Xweb32 Lite permet de générer 5 pages Web et possède un mode sécurisé (c'est quand même mieux qu'un inconnu ne prenne pas le contrôle du chauffage !) :
  • Page d'accueil avec possibilité d'y intégrer des variables, juste pour consultation.
  • La page d'administration qui permet de changer l'état des sorties (sauvegarder en EEprom)
  • Une page de redirection automatique sur la page d'accueil
  • Page de fin de session.
  • Page d'erreur 404 



La page ci dessus est une copie d'écran de la page d'accueil, on remarque la zone sous forme de tableau qui permet de visualiser :
  • 8 Entrées numériques
  • 8 Sorties numériques
  • 8 entrées analogiques
et pour finir la zone d'identification
Bien entendu je le répète, cette page est personnalisable car les variables avec un nom comme In6 ne sont pas très représentatives !.
Une autre copie d'écran un peu plus réaliste :




vous remarquerez ici la possibilité d'intervenir sur les sorties.
Sachez que le micro serveur peut aussi envoyer des e-mails, toujours pratique en cas de dépassement de valeurs, pour être plus précis il s'agit de report d'alarme. L'envoi de mail se fait à chaque reset du microcontrôleur, puis il est entièrement configurable puisque un petit emplacement vous est réservé pour écrire un petit morceau de programme...


Schémas et PCB


Dans un premier temps, nous allons aborder la réalisation du micro serveur seul, puis par la suite, je vous proposerez une petite platine destinée à recevoir le serveur à des fins expérimentales


Schéma électronique de la carte mère




On  remarque la présence de J10 et J11 qui servent à régler l'adresse  I2C du module NM7010a. La présence de L1 n'est pas obligatoire mais recommandée afin de diminuer le bruit du convertisseur Analogique numérique. La tension de 3V3 est générée grâce au régulateur LE33CZ. Comme les entrées du module NM7010a sont tolérantes à une tension de 5V, aucune précaution particulière n'est à mettre en place sur le bus I2C


Réglage de l'adresse esclave I2C du module NM7010a

J10
J11
Adresse I2C
Remarque
0
0
$0
0 = borne ouverte
1 = borne fermée
0
1
$40
1
0
$80
1
1
$C0


Pour ma part j'ai choisi l'adresse $80 en laissant J10 ouvert et J11 fermé. Sur le circuit imprimé, ces 2 connecteurs ne sont pas implantés, il s'agit en fait de faire un pont à la soudure.


Liste des composants


R1,R2 : 5,6 K
R3,R4,R5,R6 : 10K
C1,C2,C3,C4,C5 : 100 nF
C6 : 2,2 uF
Q1 : BC307AP ou équivalent 
U1 : ATMEGA32
U2 : Régulateur LE33CZ
U3 : Module NM7010a (Lextronic)
J1,J3,J3 : Barette sécable male pas 2,56 mm 8 points
J4 : Barette sécable male pas 2,56 mm 3 points

3- Circuits imprimés
Aucune difficulté majeure quand à la réalisation du circuit imprimé, il faudra juste être soigneux pour le percage des broches du module.
Attention : Ne pas percer les diametres 1 a l'endroit des connecteur J1,J2,J3,J4


Circuit imprimé

Implantation des composants
4 - Montage
Notez qu'il n'est pas indispensable de mettre le support du module NM7010a, dans ce cas, les composants R4,R5,R6 seront à montés sur la face cuivre du circuit imprimé et le module à souder en dernier afin de vérifier que la tension d'alimentation de 3v3 est correcte.
Commencer par insérer les straps, présent en rouge sur schéma d'implantation, puis souder le reste des composants excepté les connecteurs barrette.
Les connecteurs seront à souder à l'envers. Mettre une petite quantité de soudure sur la première pastille d'une rangée, mettre en place manuellement la barrette sans l'enfoncer et faite refondre la soudure afin de maintenir la barrette pour la suite de l'opération. Maintenant souder le reste des pastilles. C'était la partie difficile de l'assemblage :)
La platine est maintenant terminée. Remarquez que sur la photo C6 n'apparait pas (c'est la faute au prototypage !).

5 - Proposition de platine d'expérimentation
Maintenant que le micro serveur web et prêt à l'emploi, il est temps de le mettre en marche, mais avant de réaliser une carte avec des entrées optocouplées et des sorties sur relais pour commander votre chaudière et tous ce que vous voulez, je pense qu'une petite platine de test serais la bienvenue.
Je ne m'étendrai pas sur la réalisation de celle ci étant donné sa simplicité.
On dispose de J0 en tant que connecteur d'alimentation 5V puis :
  • 4 potentiomètres pour simuler les entrées analogiques
  • 8 interrupteurs DIP pour simuler les entrées numériques
  • 8 Leds pour afficher l'état des sorties






Configuration IP :


La première étape de la personnalisation passe par le paramétrage de l'adresse IP du Xweb32 Lite.Je ne m'étendrais pas sur la configuration par elle même, beaucoup de site traitent du sujet et n'hésitez pas à passer sur le forum. Ouvrez le fichier de la librairie du module NM7010a (NM7010a_lib.asm) et trouver le code suivant :
.equ NM7010_IP_3 = 192          ; Adresse IP Msb du module
.equ NM7010_IP_2 = 168          ; 
.equ NM7010_IP_1 = 0              ; 
.equ NM7010_IP_0 = 5              ; Adresse IP Lsb du module
C'est ici que vous attribuerez l'adresse IP du module. Si vous ne connaissez pas grand chose en configuration réseau. Quoi qu'il en soit la page des paramètres réseaux Windows vous fournira de précieuses informations.
Configurez ensuite le gateway (passerelle) et le masque de sous-réseau :
.equ NM7010_Gateway_3 = 192     ; Valeur Msb du gateway du module
.equ NM7010_Gateway_2 = 168     ; 
.equ NM7010_Gateway_1 = 0         ; 
.equ NM7010_Gateway_0 = 1         ; Valeur Lsb du gateway
.equ NM7010_Mask_3 = 255        ; Valeur Msb du masque reseau du module
.equ NM7010_Mask_2 = 255        ; 
.equ NM7010_Mask_1 = 255        ; 
.equ NM7010_Mask_0 = 0          ; Valeur Lsb du masque reseau
Pour finir, il faudra aussi choisir une adresse MAC, si vous ne connaissez pas le principe, je vous conseille de laisser la configuration d'origine. Attention toutefois, si plusieurs Xweb32 Lite sont connectés au réseau, de ne pas mettre les mêmes valeurs.
.equ NM7010_MAC_5 = 00          ; Valeur Msb de l'adresse MAC
.equ NM7010_MAC_4 = 10          ; 
.equ NM7010_MAC_3 = 11          ; 
.equ NM7010_MAC_2 = 12          ; 
.equ NM7010_MAC_1 = 13          ; 
.equ NM7010_MAC_0 = 14          ; Valeur Lsb de l'adresse MAC
Enregistrer les modifications et compiler de nouveau le programme.



Génération des pages HTML :


Nous voici dans le vif du sujet !. Comme je vous l'ai dit pendant la présentation de Xweb32 Lite, les pages web HTML sont entièrement paramétrables. Nous allons voir ici comment fonctionne le mécanisme de génération des pages ainsi que l'identification, dans le seul but personnaliser votre programme.
Pour vous aidez dans la compréhension, je vous conseille de travailler en parallèle sur le code HTML des pages Web qui sont fournies dans le package de téléchargement.
Tout d'abord nous avons à disposition 5 Pages :
  • La page de redirection :
    C'est une page vide qui contiens la redirection automatique sur la page d'index dans le cas ou l'adresse est tapée simplement, par exemple : http://192.168.0.5
  • La page d'erreur :Elle est affichée si on rentre un nom de page qui n'existe pas , ex : http://192.168.0.5/menu.htm

  • La page d'erreur d'identification :Cette page indique que la session active est terminée suite à un dépassement de temps ou qu'une personne d'autre c'est connectée sur la page d'administration après vous.
    Comment fonctionne le système de session ? :
    Afin de permettre un accès sécurité à la page d'administration, après vous avoir authentifié, Xweb32 Lite vous attribue un numéro de session unique qui sera invisible, mais renvoyé après chaque action sur la page d'administration. La session prend automatiquement fin après 60 secondes d'inactivité ou bien, il est usurpé par une autre personne qui se connecte avec les bons identifiants, puisque le système ne gère qu'une session active à la fois.

  • La page d'index :C'est la page d'accueil principale. Vous pourrez y intégrer une visualisation des données, cependant le visiteur n'aura aucun moyen de changer une quelconque sortie.
    C'est aussi ici que l'on retrouvera les 2 contrôles de type texte, l'un s'appelle Name et l'autre Pass. Ne modifier en aucun cas ce formulaire ni sa méthode d'envoi des données.

    Comment afficher les variables sur la page ? :
    Regardez bien le code source HTML de la page d'index, vous y trouverez la notation suivante dans le code HTML: %I1, %A5 ...
    C'est variables brutes seront remplacées par leurs valeurs logique respective lorsque Xweb32 Lite générera la page HTML

    Notation des Variables :
    • %I0...%I7 : Variable (input) qui sera remplacée par l'entrée logique du numéro correspondant (0 ou 1)
    • %O0...%O7 Variable (Output) qui sera remplacés par la sortie logique du numéro correspondant (0 ou 1)
    • %A0...%A7 Variable (Analogique) qui sera remplacée par la valeur analogique correspondante (0 à 1023)
    La personnalisation n'est pas très difficile comme vous pouvez le voir et vous pouvez même intégrer du JavaScript (langage interprété coté client) afin de rendre la lecture plus conviviale, par exemple au lieu d'écrire : chaudière = 1 ou 0, il est plus agréable de voir chaudière = marche ou arrêt, ou encore chaudière en marche...
    Je ne donnerais pas de cours de javascript, il y à quantité de site qui traite du sujet, néanmoins nous allons détailler l'exemple suivants :

    Soit un interrupteur positionné sur une barrière automatique, quand sont état logique = 1 elle est levée, et baissée dans le cas contraire. Il suffira d'insérer le script suivant après le texte : "Barrière : "
    script language="JavaScript">
    var barriere;
    barriere=%I0;
    if (barriere==1) {
    document.write("Levée");
    }
    else {
    document.write("Baissée");
    }
    Ici on déclare que l'on insère du javascriptOn crée une variable barriere
    On assigne à la valeur barriere, l'état 1 ou 0 qui sera passé par le programme assembleur
    On test si la valeur barriere = 1
    Dans ce cas on affiche "Levée" après le texte
    ;
    Ou alors (si la valeur de barriere est différente de 1)
    On affiche "Levée" après le texte
    J'ai personnalisé ma page d'index, comment je fais pour la mettre dans le code source assembleur  ? :
    Ouvrez le fichier asm Xweb32Lite.asm et trouver la chaîne de définition de constantes correspondantes aux pages HTML, par exemple la page de redirection :
    StrhttpRedirect:
    .db $48,$54,$54,$50,$2F,$31,$2E,$30,$20,$32,$30,$30,$20,....... etc

    Il s'agit en fait de la conversion en ascii du code HTML de la page redirection.htm ainsi que l'entête MIME qui correspond à :
    <META HTTP-EQUIV=REFRESH CONTENT="2; URL=/index.html">
    Bon vous me direz que ca ne vous avance toujours pas, ha si peut être, vous avez compris qu'il faut retranscrire le contenu du fichier html en ascii, mais ca va être horriblement long !
    Rassurez-vous, j'ai fait un petit logiciel qui va le faire à votre place :)

    Utilisation du logiciel Convert :
    Après avoir installé le logiciel convert et l'avoir lancé, copier le code source de la page HTML dans le cadre réservé à cet effet.
    Lancer la conversion, le contenu du cadre inférieur est automatiquement copié dans le presse papier.
    Supprimer et remplacer dans la déclaration de chaine correspondante.
    Le logiciel ajoute automatiquement les entetes MIME necessaires, ne vous etonnez pas si le le début de la conversion ne correspond pas a votre code HTML

    Nota : je vous conseille de supprimer tout les espaces et tabulations du code source HTML que génèrent les logiciels de création de site WEB, dans le seul but de diminuer la taille de la conversion (en effet chaque espace compte comme un caractère)
    Dans tout les cas la taille du code HTML ne devra jamais dépasser 8Ko. La taille de la conversion est indiquée dans le logiciel.
  • La page d'administration :C'est la page sur laquelle vous serez redirigé en cas de succès d'authentification.
    Cette fois ci, vous avez le pouvoir de changer l'état des sorties en cliquant sur les cases à cocher et en appuyant sur Rafraichir

    Le mécanisme pour afficher les variables est identique à celui vu dans la page d'index.
    Attention : La page d'administration possède un contrôle caché non visible sur un navigateur et à peine avec un logiciel d'édition de page web, il s'agit du control input avec la caractéristique "Hidden", c'est ici qu'est envoyé le numéro de session, ne l'effacer pas.

  • Configuration du mot de passe dans le fichier asm :
    Repérez la ligne suivante dans le fichier xweb32lite.asm :
    StrId: .db "sly535&pass=azerty&exe=Envoyer",$03,30      ; mettre en fin de chaine la longueur de la chaine
    Il faut impérativement laisser les mots suivants :
    &pass=
    &exe=Envoyer
    sly535 est mon identifiant
    azerty est mon mot de passe
    les 2 valeurs ci dessus étant bien évidement à remplacer par les votres !
    Pour finir il faut calculer manuellement la longueur totale de la chaine de caractère, dans mon exemple elle correspond à 30


    Configuration du mail:


    L'utilisation du mail n'a pas de caractère obligatoire, pour ceux ne souhaitant pas l'utiliser, un simple RET dans la routine SENDMAIL suffira.
    On trouve les paramètres de mail à la ligne 1826 du fichier xweb32lite.asm. on distingue dans un premier temps différentes chaines de caractères à compléter. Le simple commentaire sur chaque ligne vous permet d'entrer les informations nécessaires :
    StrSMTPFrom: .db "MAIL FROM:<sd@numericable.fr>",$0D,$0A,$03                               ; votre adresse mail pour valider l'inscription aupres du server smtp
    StrSMTPTo: .db "RCPT TO:<web@atmicroprog.com>",$0D,$0A,$03                                ; adresse du destinataire
    StrSMTPTo2: .db "TO: webmaster Atmicroprog <web@atmicroprog.com>",$0D,$0A,$03  ; adresse du destinataire encore une fois !
    StrSMTPObjet1: .db "SUBJECT: Reboot Xweb32 Lite - Site : Maison",$0D,$0A,$03             ; intitulé du message de reboot
    StrSMTPObjet2: .db "SUBJECT: Alarme Xweb32 Lite - Site : Maison",$0D,$0A,$03             ; intitulé du message de alarme
    On trouve ensuite la chaine strSMTPMess qui contiens le message par lui même avec un renvoi des valeurs. Même chose que pour la configuration des pages web, les valeurs commencants par  % serons remplacées par leurs équivalentes.
    Dernier point et non des moindres, il faudrat renseigner l'adresse ip correspondant au serveur smtp, car le module ne gére pas la résolution de nom (DNS).
    Ouvrez le fichier NM7010a.asm et completez les champs suivants :
    .equ NM7010_SMTP_3 = 82         ; Adresse IP Msb du server SMTP
    .equ NM7010_SMTP_2 = 216
    .equ NM7010_SMTP_1 = 111
    .equ NM7010_SMTP_0 = 2
    Vous me direz mais comment connaitre l'adresse ip du serveur de mail de votre fournisseur d'accès ? :
    Il existe plusieurs solutions, la plus simple étant de sniffer les paquets IP d'un message que vous aller vous envoyer à partir de votre logiciel de messagerie habituel, le tout grace a un programme spécialisé appelé Etheral. Pour ceux qui ne connaissent pas la manipulation je vous aiderez sur le forum.


    Programmation ATMEGA 32 :


    Effectuez comme d'habitude la compilation du fichier source sous AVR STUDIO et flasher avec le fichier .HEX obtenu.
    La programmation de l'ATMEGA32 pourra se faire sur une platine de dévellopement externe.
    Concernant les fusibles de programmation, respectez le schéma suivant :


    Copie d'ecran fusible Pony prog
    La vitesse d'horloge est paramétrée sur la source interne 8Mhz
    il faut aussi mettre le port JTAG en mode disable.
    La circuiterie de reset interne sera aussi piloté par le BOD interne à un seuil de 4 V.



    Mise en service et tests:



    Avant de commencer la mise en service, assurez vous d'avoir effectuer le check-list suivant pour le paramétrage de :
    • Configuration de l'adresse ip du module
    • Configuration de l'adresse de sous-réseaux
    • Configuration de la passerelle
    • Configuration de l'adresse ip du serveur de messagerie
    • Inscription du mot de l'identifiant et du mot de passe pour la session web
    • Programmation des pages web (attention au champs cachés)
    Mettre le montage sous tension et s'assurer que celui ci répond bien à son adresse ip à l'aide de la commande Ping

    Ici le montage répond correctement , maintenant ouvrez votre  navigateur web et tapper l'adresse du module dans la barre de navigation : http://192.168.0.5 , vous devriez arriver sur la page de navigation principale.


    Dans le cas contraire, il se peut que le module soit en train d'envoyer le message de reboot, ce qui rend les pages web occupées.
    Si au bout de 10 secondes vous ne pouvez toujours pas acceder à la page principale, c'est probablement que les paramètres de messageries entrées sont faux. dans ce cas je vous conseille de désactiver l'envoi d'email pour le moment. Au passage, je tiens à vous informer, que pour le moment, l'envoi d'un mail est une fonction bloquante, c'est à dire que si il y a un soucis de service SMTP chez votre fournisseur d'accès, le Xweb32Lite essai à l'infinie d'envoyer sont message. Je pense à l'avenir effectuer quelques améliorations...

    Telechargement






0 commentaires:

Enregistrer un commentaire