Bonjour, j'ai un programme de capteur de présence qui fonctionne, mon objectif est que: quand il capte une présence mon arduino Leonardo ETH envoie une requête à un serveur et le serveur enverra une alerte sous forme d'un email.
Comme mon niveau en programmation est très faible j'ai deux questions :
-Comment créer le serveur ?
-Quel programme pour envoyer la requête au serveur ?
Ajoutez un moyen pour parler à l'Internet sur votre arduino (shield wifi ou ethernet) et utilisez la librairie adéquate pour envoyer une requête vers le serveur web
Sur le serveur, programmé dans le langage de votre choix (ou en utilisant une plateforme IOT toute faite) vous recevez l'info et envoyez le message
On ne va pas coder cela pour vous cependant... commencez par nous montrer un bout de code qui détecte la présence et appelle Une fonction pour allumer une LED quand il y a quelqu'un puis appelle une autre fonction pour la led quand il y a personne
Une fois que cela fonctionnera vous aurez la structure du code Arduino, faudra juste changer ce que font les fonctions, au lieu/en plus d'allumer et éteindre la led, vous devrez contacter le serveur
Pour cela il faut choisir votre moyen de connexion et regarder les exemples associés et décider où va "vivre" votre serveur
Merci de vos réponses et de votre aide je pense avoir réussi la modification du programme du capteur de présence qui allume maintenant une LED quand il y a détection.
int etatInterrupteur;
int led = 3;
void setup() {
Serial.begin(9600);
pinMode(2,OUTPUT);
}
void loop() {
Serial.println(digitalRead(A0));
delay(500);
etatInterrupteur = digitalRead(A0);
if ( etatInterrupteur == LOW ) {
digitalWrite(led,LOW);
} else if ( etatInterrupteur == HIGH )
{
digitalWrite(led,HIGH);
}
}
J'ai aussi essayer le protocole SMTP grâce au programme donner par pepe mais je pense avoir fait des erreurs dans les modifications du programme et je n'arrive pas à le compiler.
corrigez votre post ci dessus et rajoutez les code tags autour du code: [code]`` [color=blue]// votre code ici[/color] ``[/code].
ça doit ressembler à cela:// votre code ici
(faites aussi ctrl-T (PC) or cmd-T (Mac) dans l'IDE avant de copier le code pour qu'il soit indenté correctement)
Votre code pour la LED peut être grandement simplifié puisque la LED prend toujours la même valeur que votre capteur.
const byte pinLed = 3;
const byte pinCapteurPresence = A0; // pourquoi une pin analogique si vous faites une lecture tout ou rien?
void setup() {}
void loop() {
digitalWrite(pinLed, digitalRead(pinCapteurPresence));
}
pour le reste, postez votre code et décrivez ce que vous avez essayé, comment c'est connecté, votre réseau etc... difficile sinon de vous aider
Bonjour avec quelques semaines d'absence et d'aide d'une personne plus compétente que moi en arduino nous en sommes arrivés à ce programme : (il a était repris en partie sur internet mais pleins d'autres programmes on était fait pour mieux comprendre le fonctionnement de la carte et maintenant c'est la carte qui envoie le mail directement via SMTP)
#include <SPI.h>
#include <Ethernet2.h>
byte mac[] = { 0x90, 0xA2, 0xDA, 0x10, 0x88, 0x9B };
IPAddress ip(192, 168, 100, 20);
IPAddress gateway(192, 168, 100, 1);
IPAddress subnet(255, 255, 255, 0);
IPAddress server(xxx, xxx, xxx, xxx);
EthernetClient client;
void setup() {
Serial.begin(9600);
while (!Serial) {
}
if (Ethernet.begin(mac) == 0) {
Serial.println("Failed to configure Ethernet using DHCP");
// no point in carrying on, so do nothing forevermore:
for (;;)
;
}
// print your local IP address:
Serial.print("My IP address: ");
for (byte thisByte = 0; thisByte < 4; thisByte++) {
// print the value of each byte of the IP address:
Serial.print(Ethernet.localIP()[thisByte], DEC);
Serial.print(".");
}
Serial.println();
//------------------------------------------------
if (client.connect(server, 25)) {
Serial.println("connected"); // Make a HTTP request:
delay(2000);
char c = client.read();
Serial.print(c);
Serial.println("ok1");
client.println("HELO");
char d = client.read();
Serial.print(d);
Serial.println("ok2");
delay(2000);
client.println("MAIL FROM:XXX");
delay(500);
client.println("RCPT TO:XXX");
delay(500);
client.println("DATA");
delay(500);
client.println("From: Arduino <XXX>");
delay(100);
client.println("Subject: Alerter");
delay(100);
client.println("To: XXXX");
delay(100);
client.println("");
delay(100);
client.println("BEUG ARDUINO");
delay(100);
client.println(".");
delay(500);
client.println("");
delay(5000);
client.println("quit");
delay(500);
}
else {
// kf you didn't get a connection to the server:
Serial.println("connection failed");
}
}
void loop() {
// if there are incoming bytes available
// from the server, read them and print them:
/* if (client.available()) {
char c = client.read();
Serial.print(c);
}
*/
// if the server's disconnected, stop the client:
if (!client.connected()) {
Serial.println();
Serial.println("disconnecting.");
client.stop();
// do nothing forevermore:
for (;;)
;
}
}
Un des plus gros problèmes et que je ne trouvais pas la bibliothèque Ethernet2.
Mais le problème est que je ne reçois pas l'email ..
Peut on s'envoyer un email à soi-même dans ce cas là ?
Si quelqu'un pourrait tester ce programme et me dire ce qu'il ne va pas cela m'aiderait énormément !
Merci d'avance à celui qui trouvera la réponse à mon problème.
Peut on s'envoyer un email à soi-même dans ce cas là ?
oui, et tu peux faire le test.
pas tout lu, mais tu utilise quoi comme email?
gmail, orange, free, ca serait bien de le savoir.
quand au port 25 pour envoyer un mail, il n'y pratiquement plus un fournisseur qui l'utilise.
tu utilise quoi comme serveur pour recevoir les mails?
quel système?
tu as regardé dans ses logs?
il est en réseau local avec l'arduino?
tu peux t'inspirer de cette class, pas testé son fonctionnement
public class MyEmailClass
{
SmtpClient client = new SmtpClient();
public MyEmailClass()
{
client.Port = 587;
client.Host = "smtp.gmail.com";
client.EnableSsl = true;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Credentials = new System.Net.NetworkCredential("myaddress@gmail.com", "mypassword");
}
public string sendEmail(MailAddress fromAddress, string toAddresses, string subject, string emailBody, string ccAddresses = "", string bccAddresses = "")
{
client.Timeout = 100000;//more than 1 s
MailMessage message = new MailMessage();
message.From = fromAddress;
message.To.Add(toAddresses);
message.Subject = subject;
message.Body = emailBody;
if (ccAddresses != "") { message.CC.Add(ccAddresses); }
if (bccAddresses != "") { message.Bcc.Add(bccAddresses); }
message.BodyEncoding = System.Text.Encoding.UTF8;
message.IsBodyHtml = true;
message.DeliveryNotificationOptions = DeliveryNotificationOptions.OnFailure;
client.Send(message);
// Clean up.
message.Dispose();
return "Mail Sent";
}
}
Je l'ai dit dans mon avant dernier post et en effet j'ai changer par rapport au début maintenant c'est la carte Leonardo ETH qui envoie un mail à mon adresse gmail en se connectant au serveur de gmail.
Étape 1 : Choisir votre option de configuration
Serveur SMTP Gmail restreint
Des limites de réception par utilisateur s'appliquent. Cette option ne permet que l'envoi de messages à des utilisateurs Gmail ou G Suite. aspmx.l.google.com
Port 25.
TLS non requis.
Adresses IP dynamiques autorisées.
Les messages ne peuvent être envoyés qu'aux utilisateurs Gmail ou G Suite.
Si votre périphérique ou votre application n'est pas compatible avec le protocole SSL, vous ne pouvez envoyer de messages qu'aux utilisateurs de Gmail ou de G Suite.
Connectez-vous à aspmx.l.google.com sur le port 25.
Configurez un enregistrement SPF pour votre domaine avec l'adresse IP du périphérique ou de l'application, afin que vos messages ne soient pas rejetés par les destinataires.
Dans la console d'administration Google, ajoutez cette adresse IP à la liste blanche de messagerie.
Par exemple, si votre périphérique effectue un envoi à partir de l'adresse IP 123.45.67.89, ajoutez cette adresse à votre enregistrement SPF sans enlever les serveurs de messagerie G Suite de l'enregistrement : v=spf1 ip4:123.45.67.89 include:_spf.google.com ~all.