Serveur Telnet Arduino · GitHub – Serveur d’impression
Author: Titanfall —
Short summary: / * * * Serveur Arduino Telnet * * 7 juillet 2010 * * E / S Arduino de base via * * une interface de ligne de commande * * par Steve Lentz * * stlentz[at]Gmail[dot]com * Instructions de démarrage rapide: 1) Définissez l'adresse Ethernet dans le code ci-dessous. 2) Compilez et téléchargez le […]
Quick overview
- Site
- Tutos GameServer
- Canonical URL
- https://tutos-gameserver.fr/2020/04/20/serveur-telnet-arduino-%c2%b7-github-serveur-dimpression/
- LLM HTML version
- https://tutos-gameserver.fr/2020/04/20/serveur-telnet-arduino-%c2%b7-github-serveur-dimpression/llm
- LLM JSON version
- https://tutos-gameserver.fr/2020/04/20/serveur-telnet-arduino-%c2%b7-github-serveur-dimpression/llm.json
- Manifest
- https://tutos-gameserver.fr/llm-endpoints-manifest.json
- Estimated reading time
- 8 minutes (447 seconds)
- Word count
- 1488
Key points
- / * * * Serveur Arduino Telnet * * 7 juillet 2010 * * E / S Arduino de base via * * une interface de ligne de commande * * par Steve Lentz * * stlentz[at]Gmail[dot]com * Instructions de démarrage rapide: 1) Définissez l'adresse Ethernet dans le code ci-dessous.
- 2) Compilez et téléchargez le croquis.
- 3) Connectez Arduino à Ethernet.
- Assurez-vous que le voyant de liaison est allumé.
Primary visual
Structured content
/ * *
* Serveur Arduino Telnet *
* 7 juillet 2010 *
* E / S Arduino de base via *
* une interface de ligne de commande *
* par Steve Lentz *
* stlentz[at]Gmail[dot]com *
Instructions de démarrage rapide:
1) Définissez l'adresse Ethernet dans le code ci-dessous.
2) Compilez et téléchargez le croquis.
3) Connectez Arduino à Ethernet.
Assurez-vous que le voyant de liaison est allumé.
4) Telnet à l'adresse IP d'Arduino.
5) Sur certains clients Telnet, appuyez sur Retour pour réactiver la connexion.
6) Une fois connecté, tapez? pour aider.
7) Essayez une commande simple telle que «ar».
Autres notes
Testé sur Duemilanove avec Ethernet Shield.
Devrait fonctionner sur des cartes compatibles.
Testé avec les clients Win XP, OS X et Debian Telnet.
Compile à environ 9 Ko, peut être réduit en supprimant
commandes inutiles, message d'aide, etc.
Je suis un programmeur C entièrement autodidacte; si tu
n'aime pas mon code, tant pis ;-). * /
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1278686415
// Paramètres Ethernet
#comprendre <SPI.h>
#comprendre <Ethernet.h>
octet Mac[] = 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED ;
octet ip[] = 192, 168, 1, 7 ;
octet passerelle[] = 192, 168, 1, 1 ;
octet sous-réseau[] = 255, 255, 255, 0 ;
// Autres variables globales
#define textBuffSize 9 //longueur de la chaîne de commande la plus longue plus deux espaces pour CR + LF
carboniser textBuff[textBuffSize]; //un endroit pour mettre le texte reçu
int charsReceived = 0;
booléen connectFlag = 0; //nous utiliserons un indicateur distinct de client.connected
//afin que nous puissions reconnaître quand une nouvelle connexion a été créée
non signé longue timeOfLastActivity; //temps en millisecondes de la dernière activité
non signé longue allowedConnectTime = 300000; //cinq minutes
EthernetServer serveur(23); // Telnet écoute sur le port 23
EthernetClient client = 0; // Le client doit avoir une portée globale pour pouvoir être appelé
// des fonctions en dehors de la boucle, mais nous ne savons pas
// quel client est encore, donc créer un objet vide
néant installer()
// définition des broches 0 à 9 comme sorties
// les broches 10-13 sont utilisées par le blindage Ethernet
pour(int je= 0; je < dix; je++) pinMode (i, PRODUCTION);
Ethernet.commencer (mac, ip, passerelle, sous-réseau);
serveur.commencer();
néant boucle()
// regardez si une nouvelle connexion est créée,
// imprimer le message de bienvenue, définir le drapeau connecté
si (serveur.disponible() && !connectFlag)
connectFlag = 1;
client = serveur.disponible();
client.println (" nServeur Arduino Telnet de Steve");
client.println ("? pour aider");
printPrompt ();
// vérifier si le texte reçu
si (client.lié() && client.available ()) getReceivedText ();
// vérifiez si la connexion a expiré
si(connectFlag) checkConnectionTimeout ();
// code pour faire d'autres choses en boucle irait ici
néant printPrompt ()
timeOfLastActivity = millis();
client.affleurer();
charsReceived = 0; //nombre de caractères reçus
client.impression(" n>");
néant checkConnectionTimeout ()
si(millis() – timeOfLastActivity > allowedConnectTime)
client.println ();
client.println ("Déconnexion de temporisation.");
client.Arrêtez();
connectFlag = 0;
néant getReceivedText ()
carboniser c;
int attente;
// copier les caractères en attente dans textBuff
//jusqu'à ce que textBuff soit complet, que CR ait reçu ou plus de caractères
caractères = client.disponible();
faire
c = client.lis();
textBuff[charsReceived] = c;
charsReceived++;
caractères–;
tandis que(charsReceived <= textBuffSize && c ! = 0x0d && caractères > 0);
//si CR trouvé, regardez le texte reçu et exécutez la commande
si(c == 0x0d)
parseReceivedText ();
// après avoir terminé la commande, imprimez une nouvelle invite
printPrompt ();
// si textBuff plein sans atteindre un CR, imprimer un message d'erreur
si(charsReceived > = textBuffSize)
client.println ();
printErrorMessage ();
printPrompt ();
// si textBuff n'est pas plein et pas de CR, ne faites rien d'autre;
// revenir en boucle jusqu'à ce que plus de caractères soient reçus
néant parseReceivedText ()
// regardez le premier caractère et décidez quoi faire
commutateur (textBuff[[0])
Cas "une" : doAnalogCommand (); Pause;
Cas "ré" : doDigitalCommand (); Pause;
Cas "p" : setPinMode (); Pause;
Cas "c" : checkCloseConnection (); Pause;
Cas "?" : printHelpMessage (); Pause;
Cas 0x0d : Pause; //ignorer un retour chariot
défaut: printErrorMessage (); Pause;
néant doDigitalCommand ()
// si nous sommes arrivés ici, textBuff[0] = 'd'
commutateur (textBuff[[1])
Cas "r" : readDigitalPins (); Pause;
Cas "w" : writeDigitalPin (); Pause;
défaut: printErrorMessage (); Pause;
néant readDigitalPins ()
// si nous sommes arrivés ici, textBuff[0] = 'd' et textBuff[1] = 'r'
int épingle;
si (textBuff[[2] == 0x0d)
// sortie la valeur de chaque broche numérique
pour (int je = 0; je < dix; je++) outputPinState (i);
autre
épingle = parseDigit (textBuff[[2]);
si(épingle > =0 && épingle <=9) outputPinState (broche);
autre printErrorMessage ();
néant outputPinState (int épingle)
client.impression("broche numérique ");
client.impression (épingle);
client.impression(" est ");
si (digitalRead (pin))
client.println ("HAUTE");
autre
client.println ("FAIBLE");
néant writeDigitalPin ()
// si nous sommes arrivés ici, textBuff[0] = 'd' et textBuff[1] = 'w'
int épingle = –1;
int pinSetting = –1;
si (textBuff[[3] == "=" && textBuff[[6] == 0x0d) pinSetting < 0) printErrorMessage ();
autre printErrorMessage ();
int parsePinSetting ()
//regardez dans le tampon de texte pour trouver le réglage de la broche
//renvoie -1 si non valide
int pinSetting = –1;
si(textBuff[[4] == "l" && textBuff[[5] == "o") pinSetting = 0;
si(textBuff[[4] == "h" && textBuff[[5] == "je") pinSetting = 1;
revenir pinSetting;
néant doAnalogCommand ()
// si nous sommes arrivés ici, textBuff[0] = 'a'
commutateur (textBuff[[1])
Cas "r" : readAnalogPins (); Pause;
Cas "w" : writeAnalogPin (); Pause;
défaut: printErrorMessage (); Pause;
néant readAnalogPins ()
// si nous sommes arrivés ici, textBuff[0] = 'a' et textBuff[1] = 'r'
// check textBuff[2] est un CR alors
// sortie la valeur de chaque broche d'entrée analogique
si(textBuff[[2] == 0x0d)
pour (int je = 0; je < 6; je++)
client.impression("entrée analogique ");
client.imprimer (i);
client.impression(" est ");
client.println (analogRead (i));
autre printErrorMessage ();
néant writeAnalogPin ()
// si nous sommes arrivés ici, textBuff[0] = 'a' et textBuff[1] = 'w'
int épingle = –1;
int pwmSetting = –1;
si (textBuff[[3] == "=")
autre printErrorMessage ();
int parsepwmSetting ()
int pwmSetting = 0;
int textPosition = 4; //commencer à textBuff[4]
int chiffre;
faire
chiffre = parseDigit (textBuff[textPosition]); //rechercher un chiffre dans textBuff
si (chiffre > = 0 && chiffre <=9) //si chiffre trouvé
pwmSetting = pwmSetting * dix + chiffre; //décaler le résultat précédent et ajouter un nouveau chiffre
autre pwmSetting = –1;
textPosition++; //aller à la position suivante dans textBuff
//sinon à la fin de textBuff et pas trouvé de CR et pas eu d'erreur, continuez
tandis que(textPosition < 7 && textBuff[textPosition] ! = 0x0d && pwmSetting > –1);
//si la valeur n'est pas suivie d'un CR, retourne une erreur
si(textBuff[textPosition] ! = 0x0d) pwmSetting = –1;
revenir pwmSetting;
néant setPinMode ()
// si nous sommes arrivés ici, textBuff[0] = 'p'
int épingle = –1;
int pinModeSetting = –1;
si (textBuff[[1] == "m" && textBuff[[3] == "=" && textBuff[[6] == 0x0d)
//si oui, obtenez le numéro de broche, le réglage et définissez la broche
épingle = parseDigit (textBuff[[2]);
pinModeSetting = parseModeSetting ();
si(épingle > –1 && pinModeSetting == 0)
pinMode (broche, PRODUCTION);
client.println ("D'accord");
si(épingle > –1 && pinModeSetting == 1)
pinMode (broche, CONTRIBUTION);
client.println ("D'accord");
si(épingle < 0
autre printErrorMessage ();
int parseModeSetting ()
//regardez dans le tampon de texte pour trouver le réglage de la broche
//renvoie -1 si non valide
int pinSetting = –1;
si(textBuff[[4] == "o" && textBuff[[5] == "u") pinSetting = 0;
si(textBuff[[4] == "je" && textBuff[[5] == "n") pinSetting = 1;
revenir pinSetting;
int parseDigit (carboniser c)
int chiffre = –1;
chiffre = (int) c – 0x30; // soustraire 0x30 du code ASCII donne une valeur
si(chiffre < 0
néant printErrorMessage ()
client.println ("Commande non reconnue. ? pour aider.");
néant checkCloseConnection ()
// si nous sommes arrivés ici, textBuff[0] = 'c', vérifiez les deux suivants
// caractères pour vous assurer que la commande est valide
si (textBuff[[1] == "l" && textBuff[[2] == 0x0d)
fermer la connexion();
autre
printErrorMessage ();
néant fermer la connexion()
client.println (" nAu revoir. n");
client.Arrêtez();
connectFlag = 0;
néant printHelpMessage ()
client.println (" nExemples de commandes prises en charge: n");
client.println (" dr-lecture numérique: renvoie l'état des broches numériques 0 à 9");
client.println (" dr4 – lecture numérique: retourne uniquement l'état de la broche 4");
client.println (" ar -analog read: retourne toutes les entrées analogiques");
client.println (" dw0 = hi-écriture numérique: activer la broche 0 sur les broches valides sont de 0 à 9");
client.println (" dw0 = lo – écriture numérique: désactivez la broche 0, les broches valides sont comprises entre 0 et 9");
client.println (" aw3 = 222 – écriture analogique: définir la broche numérique 3 sur la valeur PWM 222");
client.println (" les broches autorisées sont 3,5,6,9");
client.println (" plage PWM autorisée 0 à 255");
client.println (" pm0 = en mode pin: définissez la broche 0 sur INPUT les broches valides sont de 0 à 9");
client.println (" pm0 = ou -pin mode: définissez la broche 0 sur OUTPUT les broches valides sont de 0 à 9");
client.println (" cl -close connexion");
client.println (" ? -imprimer ce message d'aide");
Click to rate this post! [Total: 0 Average: 0]
Topics and keywords
Themes: Serveur d'impression
License & attribution
License: CC BY-ND 4.0.
Attribution required: yes.
Manifest: https://tutos-gameserver.fr/llm-endpoints-manifest.json
LLM Endpoints plugin version 1.1.2.