Seuls les membres ayant 30 points peuvent parler sur le chat.

Forum Casio - Autres questions


Index du Forum » Autres questions » envoyer des mails avec la casio et une arduino
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

envoyer des mails avec la casio et une arduino

Posté le 25/10/2013 00:08

Bon voilà je me suis lancé un petit défi
Mon but et de réussir a faire un interface ,en adaptant l'add-in de Ziqumu "serial monitor" après avoir suivi son explication sur comment marche la communication casio/arduino, pour ensuite commander l envoi de mail via la carte avec un shield ..
Niveau programme de l'arduino je suis ok mais niveau add-in je comprend vraiment pas comment il marche et comment il est structuré.
Voili voilou


1, 2 Suivante
Ziqumu Hors ligne Membre d'honneur Points: 3052 Défis: 9 Message

Citer : Posté le 26/10/2013 01:01 | #


Donc au niveau de l'arduino tu sais déjà comment envoyer un email ? car le plus simple est que la "tête pensante" soit l'arduino. Et la calto sert juste de clavier et d'écran.

Niveau programme de l'arduino je suis ok mais niveau add-in je comprend vraiment pas comment il marche et comment il est structuré.
Serial monitor ou les addins en général ?
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 27/10/2013 14:56 | #


Les add-ins en général ça va mais jusqu’à un certain niveau et serial monitor fait parti du niveau supérieur
Mon but serais de récupérer seulement ce qui permet d'envoyer des messages pour ensuite l'appeler afin envoyer des chaîne de caractère a l'arduino (identifiant, message, sujet, ...)
J'ai fait mon propre add-in pour remplir ces chaînes mais je comprends pas trop comment fait ensuite ton add-in pour les envoyer ...

Voila mon programme arduino a modifier un tout petit peu mais avec ça j'envois des mail sans problèmes (mais ça marche seulement sur les boites laposte.net pour des raisons de sécurité )

Le code
Cliquer pour enrouler
  #include <SPI.h>
#include <Ethernet.h>
// Local network configuration:
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x**, 0x** };
byte ip[] = { 192,168,0, *** };

byte server[] = { 193, 251, 214, 114 }; // SMTP server
String ServerName = "laposte.net";
// Mail data:
String Body = "Salut ca va ?";
int time = 1000;
int wait = 1000;
String ServerResponse="";
EthernetClient client;

void setup(){
  Serial.begin(9600);
  Serial.println("Program started, waiting for router...");
  delay(time); /* allow the router to identify the Arduino before the Arduino connects to the internet */
  Serial.println("Starting network module...");
  Ethernet.begin(mac, ip);
  delay(2000);
  Serial.println("connecting...");
  if (client.connect(server, 25)) {
     Serial.println("connected");
     SendMsg("HELO " + ServerName); /* say hello*/
     SendMsg("AUTH PLAIN ");
     SendMsg("*****"); /* Username*/
     SendMsg("mail from: <****@laposte.net>"); /* identify sender */
     SendMsg("rcpt to: <****@laposte.net>"); /* identify recipient */
     SendMsg("DATA");
     SendMsg("To: ****@laposte.net"); /*  recipient in message header */
     SendMsg("From: ****@laposte.net"); /* seder name in message header */
     SendMsg("Subject: Arduino"); /* insert subject */
     SendMsg(""); /* empty line */
     SendMsg(Body); /* insert body */
     SendMsg(""); /* empty line */
     SendMsg("."); /* end mail */
     SendMsg("QUIT"); /* terminate connection */
     client.println();
  } else {
    Serial.println("connection failed");
  }
}

void loop(){
  if (client.available()) {
    char c = client.read();
    Serial.print(c);
  }
  if (!client.connected()) {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    for(;;)
      ;
  }
}


void GetResponse() {
    if (client.available()) {
         char c = client.read();
         while (client.available()) { // Store command char by char.
           ServerResponse +=c;
           c = client.read();
         }
    Serial.println("<<<" + ServerResponse);
    ServerResponse="";
  }
}

void SendMsg(String m) {
   client.println(m);
   Serial.println(">>>" + m);
   delay(wait); /* wait for a response */
   GetResponse();
}

Ziqumu Hors ligne Membre d'honneur Points: 3052 Défis: 9 Message

Citer : Posté le 30/10/2013 23:57 | #


Pour les envoyer, il y a des syscall qui sont dans le couple de fichier .h/.src de mon projet (je sais plus exactement le nom, mais c'est en rapport avec la communication série). Dans le ficheir h tu as les prototypes des fonctions qui pourront déjà te renseigner un peu. Et sinon tu recherche les noms sur google et sinon il y a la doc de simon lothar qui pourra t'aider, prend le fichier pdf.

Désolé je peux pas vraiment t'aider plus j'ai pas trop le temps en ce moment :/
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 31/10/2013 10:06 | #


Ok pas grave
Vais essayer de me débrouiller comme un grand

Ajouté le 06/02/2014 à 19:04 :
Bon j'arrive déjà a afficher l'adresse de l'envoyeur (en fait c'est celle a laquelle est envoyée la réponse mais bon )
Pour afficher le nombre de messages non-lu, il fait se mettre en envoie de nombre dans Serial Monitor de Ziqumu et appuyer sur 0. Pour afficher l'envoyeur, il faut taper le numéro du message (par exemple 1)

Attention, -il faut que le serveur POP soit compatible mais en tout cas ça marche avec laposte.net
-il faut remplacer les "****" par vos identifiants (2 fois) et mettre votre adresse IP et votre adresse MAC

Le Rx de la casio se branche sur le port 5 et le Tx sur le port 6

Le code Arduino:
#include <SPI.h>
#include <Ethernet.h>
#include <Arduino.h>
#include <SoftwareSerial.h>

char sender[100];
short nombreDeMessages;
short ancienNombreDeMessages;
int nouveauxmessages=0;
int receptionOctet=0;
int numMessage=0;

// A remplacer par votre adresse IP et votre adresse MAC
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
byte ip[] = { 192,168,1,177 };

// A remplacer si vous n'etes pas chez laposte.net
byte server[] = { 193,251,214,115 }; // pop.laposte.net

EthernetClient client;

SoftwareSerial serialCalc(5, 6); // RX, TX


void setup(){
  Serial.begin(9600);
  serialCalc.begin(9600);
  Serial.println("Arduino allumee");
  serialCalc.write("Arduino allumee");
  serialCalc.println();
  Serial.println("Demmarage du shield...");
  Ethernet.begin(mac, ip);
  nombreDeMessages = ancienNombreDeMessages = -1;
  delay(2000);
}

void loop (){
  Serial.println("Attente instruction...");
  do{
    receptionOctet = serialCalc.read();
  }while(receptionOctet==-1);
  receptionOctet-=48;
  Serial.println(receptionOctet);
  serialCalc.println();
  // Compter les messages
  if(receptionOctet==0){
    nombreDeMessages = NombreDeMessages ();
    nouveauxmessages=nombreDeMessages-ancienNombreDeMessages;
    if (nombreDeMessages == -1){
      Serial.println ("Erreur !");
      serialCalc.write("Erreur !");
      serialCalc.println();
    }
    else{
      if (nombreDeMessages != ancienNombreDeMessages){
        Serial.print ("Vous avez ");
        Serial.print (nouveauxmessages);
        Serial.print (" nouveaux messages");
        Serial.println();
        serialCalc.write(nouveauxmessages);
        serialCalc.write(" nouveaux mails");
        serialCalc.println();
      }
      else{
        Serial.println ("Pas de nouveaux messages...");
        serialCalc.write("Pas de nouveau mail");
        serialCalc.println();
      }
    }
    ancienNombreDeMessages = nombreDeMessages;
  }
  // Afficher l'envoyeur du message
  if(receptionOctet>=1 && nombreDeMessages>=1){
    Serial.println (nombreDeMessages);
    if(nombreDeMessages>=receptionOctet) numMessage=receptionOctet;
    GetSender1();
    Serial.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
    for(int i=13;sender[i]!='\0';i++){
      Serial.print(sender[i]);
      serialCalc.write(sender[i]);
    }
    Serial.println("XXXXXXXXXXXXXXXXXXXXXXXXXXXX");
  }
}

short NombreDeMessages (){
  short nombre;
  
  Serial.println("connecting...");
  
  if (client.connect(server, 110)){
    Serial.println("connected");
    serialCalc.write("connected");
    serialCalc.println();
    GetResponse1Line ();
    SendMsg ("user ****");
    GetResponse1Line ();
    SendMsg ("pass ****");
    GetResponse1Line ();
    SendMsg ("list");
    nombre = GetResponseMultiLine () - 2;
    SendMsg ("quit");
    GetResponse1Line ();
    client.stop ();
  }
  else{
      Serial.println("connection failed");
      nombre = -1;
  }
  
  return nombre;
}

void GetResponse1Line (){
  char c, prevC;
  bool finLigne;
  
  // initialisation des variables
  prevC = c = 0;
  
  Serial.print ("S: ");
  
  do{
    // on met de côté le dernier caratère reçu (0 lors du 1er passage dans la boucle)
    prevC = c;
    
    // tant qu'on n'a rien reçu, on attend
    while (!client.available());
    
    // lecture et affichage du caractère
    c = client.read();
    Serial.print (c);
    
    // si ce caratère est LF (10) et que le précédent était CR (13), alors on a rencontré la fin de la ligne
    finLigne = c == 10 && prevC == 13;
  }
  while (!finLigne); // si fin de ligne, on sort - sinon on continue
}

short GetResponseMultiLine (){
  char c, prevC, prevPrevC;
  bool finLigne;
  bool finReponse;
  short longueurLigne;
  short nombreLignes;
  
  // initialisation des variables
  prevPrevC = prevC = c = 0;
  finReponse = false;
  nombreLignes = 0;
  
  Serial.print ("S: ");
  do{
    longueurLigne = 0;
    do{
      // on met de côté le dernier et l'avant-dernier caratères reçus (0 lors du 1er passage dans la boucle)
      prevPrevC = prevC;
      prevC = c;
      
      // tant qu'on n'a rien reçu, on attend
      while (!client.available());
      
      // lecture et affichage du caractère
      c = client.read();
      Serial.print (c);
      
      // si ce caratère est LF (10) et que le précédent était CR (13), alors on a rencontré la fin de la ligne
      finLigne = c == 10 && prevC == 13;
      
      // on incrémente le compteur de longueur de ligne
      longueurLigne++;
    }while (!finLigne); // si fin de ligne, on sort - sinon on continue
    
    // on incrémente le compteur de nombre de ligne
    nombreLignes++;
    
    // si la ligne comportait 3 caractères et que le 1er était '.' (et donc par conséquent les deux autres sont forcément 'CR' et 'LF'), c'est la dernière ligne de la réponse
    finReponse = longueurLigne == 3 && prevPrevC == '.';
  }while (!finReponse); // si fin de réponse, on sort - sinon on continue
  
  return nombreLignes; // on renvoie le nombre de lignes reçues
}

void SendMsg (char *m){
  client.println (m);
  
  Serial.print ("A: ");
  Serial.println (m);
}

void GetSender1(){
  Serial.println("connecting...");
  
  if (client.connect(server, 110)){
    Serial.println("connected");
    serialCalc.write("connected");
    serialCalc.println();
    GetResponse1Line ();
    SendMsg ("user ****");
    GetResponse1Line ();
    SendMsg ("pass ****");
    GetResponse1Line ();
    GetSender();
    SendMsg ("quit");
    GetResponse1Line ();
    client.stop ();
  }
  else{
      Serial.println("connection failed");
        serialCalc.write("Erreur !");
        serialCalc.println();
  }
}

void GetSender (){
  char c, prevC, prevPrevC;
  bool finLigne;
  bool finReponse;
  short longueurLigne;
  short nombreLignes;

  prevPrevC = prevC = c = 0;
  finReponse = false;
  nombreLignes = 0;
  
  Serial.print ("A: ");
  Serial.print("top ");
  Serial.print(numMessage);
  Serial.println(" 1");
  
  client.print("top ");
  client.print(numMessage);
  client.println(" 1");
  Serial.print ("S: ");
  do{
    longueurLigne = 0;
    do{
      prevPrevC = prevC;
      prevC = c;
      
      while (!client.available());
      c = client.read();
      Serial.print (c);
      // enregistrement caractere du sender
      if(nombreLignes==1) sender[longueurLigne]=c;
      
      finLigne = c == 10 && prevC == 13;
      longueurLigne++;
    }while (!finLigne);
    nombreLignes++;
    finReponse = longueurLigne == 3 && prevPrevC == '.';
  }while (!finReponse);
  
}

Lancelot Hors ligne Membre Points: 1274 Défis: 160 Message

Citer : Posté le 06/02/2014 19:10 | #


Bien, ton truc m'a l'air sympa
Calculatrices : Casio 35+ SH4 (modifiée 75) et fx-CG 20 PRIZM
Projets que je soutiens
Des exemples parmi tant d'autres
Pokémon Jade de Dododormeur
Zelda de Smashmaster
Super Geek Brothers de Siapran
Mes Programmes
Mes Programmes
Mes Projets
Mes Projets
ColorLib
Add-ins Jetpack Joyride et Pac-Man sur PRIZM (les 2 non commencés mais en réflexion)
A la recherche des sprites jetpack Joride si quelqu'un les a en couleur
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 30/04/2014 15:17 | #


si ça marche, je suis preneur.
https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 30/04/2014 15:19 | #


Ca marche par contre il te faut une arduino et un shield ethernet
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 30/04/2014 15:20 | #


arduino nano ? ça vas ?

https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Xavier59 Hors ligne Membre de CreativeCalc Points: 1337 Défis: 12 Message

Citer : Posté le 30/04/2014 15:21 | #


Je suis épater
Je me suis pas lancer en C vu que j'ai pas trop le temps actuellement, mais pour mon information, ça fait combien de temps que tu programme en C ?

1337
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 30/04/2014 15:23 | #


Ben au moment ou j'ai mis ce topic je connaissait rien au C
C'est pour ca que j'ai eu du mal a comprendre Ziqumu

Arduino nano tu peux pas mettre de shield si ?

(Je parle de ce shield)
Alphacreator Hors ligne Membre Points: 1464 Défis: 43 Message

Citer : Posté le 30/04/2014 15:35 | #


Pas avec la nano non, elle est trop petite
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 30/04/2014 15:46 | #


le modèle minimum,c est quoi ?
https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 30/04/2014 15:47 | #


Uno je pense

Ajouté le 30/04/2014 à 15:47 :
Apres tu peux tenter de connecter un shield a la nano mais je pense que t'aura du mal
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 30/04/2014 15:50 | #


mouais. pas faux.
bon. je commande un kit de base arduino pour mon anniv '


https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Theprog Hors ligne Membre Points: 1447 Défis: 20 Message

Citer : Posté le 30/04/2014 15:51 | #


En plus avec le MMORPG de DS ca va claquer si on tous une carte avec shield 8)
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 30/04/2014 15:55 | #


yep. les parties multijoueurs de malade
il faudra limite un site avec les seveurs libres
https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Positon Hors ligne Rédacteur Points: 2396 Défis: 57 Message

Citer : Posté le 30/04/2014 16:12 | #


Mais je me posais une question : quelle est l'utilité de développer un M.M.O.R.P.G. sur calculatrice si il faut brancher cette dernière à l'ordinateur ? Autant développer le jeu directement sur le P.C....
Dois-je vous rappeler l'avantage des jeux sur calculatrice ? Vous vous rendrez au lycée avec une carte Arduino ?
<<< Si jusque là vous aviez cru que mon pseudo est "Position", il est encore temps de regarder à gauche

Ça m'énerve les gens qui ne finissent pas leurs
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 30/04/2014 16:14 | #


why not ?


https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
Dark storm Hors ligne Membre d'honneur Points: 11105 Défis: 176 Message

Citer : Posté le 30/04/2014 16:15 | #


Ben une Arduino UNO est bien plus discrète qu'un PC portable...
Bon après si y'a 5 câbles qui en partent, je dis pas

Mais c'est surtout pour pouvoir dire "on l'a fait ! 8) " (et accessoirement avant les TI-fans )
Finir est souvent bien plus difficile que commencer. — Jack Beauregard
Gollum Hors ligne Membre Points: 1262 Défis: 2 Message

Citer : Posté le 30/04/2014 16:25 | #


et bim ! un point en plus pour les casio fan !
-attitude au moment de la reussite-
https://telegram.me/BrokenClock
Je suis de l'autre coté de la manche maintenant. Yay.
1, 2 Suivante

LienAjouter une imageAjouter une vidéoAjouter un lien vers un profilAjouter du codeCiterAjouter un spoiler(texte affichable/masquable par un clic)Ajouter une barre de progressionItaliqueGrasSoulignéAfficher du texte barréCentréJustifiéPlus petitPlus grandPlus de smileys !
Cliquez pour épingler Cliquez pour détacher Cliquez pour fermer
Alignement de l'image: Redimensionnement de l'image (en pixel):
Afficher la liste des membres
Pour coloriser votre code, cliquez ici.
Sinon cliquez sur le bouton ci-dessous.
:bow: :cool: :good: :love: ^^
:omg: :fusil: :aie: :argh: :mdr:
:boulet2: :thx: :champ: :whistle: :bounce:
valider
 :)  ;)  :D  :p
 :lol:  8)  :(  :@
 0_0  :oops:  :grr:  :E
 :O  :sry:  :mmm:  :waza:
 :'(  :here:  ^^  >:)

Σ π θ ± α β γ δ Δ σ λ
Veuillez donner la réponse en chiffre
Vous devez activer le Javascript dans votre navigateur pour pouvoir valider ce formulaire.

Si vous n'avez pas volontairement désactivé cette fonctionnalité de votre navigateur, il s'agit probablement d'un bug : contactez l'équipe de Planète Casio.

Planète Casio v42 © créé par Neuronix et Muelsaco 2004 - 2020 | Il y a 26 connectés | Nous contacter | Qui sommes-nous ? | Licences et remerciements

Planète Casio est un site communautaire non affilié à Casio. Toute reproduction de Planète Casio, même partielle, est interdite.
Les programmes et autres publications présentes sur Planète Casio restent la propriété de leurs auteurs et peuvent être soumis à des licences ou copyrights.
CASIO est une marque déposée par CASIO Computer Co., Ltd