Go Down

Topic: Envois de mail lors d'apuis sur bouton avec ethernet shield (Read 5 times) previous topic - next topic

woodman

et bein pour moi qui est un débutant en programmation la c'est comme sauter d'un plongeoir  sans avoir appris a nager ....
j'espère que je ne vais pas me noyer :D

TchaoPaulo

Bonjour bonjour :)

je suis aussi très intéressé par l'envoi de mail depuis l'arduino ( pour de la surveillance)
Après lecture de vos commentaires j'ai tenté de reprendre le sketch mais la lib Ethernet je semble pas être la même :

Code: [Select]
EthernetClient client; --> error: 'EthernetClient' does not name a type

j'ai donc fais une modif en :
Code: [Select]
Client client(server,25);

puis :
Code: [Select]
if (client.connect())

à la place de :
Code: [Select]
if (client.connect(server,25))

mais aucune connexion ...

Une personne plus compétente que moi pourrait confirmer que l'adresse SMTp de gmail est : 173,194,70,108

Beaucoup de monde semble s'être cassé les dents sur l'envoi de mails depuis l'Arduino ... on croise les doigts ! :)

TchaoPaulo

#32
Jun 20, 2012, 07:15 pm Last Edit: Jun 20, 2012, 08:20 pm by TchaoPaulo Reason: 1
Après quelques tests pas vraiment concluants voici un morceau de code, connection au serveur aléatoirement, bref il y a du travail ^^
Code: [Select]

#include <Ethernet.h>
#include <SPI.h>

//--- déclaration du tableau d'adresse MAC ---
byte mac[] = { 0x90, 0xA2, 0xDA, 0x00, 0x4D, 0x7F };
//---- tableau de l'adresse IP de la carte Arduino ---
byte ip[] = { 192, 168, 1, 10 };
//----- tableau de l'adresse de la passerelle ---
byte passerelle[] = { 192,168,1,254 };
//----- tableau du masque de sous réseau ---
byte masque[] = { 255, 255, 255, 0 };
//----- Mail server address yahoo ---
byte server[] = { 77,238,184,86 };

Client client(server, 465);

//----- Login / Pass base64 ---
String UserName64 = "xx xx xx xx xx xx xx xx";
String Password64 = "xx xx xx xx";

//----- Informations ---
String ServerName = "mail.yahoo.fr";
String Sender = "xxxxxxx@yahoo.com";
String Recipient = "xxxxxxxx@hotmail.fr";


void setup()
{
Ethernet.begin(mac, ip, passerelle, masque);
Serial.begin(9600);

delay(1000);

Serial.println("connecting...");

if (client.connect()) {
  Serial.println("connected");
  client.println("HELO " + ServerName); /* say hello*/
  client.println("AUTH PLAIN ");
  client.println(UserName64);
  client.println(Password64);
  client.println("MAIL From:<"+ Sender +">");
  client.println("RCPT To:<" + Recipient + ">");
  client.println("DATA");
  client.println("To: " + Recipient);
  client.println("From: " + Sender);
  client.println("SUBJECT: This is the subject");
  client.println(); /* empty line */
  client.println("This is the body.");
  client.println(""); /* empty line */
  client.println(".");/* end mail */
  client.println("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(;;)
    ;
}
}

woodman

#33
Jun 21, 2012, 01:04 pm Last Edit: Jun 21, 2012, 01:14 pm by woodman Reason: 1
bon alors pour les nouvelles ....

je suis passé hier soir chez  nybi.cc

d'apres leur avis gmail est incompatible avec mon arduino car il faut utiliser un autre protocole beaucoup trop complique que je ne saurais pas gerer .....

ils m'ont conseillé de passer par tweeter
et la apres qq essais ca fonctionne enfin :D

Code: [Select]
/*


#include <SPI.h>
#include <Ethernet.h>
#include <Twitter.h>

// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0x9x, 0xAx, 0xDx, 0x0x, 0x2x, 0x9x };

// Your Token to Tweet (get it from http://arduino-tweet.appspot.com/)
Twitter twitter("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");

// Message to post
char msg[] = "Hello, World! I'm Arduino!";

// Initialize the Ethernet client library
// with the IP address and port of the server
// that you want to connect to (port 80 is default for HTTP):
EthernetClient client;

void setup()
{
 delay(1000);
 //Ethernet.begin(mac, ip, gateway);
 // or you can use DHCP for autoomatic IP address configuration.
 Ethernet.begin(mac);
 Serial.begin(9600);
 
 delay(1000);
 
 Serial.println("connecting ...");
 if (twitter.post(msg)) {
   // Specify &Serial to output received response to Serial.
   // If no output is required, you can just omit the argument, e.g.
   // int status = twitter.wait();
   int status = twitter.wait(&Serial);
   if (status == 200) {
     Serial.println("OK.");
   } else {
     Serial.print("failed : code ");
     Serial.println(status);
   }
 } else {
   Serial.println("connection failed.");
 }
}

void loop()
{

}


Artouste


bon alors pour les nouvelles ....

je suis passé hier soir chez  nybi.cc

d'apres leur avis gmail est incompatible avec mon arduino car il faut utiliser un autre protocole beaucoup trop complique que je ne saurais pas gerer .....

ils m'ont conseillé de passer par tweeter
et la apres qq essais ca fonctionne enfin :D



Bonjour
C'est ce que j'avais indiqué au debut, mais sur le principe ça ne change pas grand chose
tu ne tweet pas directement avec l'arduino, tu passe par une passerelle tiers relais que tu ne maitrise pas (pérennité,stabilité,confidentialité et ... autres )

woodman

Pour la confidentialité j'utilise un token et mon compte tweeter n'est pas publique donc ca dois régler ce problème

pour la stabilité quels peuvent etre les problèmes ?

idem pour la pérennité ?

Artouste

#36
Jun 21, 2012, 02:17 pm Last Edit: Jun 21, 2012, 02:35 pm by Artouste Reason: 1

Pour la confidentialité j'utilise un token et mon compte tweeter n'est pas publique donc ca dois régler ce problème

pour la stabilité quels peuvent etre les problèmes ?

idem pour la pérennité ?

ce n'est que de la reflexion

- Confidentialité : tu ne sais pas ce qu'il advient de ton (futur) tweet entre le relais et l'injection vers le site twitter, tu ne sais pas si il n'est pas filtré/lu/analysé/modifié,... avant qu'il soit (ou non) propagé ...

- Stabilité : tu es tributaire d'un tiers "relayeur" dont tu ne gère pas la fiabilité de ses "ressources informatique"

- Pérennité : Tu ne sais pas si le "relayeur" sera encore vivant dans 30 secondes, 1 minute, 1 heure, 1 jours, 1...   :smiley-mr-green:

Si c'est pour de l'application un peu critique, ce n'est pas intellectuellement  "viable" sur du long terme

OLIVIERC67



Pour la confidentialité j'utilise un token et mon compte tweeter n'est pas publique donc ca dois régler ce problème

pour la stabilité quels peuvent etre les problèmes ?

idem pour la pérennité ?

ce n'est que de la reflexion

- Confidentialité : tu ne sais pas ce qu'il advient de ton (futur) tweet entre le relais et l'injection vers le site twitter, tu ne sais pas si il n'est pas filtré/lu/analysé/modifié,... avant qu'il soit (ou non) propagé ...

- Stabilité : tu es tributaire d'un tiers "relayeur" dont tu ne gère pas la fiabilité de ses "ressources informatique"

- Pérennité : Tu ne sais pas si le "relayeur" sera encore vivant dans 30 secondes, 1 minute, 1 heure, 1 jours, 1...   :smiley-mr-green:

Si c'est pour de l'application un peu critique, ce n'est pas intellectuellement  "viable" sur du long terme


Un compte mail free (c'est gratuit), le miens a 10 ans et pas eu de problème particulier avec.
Sinon gérer son propre serveur SMTP/POP avec un PC allumé 24/7. Rapsberry Pi est pratique pour cela. Pas cher et consomme 1w.


- 1 mega 2560
- 1 Raspeberry Pi (en pré-commande)
- Quarante douze PC
- beaucoup de volonté, pas beaucoup de temps.
- Ma religion : OpenSour

woodman

#38
Jun 22, 2012, 08:03 am Last Edit: Jun 22, 2012, 11:08 am by woodman Reason: 1
bon alors c'est clair que twitter ca a  pas l'aire le meilleur truc car hier les 2 premiers essais étaient ok mais la depuis ca passe plus et aujourd'hui j'ai droit a  un message :

This application is temporarily over its serving quota.  Please try again later.

donc je viens de faire une demande de compte mail free et j'attends mon courrier pour avoir mon mot de passe ...



edit:
le probleme de twitter est un cas isolé de bug qui tombe le  jour ou je fait mes premiers tests .....
j'ai pas eu de bol sur le coup la
donc vais voir s'il n'y a pas d'autres bugs je reste comme ca sinon je verais pour passer autrement



Sinon pour une machine type Rapsberry Pi  on dois pas pouvoir gérer un changement d'état d'un contact comme avec un arduino

skizoh

si si il dispose d'une dizaine de sortie analogique et numérique d'ou l'avantage du Rapsberry Pi
Un tien vaux mieux que deux tu l'auras !

woodman

mais bon j'ai déjà le matos en arduino et une Rapsberry Pi je sais pas combien de temps il faut pour en avoir une ......

skywodd

Salut,


bon alors c'est clair que twitter ca a  pas l'aire le meilleur truc car hier les 2 premiers essais étaient ok mais la depuis ca passe plus et aujourd'hui j'ai droit a  un
(...)
le probleme de twitter est un cas isolé de bug qui tombe le  jour ou je fait mes premiers tests .....
j'ai pas eu de bol sur le coup la
donc vais voir s'il n'y a pas d'autres bugs je reste comme ca sinon je verais pour passer autrement

Twitter est trés stable en général.
Hier (pas de bol) il y a eu un gros bug généralisé durant deux heures ...
Twitter a fait un communiquer d'excuse avec tout le blabla habituelle.

Par contre de là a utiliser twitter comme systéme de controle à distance ... surtout au travers d'un web-relai ...
Niveau sécurité et fiabilité c'est trés moyen.

En plus pour le moment twitter est pas trés regardant envers les comptes "non humain", mais maintenant qu'ils vendent les tweets à des régies de marketing en temps réel (et non plus sours forme d'archives) ça risque de changer ...


Sinon pour une machine type Rapsberry Pi  on dois pas pouvoir gérer un changement d'état d'un contact comme avec un arduino

Si c'est même un des gros avantages du Raspberry Pi ;)
Il y a des entrées / sorties (3v3 !!), un bus I2C, un port série, un port SPI, ... comme sur une carte arduino en faite !
http://www.raspberrypi.org/archives/tag/gpio
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

OLIVIERC67

#42
Jun 22, 2012, 09:59 pm Last Edit: Jun 22, 2012, 10:20 pm by OLIVIERC67 Reason: 1

Salut,


Sinon pour une machine type Rapsberry Pi  on dois pas pouvoir gérer un changement d'état d'un contact comme avec un arduino

Si c'est même un des gros avantages du Raspberry Pi ;)
Il y a des entrées / sorties (3v3 !!), un bus I2C, un port série, un port SPI, ... comme sur une carte arduino en faite !
http://www.raspberrypi.org/archives/tag/gpio


Intéressant. Je vais ouvrir un nouveau sujet sur la possibilité d'utiliser un RPi en maître pour piloter un arduino esclave via SPI/i2c
http://arduino.cc/forum/index.php/topic,111244.0.html






- 1 mega 2560
- 1 Raspeberry Pi (en pré-commande)
- Quarante douze PC
- beaucoup de volonté, pas beaucoup de temps.
- Ma religion : OpenSour

woodman

Bon je reviens vers vous pour vous montrer le code que j'utilise et qui fonctionne en utilisant twitter
remplacez les xxxxxxxxxx par votre  "Token" de Twitter
j'utilise un compte twitter sur mon arduino pour envoyer les messages et un second qui est paramétré sur mon téléphone qui suit le 1er et qui m'alerte des que celui ci genere un tweet
le dispositif d'alarme est donc placé sur 3 chambres d'expérimentation avec un message différent pour chaque

il reste un bug qui persiste: sur la chambre 3 il dois y avoir des parasites car des fois je recois un message qui me signale une coupure et juste apres le second message qui me dit que tout est revenu dans l'ordre donc pas un probleme de rebond
je pense qu'il faudrait un truc avec une tempo qui envoie le message que si le bouton subot un changement d'etat de plus de 20 secondes par exemple mais je sais pas trop ou placer ca dans le code

Code: [Select]

#include <SPI.h>
#include <Ethernet.h>
#include <Twitter.h>
byte mac[] = { 0xxx, 0xxx, 0xxx, 0xxx, 0xxx, 0xxx };
Twitter twitter("xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx");
char msg[128] = "";
int cptMess = 0;
const int button1Pin = 5;
const int button2Pin = 6;
const int button3Pin = 3;
int button1State = 0;
int button2State = 0;
int button3State = 0;
int oldBtn1State = LOW;
int oldBtn2State = LOW;
int oldBtn3State = LOW;
void setup()
{
  delay(1000);
  Ethernet.begin(mac);
  Serial.begin(9600);
  pinMode(button1Pin, INPUT);
  pinMode(button2Pin, INPUT);
  pinMode(button3Pin, INPUT);
}
void envoyerMsg(char *texte)
{
  Serial.println("connecting ...");
  sprintf(msg, "%s (%d)", texte, cptMess);
  Serial.println(msg);
  if (twitter.post(msg)) {
    int status = twitter.wait(); 
    if (status == 200) {
      Serial.println("OK.");
    }
    else {
      Serial.print("failed : code ");
      Serial.println(status);
    }
  }
  else
  {
    Serial.println("connection failed.");
  }
  cptMess ++;
}
void loop()
{
  //Bouton 1
  button1State = digitalRead(button1Pin);
  if (button1State == HIGH && oldBtn1State == LOW)
  {
    envoyerMsg("au secours y a plus de jus chambre 3 !!!");
    oldBtn1State = button1State;
  }
  else if (button1State == LOW && oldBtn1State == HIGH)
  {
    envoyerMsg("c'est bon le jus est revenu chambre 3");
    oldBtn1State = button1State;
  }
  //Bouton 2
  button2State = digitalRead(button2Pin);
  if (button2State == HIGH && oldBtn2State == LOW)
  {
    envoyerMsg("au secours y a plus de jus chambre 1  !!!");
    oldBtn2State = button2State;
  }
  else if (button2State == LOW && oldBtn2State == HIGH)
  {
    envoyerMsg("c'est bon le jus est revenu chambre 1 ");
    oldBtn2State = button2State;
  }
    //Bouton 3
  button3State = digitalRead(button3Pin);
  if (button3State == HIGH && oldBtn3State == LOW)
  {
    envoyerMsg("au secours y a plus de jus chambre 2  !!!");
    oldBtn3State = button3State;
  }
  else if (button3State == LOW && oldBtn3State == HIGH)
  {
    envoyerMsg("c'est bon le jus est revenu chambre 2 ");
    oldBtn3State = button3State;
  }
  Serial.println("coin!");
  delay(10000);
}


woodman

pour info  le problème de perturbation est réglé avec l'ajout d'un condensateur de 10uf en parallèle dos bornes du contacteur
ça permet du coup de filtrer les courants parasites
le problème était simples a régler

Go Up