Vous êtes ici : DomotiqueArduinoContrôler son arduino avec un serveur Telnet et le module enc28j60

Contrôler son arduino avec un serveur Telnet et le module enc28j60

arduino enc28j60 logoUn nouvel article sur UIPEthernet, la librairie de l'enc28j60. Cette fois, on va implémenter un serveur Telnet, qui va nous permettre de contrôler notre arduino depuis le réseau.

Et tout cela, en quelques lignes ...

 

 

 

Installation

Le protocole Telnet est utilisé depuis des décennies en Informatique. Il est implémenter aussi bien sur les serveurs (enfin il devrait être remplacé par ssh maintenant) mais aussi sur les imprimantes réseaux, les routeurs, ... Son avantage ; simple à mettre en oeuvre, et peu gourmand en ressources mais c'est au prix de la sécurité.

 

Le cablage de l'enc28j60 sur mon arduino Mega 2560 est des plus classiques, vous pouvez en trouver un exemple dans mon article précédent.

Il faut commencer par récupèrer la bibliothèque UIPEthernet  dans le dépôt du développeur ainsi que FullIP sur mon github. Vous pouvez utiliser le lien Download Zip en bas et à droite de la page d'accueil des repositories.

Arpès avoir décompacté l'archive dans librairie, il faut modifier le fichier d'entête (FullIP/FullIP.h) afin de spécifier quelle carte vous allez utiliser. Décommentez la ligne suivante pour complier avec l'enc28j60. Si vous la commentez (avec //), vous pourrez alors utiliser votre sketch avec une W5100.

#define FULLIP_UIP

De même, commentez la ligne suivante si vous ne pensez pas utilisez la carte SD dans votre sketch. 

//#define FULLIP_SD

Démarrez maintenant votre arduino et ouvrez l'exemple Telnet Server.

Le code

Tout d'abord l'initialisation :

void setup() {
    Serial.begin(115200);
    Serial.println("[TelnetServer]");
    uint8_t mac[6] = {0x00,0x01,0x02,0x03,0x04,0x05};
    Ethernet.begin(mac);
    Serial.print("localIP: ");
    Serial.println(Ethernet.localIP());
    telnet.begin(parse);
    Serial.println("Server started");
}

On utilise DHCP pour obtenir une adresse IP et on démarre le serveur Telnet. On passe une fonction en paramètre, c'est notre parseur.

byte parse(char buffer[]) {
char buff2[4];
int pin;
if (strcmp_P(buffer,PSTR(""))==0) {
    telnet.client.println("Here is my telnet");
    return 1;
} else if (strcmp_P(buffer,PSTR("?"))==0) {
    telnet.client.println("get pin XX : show the state of the pin XX");
    telnet.client.println("set pin XX : change the state of the pin XX");
    return 1;
} else if (strncmp_P(buffer,PSTR("get pin "),8)==0) {
    buff2[0]=buffer[8];
    buff2[1]=buffer[9];
    buff2[2]='\0';
    pin=atoi(buff2);
    int val=digitalRead(pin);
    telnet.client.print("pin "); 
    telnet.client.print(buff2);
    telnet.client.print(" : ");
    if (digitalRead(pin)==HIGH) {
        telnet.client.println("HIGH");
    } else {
        telnet.client.println("LOW");
    }
    return 1;
} else if (strncmp_P(buffer,PSTR("set pin "),8)==0) {
    buff2[0]=buffer[8];
    buff2[1]=buffer[9];
    buff2[2]='\0';
    pin=atoi(buff2);
    int val=digitalRead(pin);
    telnet.client.print("pin ");
    telnet.client.print(buff2);
    telnet.client.print(" : ");
    if (digitalRead(pin)==HIGH) {
        digitalWrite(pin,LOW);
        telnet.client.println("LOW");
    } else {
        digitalWrite(pin,HIGH);
        telnet.client.println("HIGH");
    }
    return 1;
}
return 0;
}

Quelques règles :

  • si buffer est vide, on affiche le message d'accueil, non obligatoire.
  • la fonction renvoie 1 si la commande a été traité.

Ah oui, il reste la boucle loop :

void loop() {
//Call this function in your loop to process request from telnet clients
telnet.maintain();
}

Vous pouvez maintenant téléverser le sketch.

arduino enc28j60 telnet server

Sur votre ordinateur, lancez la commande :

telnet 192.168.14.58 23

Enfin modifiez l'adresse IP en fonction de vos paramètres personnels.

arduino enc28j60 telnet client

Et voilà le résultat. En quelques lignes de commandes, on a pu allumer ou éteindre des lampes, contrôler leur état. La suite dépend de votre imagination :)

Pour de plus amples informations, vous pouvez consulter la documentation officielle en ligne : http://bibi21000.gallet.info/index.php/fr/component/sphinxdoc/documentation/8-fullip-for-arduino/readme.html

 

Commentaires   

 
0 #5 bibi21000 09-06-2015 00:35
Désolé pour la réponse tardive mais les post intéressants étaient noyés dans les spams.
Je n'ai plus trop le temps de m'occuper de ce projet. N'hésitez pas à le cloner sur github et à me proposer des Pull request
Citer
 
 
0 #4 Jac 15-04-2015 09:55
Suite ...
C:\Documents and Settings\User\M es documents\Ardui no\libraries\Fu llIP/FullIP.h:7 5:23: error: UIPServer.h: No such file or directory
TelnetServer.ino: In function 'void loop()':
TelnetServer:67: error: 'freeMemory' was not declared in this scope.

Je pense que le fichier exemple à subit quelques modifications depuis la parution du tuto; pouvez-vous m'aider ?
Merci d'avance.
Jac
Citer
 
 
0 #3 Jac 15-04-2015 09:51
Bonjour,
Désolé si je pose des questions idiotes, mais je suis tout débutant avec Arduino.
J'ai décompressé les fichiers arduino_uip-mas ter et arduino_fullIP- master dans mon répertoire 'Libraries' sous les noms UIPEthernet et FullIP, puis vérifié le fichier FullIP.h était conforme à la carte enc28j60 que j'utilise.
J'ai ensuite lancé l'exemple Telnet Server.
1er problème à la compilation ave MemoryFree dont je n'avais pas chargé la bibliotheque. Après rectification, voici ce que j'obtiens :
In file included from TelnetServer.ino:41:
C:\Documents and Settings\User\M es documents\Ardui no\libraries\Fu llIP/FullIP.h:7 3:25: error: UIPEthernet.h: No such file or directory
C:\Documents and Settings\User\M es documents\Ardui no\libraries\Fu llIP/FullIP.h:7 4:23: error: UIPClient.h: No such file or directory
Citer
 
 
0 #2 bibi21000 09-12-2013 13:27
Citation en provenance du commentaire précédent de Jeeceebee54 :

Je decompacte, je copie le dossier arduino_uip dans le dossier libraries de mon IDE, je relance l'IDE, mais il ne fait pas apparaitre la nouvelle lib dans le menu croquis/ajoute une biblioteque
Il y a une astuce ?

As-tu renommé le répertoire de la lib en UIPEthernet ?
Quel OS utilises-tu ? Pour Windows, il semble il y avoir un bug avec l'Arduino (https://github.com/ntruchsess/arduino_uip/issues/20)
Concernant Telnet, Smtp et les autres, j'ai commencé à les "sortir" de UIPEthernet, ils sont disponibles ici : https://github.com/bibi21000/arduino-fullip. Je mettrais à jour cette page dés que j'aurais fini.
Citer
 
 
0 #1 Jeeceebee54 08-12-2013 17:50
Salut
A partir du fichier zip de ton gitub ou a partir de celui de ntruchsess, je ne parviens pas a installer la library sous IDE 1.5.4
Je decompacte, je copie le dossier arduino_uip dans le dossier libraries de mon IDE, je relance l'IDE, mais il ne fait pas apparaitre la nouvelle lib dans le menu croquis/ajoute une biblioteque
Il y a une astuce ?
Citer
 

Ajouter un Commentaire


Code de sécurité
Rafraîchir

Free business joomla templates