Skocz do zawartości

Informacja z czujnika do maila


Gal_kris

Pomocna odpowiedź

#define ETH_CLK_MODE ETH_CLOCK_GPIO17_OUT
#define ETH_PHY_POWER 12

#include <Ethernet.h>
#include <ESP32Ping.h>
#include <WiFi.h>
#include "time.h"
#include <EEPROM.h>
#include "ESP32_MailClient.h"
#include <INA219_WE.h>
#include <LiquidCrystal_I2C.h>
#define I2C_ADDRESS 0x44
INA219_WE ina219 = INA219_WE(I2C_ADDRESS);
int lcdColumns = 16;
int lcdRows = 4;
LiquidCrystal_I2C lcd(0x3E, lcdColumns, lcdRows);

const int Analog_channel_pin= 39;
int ADC_VALUE = 0;
double voltage_value = 0;
const int output32 = 32;
const int output33 = 33;

// REPLACE WITH YOUR NETWORK CREDENTIALS
const char* ssid = "__________";
const char* password = "_________";

// To send Email using Gmail use port 465 (SSL) and SMTP Server smtp.gmail.com
// YOU MUST ENABLE less secure app option https://myaccount.google.com/lesssecureapps?pli=1
#define emailSenderAccount    "____________"    
#define emailSenderPassword   "____________"
#define emailRecipient        "____________"
#define smtpServer            "____________"
#define smtpServerPort        465
#define emailSubject          "Olimex"


static bool eth_connected = false;

// The Email Sending data object contains config and data to send
SMTPData smtpData;

// Callback function to get the Email sending status
void sendCallback(SendStatus info);

void WiFiEvent(WiFiEvent_t event){  
  switch (event) {
    case SYSTEM_EVENT_ETH_START:
      Serial.println("ETH Started");
      //set eth hostname here
      ETH.setHostname("esp32-ethernet");
      break;
    case SYSTEM_EVENT_ETH_CONNECTED:
      Serial.println("ETH Connected");
      break;
    case SYSTEM_EVENT_ETH_GOT_IP:
      Serial.print("ETH MAC: ");
      Serial.print(ETH.macAddress());
      Serial.print(", IPv4: ");
      Serial.print(ETH.localIP());
      Serial.print(", DNS1: ");
      Serial.print(ETH.dnsIP());

      if (ETH.fullDuplex()) {
        Serial.print(", FULL_DUPLEX");
      }
      Serial.print(", ");
      Serial.print(ETH.linkSpeed());
      Serial.println("Mbps");
      eth_connected = true;
      break;
    case SYSTEM_EVENT_ETH_DISCONNECTED:
      Serial.println("ETH Disconnected");
      eth_connected = false;
      break;
    case SYSTEM_EVENT_ETH_STOP:
      Serial.println("ETH Stopped");
      eth_connected = false;
      break;
    default:
      break;
  }
}

void setup(){
   Serial.begin(115200);
   Wire.begin();
   lcd.init();
   lcd.backlight();
  // Initialize the output variables as outputs
  pinMode(output32, OUTPUT);
  pinMode(output33, OUTPUT);
//Set outputs to LOW
  digitalWrite(output32, LOW);
  digitalWrite(output33, LOW);
    ADC_VALUE = analogRead(Analog_channel_pin);
voltage_value = (ADC_VALUE * 15.76 ) / (4095);
  Serial.println(voltage_value);
  //Serial.begin(115200);
  Serial.println();
  
  Serial.print("Connecting");
  
  
  //uncomment for WiFi connection
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    Serial.print(".");
    delay(200);
  }
  
/*
  //uncomment for ETH connection
  WiFi.onEvent(WiFiEvent);
  ETH.begin();
  while (eth_connected == false) {
    Serial.print(".");
    delay(200);
  }
 */ 
  Serial.println();
  Serial.println("WiFi o ETH connected.");
  Serial.println();
  Serial.println("Preparing to send email");
  Serial.println();
  


  //Start sending Email, can be set callback function to track the status
 // if (ADC_VALUE <= 3095){
 //  if (!MailClient.sendMail(smtpData))
  //}
 //   Serial.println("Error sending Email, " + MailClient.smtpErrorReason());
  }
  //Clear all data from Email object to free memory
//  smtpData.empty();
//}

void loop() {
  float busVoltage_V = 0.0;
  busVoltage_V = ina219.getBusVoltage_V();
    // Set the SMTP Server Email host, port, account and password
  smtpData.setLogin(smtpServer, smtpServerPort, emailSenderAccount, emailSenderPassword);

  // For library version 1.2.0 and later which STARTTLS protocol was supported,the STARTTLS will be 
  // enabled automatically when port 587 was used, or enable it manually using setSTARTTLS function.
  //smtpData.setSTARTTLS(true);

  // Set the sender name and Email
  smtpData.setSender("ESP32", emailSenderAccount);

  // Set Email priority or importance High, Normal, Low or 1 to 5 (1 is highest)
  smtpData.setPriority("High");

  // Set the subject
  smtpData.setSubject(emailSubject);

  // Set the message with HTML format
  smtpData.setMessage("<div style=\"color:#2f4468;\"><h1>Awaria </h1><p>- wysłano z obiektu nr: </p></div>", true);
  
  
 // Set the email message in text format (raw)
  //smtpData.setMessage("Hello World! - Sent from ESP32 board", false);
 
  // Add recipients, you can add more than one recipient
  smtpData.addRecipient(emailRecipient);
  //smtpData.addRecipient("YOUR_OTHER_RECIPIENT_EMAIL_ADDRESS@EXAMPLE.com");

  smtpData.setSendCallback(sendCallback);
  
    //Start sending Email, can be set callback function to track the status
 if (busVoltage_V < 09.50){
   if (!MailClient.sendMail(smtpData))
   Serial.println("Error sending Email, " + MailClient.smtpErrorReason());
  exit(0);
 
   digitalWrite(output32, HIGH);
    lcd.setCursor(9,3);
    lcd.print("         ");
    lcd.setCursor(9,3);
  lcd.print("Batt Full");
  }else{
  digitalWrite(output32, LOW);
    lcd.setCursor(9,3);
  lcd.print("         ");
  lcd.setCursor(9,3);
  lcd.print("Charging");
  }
  if(busVoltage_V <= 10.00){
  digitalWrite(output33, HIGH);
  lcd.setCursor(0,3);
  lcd.print("       ");
  lcd.setCursor(0,3);
  lcd.print("Batt LOW");
  //delay(2000);
  //lcd.clear();
  }else{
  digitalWrite(output33, LOW);
  lcd.setCursor(0,3);
  lcd.print("        ");
  lcd.setCursor(0,3);
  lcd.print("Batt OK");
  
  //Clear all data from Email object to free memory
  smtpData.empty();
  
}
}

// Callback function to get the Email sending status
void sendCallback(SendStatus msg) {
  // Print the current status
  Serial.println(msg.info());

  // Do something when complete
  if (msg.success()) {
    Serial.println("wysłane");
    
    lcd.setCursor(3,0);
    lcd.print("email send");
    delay(200);
    lcd.setCursor(3,0);
    lcd.print("           ");
    delay(200);
    lcd.setCursor(3,0);
    lcd.print("next probe soon");
    lcd.setCursor(2,1);
    lcd.print("check AC generator");
  delay(2000);
  lcd.setCursor(3,0);
    lcd.print("                 ");
    delay(200);
    lcd.setCursor(3,0);  
    lcd.print("next probe");
  }
}

staram się dodać string coś w postaci :  String smtpData.setMessage = String (busVoltage_V)+ String ("V"); ale nie zostaje wyświetlony w treści maila

Link do komentarza
Share on other sites

 smtpData.setMessage("<div style=\"color:#2f4468;\"><h1>Awaria </h1><p>- wysłano z obiektu nr: </p></div>", true);

 String smtpData.setMessage = string(voltage_value)+ String ("V");

Link do komentarza
Share on other sites

inaczej jeśli znasz sposób jak zatrzymać kod w void loop po wykonaniu zależności by nie wysyłał w nieskończoność maila z awarią bądź by wykonał reboot softu będę wdzięczny za wskazówki

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Najprościej dołożyć flagę - pseudokod:

if(mail_send == false && awaria == true)
{
// tu wysyłasz maila
mail_send = true // tu pamiętasz że mail był już wysłany   
}

 

Link do komentarza
Share on other sites

18 minut temu, Gal_kris napisał:

smtpData.setMessage("<div style=\"color:#2f4468;\"><h1>Awaria </h1><p>- wysłano z obiektu nr: </p></div>", true);

 String smtpData.setMessage = string(voltage_value)+ String ("V");

Pytanie kontrolne: czy Ty w ogóle rozumiesz o co tam chodzi czy losowo wrzucasz mądre słowa typu "String"? Przecież setMessage() to funkcja, podaj jej po prostu raz a dobrze stringa i będzie działać.

Co w stylu:

smtpData.setMessage(String("Awaria!\n") + String(voltage_value) + String("V"));
9 minut temu, Gal_kris napisał:

jeśli znasz sposób jak zatrzymać kod w void loop po wykonaniu zależności by nie wysyłał w nieskończoność maila z awarią

To już przed chwilą się dowiedziałeś, a

9 minut temu, Gal_kris napisał:

by wykonał reboot softu

ESP.restart();

Ale chyba nie o to Ci chodziło.

Edytowano przez ethanak
Link do komentarza
Share on other sites

zgadza się nie do końca rozumiem, nadal się uczę a że mam mega dysleksję uczę się wolno i po swojemu bo wiem jak zmusić głowę do pamiętania.

zawracam komuś głowę tylko gdy siedzę już już nad czymś od 2 tygodni i nic nie potrafię wskórać .

 

no matching function for call to 'SMTPData::setMessage(StringSumHelper&)'

Link do komentarza
Share on other sites

30 minut temu, Gal_kris napisał:

no matching function for call to 'SMTPData::setMessage(StringSumHelper&)'

Pisałem, że "coś w stylu" 🙂

smtpData.setMessage(String("Awaria!\n") + String(voltage_value) + String("V"), false);

Nie wiem czy zadziała.

Link do komentarza
Share on other sites

Dnia 12.04.2022 o 11:59, _LM_ napisał:

if(mail_send == false && awaria == true) { // tu wysyłasz maila mail_send = true // tu pamiętasz że mail był już wysłany }

nie za bardzo to rozumiem bo mail_send <--- muszę podstawić z mojego programu, awaria <----- to bool ?

Proszę napisz tak bym to zrozumiał .

I mam jeszcze jedno pytanie by wyczuć programowo że napięcie wzrasta i maleje ?

 

 

Link do komentarza
Share on other sites

Mówiąc prościej, musisz zapamiętać czy kiedy nastąpiła awaria to mail już został wysłany, ponieważ twoim problemem było że po wystąpieniu awarii mail był wysyłany za każdym obiegiem pętli. Najprościej zrobić dwie zmienne mogą być typu bool i w nich przechowywać te parametry. 

12 minut temu, Gal_kris napisał:

mam jeszcze jedno pytanie by wyczuć programowo że napięcie wzrasta i maleje ?

Zapamiętać ostatnią próbkę (napięcia) i kiedy nadejdzie nowy pomiar porównać z tą zapamiętaną. 

Link do komentarza
Share on other sites

if (mail_send == false && awaria == true){

  smtpData.setLogin(smtpServer, smtpServerPort, emailSenderAccount, emailSenderPassword);
  smtpData.setSender("ESP32", emailSenderAccount);
  smtpData.setPriority("High");
  smtpData.setSubject(emailSubject);
  smtpData.setMessage(String(" Akumulatory wpełni naładowane \n") + String(busVoltage_V) + String("V"), false);
  smtpData.addRecipient(emailRecipient);
  smtpData.setSendCallback(sendCallback);
  if (busVoltage_V > 14.50){
   if (!MailClient.sendMail(smtpData))
   Serial.println("Error sending Email, " + MailClient.smtpErrorReason());
   //exit(0); 
 }
  mail_send = true; // tu pamiętasz że mail był już wysłany   
} 

po zastosowaniu tego nie reaguje na zmianę napięcia w globalu mam  static bool awaria = false; i byte mail_send;

Link do komentarza
Share on other sites

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.