Email mit

Hallo Community,
Mein möchte gerne 4 LED testen und wenn eine LED ausfällt unter oder über einen Bestimmten Messwert fällt oder steigt) soll mir das Arduino eine Mail senden. Mit meinen Sketch hab ich es soweit geschaft, dass mir die Messdaten mit Uhrzeit im Monitor angezeigt wird, aber wie muss ich mein Sketch ändern/bearbeiten das ich eine Mail senden kann.
ich verwende ein Arduino MEGA2560, einen ADC-Shield (12 Bit) von MayhewLabs, ein Ethernet Shield (der IC auf dem Ethernet Shield ist ein W5100) und ein DS3231 RTC-Modul.

Arduino_Sketch_ohne_mail.ino (6.7 KB)

Setze Deinen Code bitte in Codetags (</>-Button oben links im Forumseditor oder [code] davor und [/code] dahinter ohne *).

Gruß Tommy

Hallo Community,
Ich möchte gerne das mir das Arduino eine Mail sendet, wenn Messwerte unter/über einen Bestimmten Wert fällt/steigt (sprich 0V und über 4V). Mit meinen Sketch bin ich soweit, dass mir im Monitor die Messwerte und die Zeit angezeigt werden und auf der SD karte gespeichert wird.
Ich verwende ein Arduino MEGA2560, ein ADC-Shield (12 Bit von MayhewLabs), ein DS3231 RTC-Modul und ein Ethernet Shield mit SD Karte (Der IC auf dem Ethernet Shield ist ein W5100).
Meine Frage ist, wie muss ich mein Sketch bearbeiten, damit das mit der Mail funktioniert.

Arduino_Sketch_ohne_mail.ino (6.7 KB)

Bevor Du anfängst, Deinen Sketch umzubauen, musst Du erst mal checken, ob Dein Mailprovider noch Mails ohne Https annimmt. Das kannst Du z.B. hiermit tun. Ansonsten musst Du einen anderen Provider suchen, der das noch tut.

Alternativ kannst Du auch mit einem leistungsfähigeren Prozessor und https versuchen. Ich weiß aber nicht, ob da schon mal jemand Mails darüber versendet hat.

Wenn das geklärt ist, würde ich an Deiner Stelle erst mal den reinen Mailversand in einem eigenen Sketch testen.

Gruß Tommy

Edit: Was soll es bringen, das Ursprungsposting unverändert zu wiederholen?

#include "Wire.h"
#include <SD.h>
#include <SPI.h>
#include <ExtendedADCShield.h>
#include <Ethernet.h>
#define DS3231_I2C_ADDRESS 0x68

//Initializierung des 12 Bit ADC-Shiled (LTC1857)
ExtendedADCShield extendedADCShield(12);
float ch0;  //Channel o des ADC-Shield
float ch1;  //Channel 1 des ADC-Shield
float ch2;  //Channel 2 des ADC-Shield
float ch3;  //Channel 3 des ADC-Shield
float ch4;  //Channel 4 des ADC-Shield
float ch5;  //Channel 5 des ADC-Shield
float ch6;  //Channel 6 des ADC-Shield
float ch7;  //Channel 7 des ADC-Shield

//Erstellung des Dateinamen
File myFile;

//CS Pin belegung
const int CSE = 4;    //CS für das Ethernet und SD Card Modul
const int CSADC = 10; //CS Pin für das ADC Shield


EthernetClient client;
int x = 5000;

void setup()
{
  Serial.begin(9600);
  pinMode(CSE, OUTPUT);       //CS für das Ethernet und SD Card Modul als Ausgang deklarien
  pinMode(CSADC, OUTPUT);     //CS für das ADC Shield als Ausgang deklarien
  digitalWrite(CSE, HIGH);    //Ethernet und SD Card Modul wird durch das High signal abgeschaltet
  digitalWrite(CSADC, HIGH);  //ADC Shield wird durch das High Signal abgeschaltet
  SPI.begin();
  Wire.begin();
  extendedADCShield.analogReadConfigNext(0, SINGLE_ENDED, UNIPOLAR, RANGE10V);
  while(!Serial)
  {
    ;
  }
  //Initialisierung der SD Karte
  Serial.print("SD Karte wird initialisiert...");
  if (!SD.begin(CSE)) 
  {
    Serial.println("Initialisierung fehlgeschlagen");
    return;
  }
  Serial.println("SD Karte erfolgreich geladen");
   
  // DS3231     sek,min,std,wt,tag,mon,jahr(Zeit des DS3231 wird hier eingestellt)
  setDS3231time(55, 59, 23, 6, 21, 07, 18);
}

//Messungen des ADC Shield
void loop()
{
  if(client.available())
  {
    char c = client.read();
    Serial.print(c);
  }
  if(!client.connected())
  {
    Serial.println();
    Serial.println("disconnected");
    client.stop();
  }
  digitalWrite(10, LOW);  //CS des ADC Shield wird durch das Low signal aktiviert
  ch0 =  extendedADCShield.analogReadConfigNext(1, SINGLE_ENDED, UNIPOLAR, RANGE10V);
  Serial.print(ch0,2);
  Serial.print("\t");
  ch1 =  extendedADCShield.analogReadConfigNext(2, SINGLE_ENDED, UNIPOLAR, RANGE10V);
  Serial.print(ch1,2);  
  Serial.print("\t"); 
  ch2 =  extendedADCShield.analogReadConfigNext(3, SINGLE_ENDED, UNIPOLAR, RANGE10V);
  Serial.print(ch2,2);  
  Serial.print("\t");
  ch3 =  extendedADCShield.analogReadConfigNext(4, SINGLE_ENDED, UNIPOLAR, RANGE10V);
  Serial.print(ch3,2);
  Serial.print("\t"); 
  ch4 =  extendedADCShield.analogReadConfigNext(5, SINGLE_ENDED, UNIPOLAR, RANGE10V);
  Serial.print(ch4,2);  
  Serial.print("\t"); 
  ch5 =  extendedADCShield.analogReadConfigNext(6, SINGLE_ENDED, UNIPOLAR, RANGE10V);
  Serial.print(ch5,2);  
  Serial.print("\t");
  ch6 =  extendedADCShield.analogReadConfigNext(7, SINGLE_ENDED, UNIPOLAR, RANGE10V);
  Serial.print(ch6,2);
  Serial.print("\t"); 
  ch7 =  extendedADCShield.analogReadConfigNext(0, SINGLE_ENDED, UNIPOLAR, RANGE10V);
  Serial.print(ch7,2);  
  Serial.print("\n"); 
  delay(1000);
  digitalWrite(10, HIGH); //CS des ADC Shield wird durch das High Signal abgeschaltet
  displayTime();
}

//Dezimahl Werte des DS3231 wird in Binaer umgewandelt und an der Ds3231 gesetzt
void setDS3231time(byte second, byte minute, byte hour, byte dayOfWeek, byte dayOfMonth, byte month, byte year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); 
  Wire.write(decToBcd(second)); 
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour)); 
  Wire.write(decToBcd(dayOfWeek)); 
  Wire.write(decToBcd(dayOfMonth));
  Wire.write(decToBcd(month)); 
  Wire.write(decToBcd(year)); 
  Wire.endTransmission();
}

//Binaer Wert des DS3231 wird aus der Adresse gelesen
void readDS3231time(byte *second,byte *minute,byte *hour,byte *dayOfWeek,byte *dayOfMonth,byte *month, byte *year)
{
  Wire.beginTransmission(DS3231_I2C_ADDRESS);
  Wire.write(0); 
  Wire.endTransmission();
  Wire.requestFrom(DS3231_I2C_ADDRESS, 7);
  *second = bcdToDec(Wire.read() & 0x7f);
  *minute = bcdToDec(Wire.read());
  *hour = bcdToDec(Wire.read() & 0x3f);
  *dayOfWeek = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month = bcdToDec(Wire.read());
  *year = bcdToDec(Wire.read());
}

//Zeit des DS3231 kann im Seriellen Monitor angezeigt werden
void displayTime()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  readDS3231time(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);
  Serial.print(hour, DEC); //Stunde in Dezimahl wird ausgegeben
  Serial.print(":");       //Zur Trennung der Stunden von Minute wird ein ":" ausgegeben
  if (minute<10)
  {
    Serial.print("0");
  }
  Serial.print(minute, DEC);  //Minute wird in Dezimahl ausgegeben
  Serial.print(":");          //Zur Trennung der Minuten von Sekunden wird ein ":" ausgegeben
  if (second<10)
  {
    Serial.print("0");
  }
  Serial.print(second, DEC);   //Sekunden wird in Dezimahl ausgegeben
  Serial.print(" ");
  Serial.print(dayOfMonth, DEC);  //Tag des Monat wird in Dezimahl ausgegeben
  Serial.print(".");
  Serial.print(month, DEC);       //Monat wird in Dezimahl ausgegeben
  Serial.print(".");
  Serial.print(year, DEC);        //Jahr wird in dezimahl ausgegeben
  Serial.print(" Wochentag: ");   //Die Funktion Wochentag (dayOfWeek) ist nur für den Seriellen Monitor vorgesehen und ist wird nicht auf der SD karte gespeichert
  switch(dayOfWeek)
  {
  case 1:
    Serial.println("Montag");
    break;
  case 2:
    Serial.println("Dienstag");
    break;
  case 3:
    Serial.println("Mittwoch");
    break;
  case 4:
    Serial.println("Donnerstag");
    break;
  case 5:
    Serial.println("Freitag");
    break;
  case 6:
    Serial.println("Samstag");
    break;
  case 7:
    Serial.println("Sonntag");
    break;
  }
  digitalWrite(4, LOW);   //CS des Ethernet und SD Card Modul wird durch das Low Signal aktiviert
  //String Erstellung für die Speicherung der Messdaten und der Zeit mit Datum
  String doppel = ":";
  String frei = "   ";
  String Datum = dayOfMonth + doppel + month + doppel + year;
  String Zeit = hour + doppel + minute + doppel + second;
  String zeile = Zeit + " | " + Datum;
  String Spannung = ch0 + frei + ch1 + frei + ch2 + frei + ch3 + frei +ch4 + frei + ch5 + frei +ch6 + frei + ch7;
  //Speicherung auf der Messdaten mit der entsprechende Zeit auf die Sd Karte
  myFile = SD.open("myFile.txt", FILE_WRITE);
  if(myFile)
  {
    myFile.println(zeile);
    myFile.println(Spannung);
    myFile.close();
  }
  else
  {
    Serial.println("error");
  }
  digitalWrite(4, HIGH);  //CS des Ethernet und SD Card Modul wird durch das High Signal abgeschaltet
}

//Umwandlung von dezimahl in Binaer
byte decToBcd(byte val)
{
  return( (val/10*16) + (val%10) );
}
//Umwandlung von Binaer in Dezimahl
byte bcdToDec(byte val)
{
  return( (val/16*10) + (val%16) );
}

hoffe das ist so Richtig bin neu im Forum. Entschuldigung schon von meiner Seite das ich meine Frage zwei mal gestellt habe.

Du kannst das hier mal ausprobieren, ob das noch funktioniert.

Gruß Tommy

Hi

Deine Kommentare sind falsch - zumindest Die, Die sich auf BCD beziehen.
BCD ist nicht binär.
Wenn man gaaanz nachgiebig sein wöllte, könnte man wegen der Übersetzung 'binary coded decimal' ein Auge zudrücken - aber Binär ist was ganz Anderes.
In BCD werden die Dezimal-Einzel-Ziffern in jeweils einem Nibble (4bit HEX-Zahl/halbes Byte, kann Werte 0...15 annehmen) gespeichert.
So wird aus einer 73(dez) eine 0x73 (jede HEX-Ziffer entspricht einem Nibble, beim BCD wird halt nicht der ganze Bereich davon benutzt).

MfG