Home › Forums › Your projects › Weather radio station with Arduino UNO/MEGA Ethernet problem with EMailSender
Tagged: Arduino MEGA, Arduino UNO, EMail, Ethernet, Weather station
- This topic has 12 replies, 3 voices, and was last updated 2 years, 5 months ago by
Mohamed.
-
AuthorPosts
-
-
26 January 2021 at 10:06 #9559
Renzo, good morning and a good week to you my friend.
You ‘re asking me what kind of problem do I have, it doesn’t work anymore!
On the UNO the code I will share with you works fine, it’s a webserver Weather Station that produces an HTML page with all the different measures, on a static IP.Now on the Mega, no page loads, no output whatsoever, nothing!
Try it yourself (if you can/want/have the time) and let me know.
Here’s the code:
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> #include "TimerOne.h" #include <math.h> #include "cactus_io_BME280_I2C.h" #define TX_Pin 8 // used to indicate web data tx // Data wire is plugged into digital pin 9 on the Arduino #define ONE_WIRE_BUS 9 #define WindSensor_Pin (2) // digital pin for wind speed sensor #define WindVane_Pin (A2) // analog pin for wind direction sensor #define VaneOffset 0 // define the offset for caclulating wind direction volatile unsigned int timerCount; // used to count ticks for 2.5sec timer count volatile unsigned long rotations; // cup rotation counter for wind speed calcs volatile unsigned long contactBounceTime; // timer to avoid contact bounce in wind speed sensor volatile float windSpeed; int vaneValue; // raw analog value from wind vane int vaneDirection; // translated 0 - 360 wind direction int calDirection; // calibrated direction after offset applied int lastDirValue; // last recorded direction value int deviceCount = 0; // how many DS18B20 we keep on the OneWire float OutminTemp; // keep track of minimum recorded Outside temp float OutmaxTemp; // keep track of maximum recorded Outside temp float InminTemp; // keep track of minimum recorded Inside temp float InmaxTemp; // keep track of maximum recorded Inside temp // Setup a oneWire instance to communicate with any OneWire device OneWire oneWire(ONE_WIRE_BUS); // Pass oneWire reference to DallasTemperature library DallasTemperature sensors(&oneWire); BME280_I2C bme; // I2C using address 0x77 // Here we setup the web server. We are using a static ip address and a mac address byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 45); EthernetServer server(8081); // create a server listing on 192.168.1.45 port 80 void setup() { // setup anemometer values lastDirValue = 0; rotations = 0; // setup timer values timerCount = 0; { sensors.begin(); // Start up the library Serial.begin(9600); // locate devices on the bus // Serial.print("Locating devices..."); // Serial.print("Found "); // deviceCount = sensors.getDeviceCount(); // Serial.print(deviceCount, DEC); // Serial.println(" devices."); // Serial.println(""); sensors.requestTemperatures(); InminTemp = sensors.getTempCByIndex(0); InmaxTemp = sensors.getTempCByIndex(0); OutminTemp = sensors.getTempCByIndex(1); OutmaxTemp = sensors.getTempCByIndex(1); } // disable the SD card by switching pin 4 High pinMode(4, OUTPUT); digitalWrite(4, HIGH); // start the Ethernet connection and server Ethernet.begin(mac, ip); server.begin(); if (!bme.begin()) { // Serial.println("Could not find BME280 sensor, check wiring!"); while (1) ; } pinMode(TX_Pin, OUTPUT); //pinMode(RG11_Pin, INPUT); pinMode(WindSensor_Pin, INPUT); attachInterrupt(digitalPinToInterrupt(WindSensor_Pin), isr_rotation, FALLING); // setup the timer for 0.5 second Timer1.initialize(500000); Timer1.attachInterrupt(isr_timer); sei(); // Enable Interrupts } void loop() { // Send command to all the sensors for temperature conversion sensors.requestTemperatures(); bme.readSensor(); // update min and max temp values for Outside and Inside Temperatures if (sensors.getTempCByIndex(1) < OutminTemp) { OutminTemp = sensors.getTempCByIndex(1); } if (sensors.getTempCByIndex(1) > OutmaxTemp) { OutmaxTemp = sensors.getTempCByIndex(1); } if (sensors.getTempCByIndex(0) < InminTemp) { InminTemp = sensors.getTempCByIndex(0); } if (sensors.getTempCByIndex(0) > InmaxTemp) { InmaxTemp = sensors.getTempCByIndex(0); } // listen for incoming clients EthernetClient client = server.available(); if (client) { // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == '\n' && currentLineIsBlank) { // send a standard http response header digitalWrite(TX_Pin, HIGH); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // connection closed completion of response client.println("Refresh: 10"); // refresh the page automatically every 10 sec client.println(); client.println("<!DOCTYPE HTML>"); client.print( "<HTML><HEAD><TITLE>RadioActive Weather Server</TITLE></HEAD>"); client.println( "<font color='red'><h2>RadioActive Weather Server</font></h2>"); client.print( "Agios Merkouris, Sifnos @ 36.987832, 24.719809<br><br>"); client.println("<html><body>"); digitalWrite(TX_Pin, HIGH); // Turn the TX LED on client.print( "<span style=\"font-size: 26px\";>Outside Temperature now "); client.print(sensors.getTempCByIndex(1)); client.println("C<br>"); client.print("<br> Inside Temperature now "); client.print(sensors.getTempCByIndex(0)); client.println("C<br>"); client.print("<br> Wind Speed now "); client.print(windSpeed); client.println(" mph<br>"); getWindDirection(); client.print("<br> Direction now "); client.print(calDirection); if ((calDirection) < 23) { client.print(" North"); } if ((calDirection > 22) && (calDirection < 68)) { client.print(" NorthEast"); } if ((calDirection > 67) && (calDirection < 113)) { client.print(" East"); } if ((calDirection > 112) && (calDirection < 158)) { client.print(" SouthEast"); } if ((calDirection > 157) && (calDirection < 203)) { client.print(" South"); } if ((calDirection > 202) && (calDirection < 247)) { client.print(" SouthWest"); } if ((calDirection > 246) && (calDirection < 292)) { client.print(" West"); } if ((calDirection > 291) && (calDirection < 337)) { client.print(" NorthWest"); } if ((calDirection > 336) && (calDirection <= 360)) { client.print(" North"); } client.println("<br>"); client.print("<br> Humidity now "); client.print(bme.getHumidity()); client.println("%<br>"); client.print("<br> Pressure now "); client.print(bme.getPressure_MB()); client.println("mb%<br>"); client.print("<br> Outside Min Temperature was "); client.print(OutminTemp); client.println("C<br>"); client.print("<br> Outside Max Temperature was "); client.print(OutmaxTemp); client.println("C<br>"); client.print("<br> Inside Min Temperature was "); client.print(InminTemp); client.println("C<br>"); client.print("<br> Inside Max Temperature was "); client.print(InmaxTemp); client.println("C"); client.println("</body></html>"); digitalWrite(TX_Pin, LOW); // Turn the TX LED off break; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); } // Interrupt handler routine for timer interrupt void isr_timer() { timerCount++; if (timerCount == 5) { // convert to mp/h using the formula V=P(2.25/T) // V = P(2.25/2.5) = P * 0.9 windSpeed = rotations * 0.9; rotations = 0; timerCount = 0; } } // Interrupt handler routine to increment the rotation count for wind speed void isr_rotation() { if ((millis() - contactBounceTime) > 15) { // debounce the switch contact rotations++; contactBounceTime = millis(); } } // Get Wind Direction void getWindDirection() { vaneValue = analogRead(WindVane_Pin); vaneDirection = map(vaneValue, 0, 1023, 0, 360); calDirection = vaneDirection + VaneOffset; if (calDirection > 360) calDirection = calDirection - 360; if (calDirection > 360) calDirection = calDirection - 360; }
-
26 January 2021 at 10:37 #9567
Thank you Renzo, sorry for the off topic!
I tried again and again, and its so strange, as soon as I compile the sketch on the UNO it works right away, on the MEGA it just doesn’t… And I can’t really tell where it stops (if it stops) if it loads in the EEPROM or if it wants to run and it stops somewhere etc… I m in total darkness, I can’t debug.
Anyway, if you need the cactus library, you can get it from here: http://cactus.io/projects/weather/arduino-weather-station-bme280-sensor
-
26 January 2021 at 11:43 #9568
Hi tpapas,
try to add pin 10 HIGH (as documentation)pinMode(53, OUTPUT); pinMode(4, OUTPUT); digitalWrite(4, HIGH); pinMode(10, OUTPUT); digitalWrite(10, HIGH);
and add this code to check If there are some problem
// Check for Ethernet hardware present if (Ethernet.hardwareStatus() == EthernetNoHardware) { Serial.println("Ethernet shield was not found. Sorry, can't run without hardware. :("); while (true) { delay(1); // do nothing, no point running without Ethernet hardware } } if (Ethernet.linkStatus() == LinkOFF) { Serial.println("Ethernet cable is not connected."); }
I don’t have a w5100 shield, but this is a must have :P.
And check if shield is fitted good, sometime the problems is more simple than expected.
Bye Renzo
-
-
26 January 2021 at 12:01 #9570
I will check, but remember it ran fine with your email routine! So I’m assuming that the shield is working properly.
-
26 January 2021 at 13:18 #9571
Renzo…
I fixed it!!!!!!!!!!Hahaha, I’m excited for this! After lots of research, here’s the solution (FYI):
<h2 id=”wiring-bme280-module-to-arduino-uno”>Wiring BME280 Module to Arduino UNO</h2>
Let’s hook the BME280 module up to the Arduino.Connections are fairly simple. Start by connecting VIN pin to the 5V output on the Arduino and connect GND to ground.
Now we are remaining with the pins that are used for I2C communication. Note that each Arduino Board has different I2C pins which should be connected accordingly. On the Arduino boards with the R3 layout, the SDA (data line) and SCL (clock line) are on the pin headers close to the AREF pin. They are also known as A5 (SCL) and A4 (SDA).
If you have a Mega, the pins are different! You’ll want to use digital 21 (SCL) and 20 (SDA). Refer below table for quick understanding.
SCL SDA Arduino Uno A5 A4 Arduino Nano A5 A4 Arduino Mega 21 20 Leonardo/Micro 3 2 Do you see it?! I was connecting the bme280 on A5 and A4 and it wanted it on 21 and 20!
So now that this is over and all is ok, I need a favor from you 🙂 since I don’t know how to do it…
You have the code, so in the code we get a mac address and we assign a static IP to the Ethernet shield.
I need you to modify your email sending code, to work with the static IP, place it within the weather station code and then make it (with an IF statement) to send an email IF sensors.getTempCByIndex(0) > 30 degrees.Am I asking too much?!
</div>
-
26 January 2021 at 15:52 #9572
Hi tpapas,
I add the EMailSender to the sketch, I attach the code.
#include <SPI.h> #include <Ethernet.h> #include <OneWire.h> #include <DallasTemperature.h> #include "TimerOne.h" #include <math.h> #include "cactus_io_BME280_I2C.h" #include <EMailSender.h> #define TX_Pin 8 // used to indicate web data tx // Data wire is plugged into digital pin 9 on the Arduino #define ONE_WIRE_BUS 9 #define WindSensor_Pin (2) // digital pin for wind speed sensor #define WindVane_Pin (A2) // analog pin for wind direction sensor #define VaneOffset 0 // define the offset for caclulating wind direction #define WEB_SERVER_PORT 8081 #define EMAIL_SEND_DEBOUNCE 5*60*1000 volatile unsigned int timerCount; // used to count ticks for 2.5sec timer count volatile unsigned long rotations; // cup rotation counter for wind speed calcs volatile unsigned long contactBounceTime; // timer to avoid contact bounce in wind speed sensor volatile float windSpeed; int vaneValue; // raw analog value from wind vane int vaneDirection; // translated 0 - 360 wind direction int calDirection; // calibrated direction after offset applied int lastDirValue; // last recorded direction value int deviceCount = 0; // how many DS18B20 we keep on the OneWire float OutminTemp; // keep track of minimum recorded Outside temp float OutmaxTemp; // keep track of maximum recorded Outside temp float InminTemp; // keep track of minimum recorded Inside temp float InmaxTemp; // keep track of maximum recorded Inside temp // Setup a oneWire instance to communicate with any OneWire device OneWire oneWire(ONE_WIRE_BUS); // Pass oneWire reference to DallasTemperature library DallasTemperature sensors(&oneWire); BME280_I2C bme; // I2C using address 0x77 // Here we setup the web server. We are using a static ip address and a mac address byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; IPAddress ip(192, 168, 1, 177); IPAddress myDns(192, 168, 1, 1); IPAddress gateway(192, 168, 1, 1); IPAddress subnet(255, 255, 255, 0); EthernetServer server(WEB_SERVER_PORT); // create a server listing on 192.168.1.45 port 80 EMailSender emailSend("apikey", "SG.FINTOFINTOFINTO.FINTOFINTO", "sender.mischianti@gmail.com", "smtp.sendgrid.net", 25 ); void isr_rotation(); void sendEmail(); void setup() { Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } // setup anemometer values lastDirValue = 0; rotations = 0; // setup timer values timerCount = 0; { sensors.begin(); // Start up the library // locate devices on the bus // Serial.print("Locating devices..."); // Serial.print("Found "); // deviceCount = sensors.getDeviceCount(); // Serial.print(deviceCount, DEC); // Serial.println(" devices."); // Serial.println(""); sensors.requestTemperatures(); InminTemp = sensors.getTempCByIndex(0); InmaxTemp = sensors.getTempCByIndex(0); OutminTemp = sensors.getTempCByIndex(1); OutmaxTemp = sensors.getTempCByIndex(1); } // disable the SD card by switching pin 4 High pinMode(4, OUTPUT); digitalWrite(4, HIGH); pinMode(53, OUTPUT); pinMode(10, OUTPUT); digitalWrite(10, HIGH); Serial.println(F("Pin start!")); // start the Ethernet connection and server // Ethernet.begin(mac, ip, myDns, gateway, subnet); if (Ethernet.begin(mac) == 0) { Serial.println(F("Failed to configure Ethernet using DHCP")); if (Ethernet.hardwareStatus() == EthernetNoHardware) { Serial.println(F("Ethernet shield was not found. Sorry, can't run without hardware. :(")); } else if (Ethernet.linkStatus() == LinkOFF) { Serial.println(F("Ethernet cable is not connected.")); } // no point in carrying on, so do nothing forevermore: while (true) { delay(1); } } Serial.println(F("Begin executed!")); server.begin(); if (!bme.begin()) { Serial.println(F("Could not find BME280 sensor, check wiring!")); while (1); } pinMode(TX_Pin, OUTPUT); //pinMode(RG11_Pin, INPUT); pinMode(WindSensor_Pin, INPUT); attachInterrupt(digitalPinToInterrupt(WindSensor_Pin), isr_rotation, FALLING); // setup the timer for 0.5 second Timer1.initialize(500000); Timer1.attachInterrupt(isr_timer); sei(); // Enable Interrupts Serial.print(F("IP: ")); Serial.println(Ethernet.localIP()); Serial.print(F("Web Server: http://")); Serial.print(Ethernet.localIP()); Serial.print(F(":")); Serial.print(WEB_SERVER_PORT); } bool emailSended = false; unsigned long timeElapsed = millis(); void loop() { // Send command to all the sensors for temperature conversion sensors.requestTemperatures(); bme.readSensor(); // update min and max temp values for Outside and Inside Temperatures if (sensors.getTempCByIndex(1) < OutminTemp) { OutminTemp = sensors.getTempCByIndex(1); } if (sensors.getTempCByIndex(1) > OutmaxTemp) { OutmaxTemp = sensors.getTempCByIndex(1); } if (sensors.getTempCByIndex(0) < InminTemp) { InminTemp = sensors.getTempCByIndex(0); } if (sensors.getTempCByIndex(0) > InmaxTemp) { InmaxTemp = sensors.getTempCByIndex(0); } // Check if value > 30 and check if you already send this email if (sensors.getTempCByIndex(0) > 30 && emailSended == false){ emailSended = true; // check if you had already send an email in the last 5 minutes if ((timeElapsed+EMAIL_SEND_DEBOUNCE)<millis()){ timeElapsed = millis(); sendEmail(); } }else{ // The value return ok and so if you are going over 30 again new notification was sended emailSended = false; } // listen for incoming clients EthernetClient client = server.available(); if (client) { // an http request ends with a blank line boolean currentLineIsBlank = true; while (client.connected()) { if (client.available()) { char c = client.read(); Serial.write(c); // if you've gotten to the end of the line (received a newline // character) and the line is blank, the http request has ended, // so you can send a reply if (c == '\n' && currentLineIsBlank) { // send a standard http response header digitalWrite(TX_Pin, HIGH); client.println("HTTP/1.1 200 OK"); client.println("Content-Type: text/html"); client.println("Connection: close"); // connection closed completion of response client.println("Refresh: 10"); // refresh the page automatically every 10 sec client.println(); client.println("<!DOCTYPE HTML>"); client.print("<HTML><HEAD><TITLE>RadioActive Weather Server</TITLE></HEAD>"); client.println("<font color='red'><h2>RadioActive Weather Server</font></h2>"); client.print("Agios Merkouris, Sifnos @ 36.987832, 24.719809<br><br>"); client.println("<html><body>"); digitalWrite(TX_Pin, HIGH); // Turn the TX LED on client.print("<span style=\"font-size: 26px\";>Outside Temperature now "); client.print(sensors.getTempCByIndex(1)); client.println("C<br>"); client.print("<br> Inside Temperature now "); client.print(sensors.getTempCByIndex(0)); client.println("C<br>"); client.print("<br> Wind Speed now "); client.print(windSpeed); client.println(" mph<br>"); getWindDirection(); client.print("<br> Direction now "); client.print(calDirection); client.print(direction(calDirection)); client.println("<br>"); client.print("<br> Humidity now "); client.print(bme.getHumidity()); client.println("%<br>"); client.print("<br> Pressure now "); client.print(bme.getPressure_MB()); client.println("mb%<br>"); client.print("<br> Outside Min Temperature was "); client.print(OutminTemp); client.println("C<br>"); client.print("<br> Outside Max Temperature was "); client.print(OutmaxTemp); client.println("C<br>"); client.print("<br> Inside Min Temperature was "); client.print(InminTemp); client.println("C<br>"); client.print("<br> Inside Max Temperature was "); client.print(InmaxTemp); client.println("C"); client.println("</body></html>"); digitalWrite(TX_Pin, LOW); // Turn the TX LED off break; } if (c == '\n') { // you're starting a new line currentLineIsBlank = true; } else if (c != '\r') { // you've gotten a character on the current line currentLineIsBlank = false; } } } } // give the web browser time to receive the data delay(1); // close the connection: client.stop(); } // Interrupt handler routine for timer interrupt void isr_timer() { timerCount++; if (timerCount == 5) { // convert to mp/h using the formula V=P(2.25/T) // V = P(2.25/2.5) = P * 0.9 windSpeed = rotations * 0.9; rotations = 0; timerCount = 0; } } // Interrupt handler routine to increment the rotation count for wind speed void isr_rotation() { if ((millis() - contactBounceTime) > 15) { // debounce the switch contact rotations++; contactBounceTime = millis(); } } // Get Wind Direction void getWindDirection() { vaneValue = analogRead(WindVane_Pin); vaneDirection = map(vaneValue, 0, 1023, 0, 360); calDirection = vaneDirection + VaneOffset; if (calDirection > 360) calDirection = calDirection - 360; if (calDirection > 360) calDirection = calDirection - 360; } const char* direction(int calDirection){ if ((calDirection) < 23) { return " North"; } if ((calDirection > 22) && (calDirection < 68)) { return " NorthEast"; } if ((calDirection > 67) && (calDirection < 113)) { return " East"; } if ((calDirection > 112) && (calDirection < 158)) { return " SouthEast"; } if ((calDirection > 157) && (calDirection < 203)) { return " South"; } if ((calDirection > 202) && (calDirection < 247)) { return " SouthWest"; } if ((calDirection > 246) && (calDirection < 292)) { return " West"; } if ((calDirection > 291) && (calDirection < 337)) { return " NorthWest"; } if ((calDirection > 336) && (calDirection <= 360)) { return " North"; } return "No data!"; } void sendEmail(){ EMailSender::EMailMessage message; message.subject = "RadioActive Weather Server"; getWindDirection(); message.message = ("Ciao come stai<br>io bene." "<span style=\"font-size: 26px\";>Outside Temperature now " +String(sensors.getTempCByIndex(1))+ "C<br>" + ("<br> Inside Temperature now ") +String(sensors.getTempCByIndex(0))+ "C<br>" "<br> Wind Speed now " +String(windSpeed)+ " mph<br>" "<br> Direction now " +direction(calDirection)+ "<br>" "<br> Humidity now " +String(bme.getHumidity())+ "%<br>" "<br> Pressure now " +String (bme.getPressure_MB())+ "mb%<br>" "<br> Outside Min Temperature was " +String(OutminTemp)+ "C<br>" "<br> Outside Max Temperature was " +String(OutmaxTemp)+ "C<br>" "<br> Inside Min Temperature was " +String(InminTemp)+ "C<br>" "<br> Inside Max Temperature was " +String(InmaxTemp)+ "C"); const char* emailToSend = "receiver.mischianti@gmail.com"; EMailSender::Response resp = emailSend.send(emailToSend, message); Serial.println(F("Sending status: ")); Serial.println(resp.status); Serial.println(resp.code); Serial.println(resp.desc); }
I get a w5100 shield and now can try to test It.
Bye Renzo
Attachments:
You must be logged in to view attached files.
-
-
28 January 2021 at 12:25 #9596
Renzo… You are amazing!!!
Thank you so much for the effort.
I need some further help please.
The server now as you have it, works by DHCP and since I need to publish it on the web it does need to be on a specific static IP so I can open the port on the router etc, so the server must be on 192.168.1.45Now when I ran it, the server started on 192.168.1.235.
I don’t understand what these do (since I set them correctly but it didn’t use them):
// Here we setup the web server. We are using a static ip address and a mac address
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };IPAddress ip(192, 168, 1, 45);
IPAddress myDns(192, 168, 1, 5);
IPAddress gateway(192, 168, 1, 5);
IPAddress subnet(255, 255, 255, 0);Also, I raised the (sensors.getTempCByIndex(0) > 30 and it didn’t send an email, and since there is no monitor debug output or anything, I don’t know if it did anything, but I didn’t get an email! (I did change all the credentials and API keys to mine).
And one last thing, when we figure all this out and it works fine, I need it to send the same email to 3 recipients.
Thank you
-
28 January 2021 at 18:21 #9598
From a little further debugging that I did, on the matter of not sending an email if temperature goes above 30 degrees.
// Check if value > 30 and check if you already send this email
if (sensors.getTempCByIndex(0) > 30 && emailSended == false){
emailSended = true;Â // if sendEmail() is here then email is sent ok
// check if you had already send an email in the last 5 minutes
if ((timeElapsed+EMAIL_SEND_DEBOUNCE)<millis()){
timeElapsed = millis();
Serial.print(F(“Trying to Send EMAIL NOW”));
sendEmail();
}
}else{
// The value return ok and so if you are going over 30 again new notification was sended
emailSended = false;
}So something is not working either with timeElapsed or emailSended.
By the way how do I raise the timeElapsed from 5 minutes to 15 minutes?
-
28 January 2021 at 22:08 #9601
Hi tpapas,
first, check the code I commend the static IP Ethernet initialization, so to restore It you must uncomment
// start the Ethernet connection and server // Ethernet.begin(mac, ip, myDns, gateway, subnet);
and comment the dhcp initialization
if (Ethernet.begin(mac) == 0) { Serial.println(F("Failed to configure Ethernet using DHCP")); if (Ethernet.hardwareStatus() == EthernetNoHardware) { Serial.println(F("Ethernet shield was not found. Sorry, can't run without hardware. :(")); } else if (Ethernet.linkStatus() == LinkOFF) { Serial.println(F("Ethernet cable is not connected.")); } // no point in carrying on, so do nothing forevermore: while (true) { delay(1); } }
to change the debounce you must change this define
#define EMAIL_SEND_DEBOUNCE 5*60*1000
Try to change the variable like so (to activate immediately the email send)
unsigned long timeElapsed = millis()-EMAIL_SEND_DEBOUNCE;
and fix this
// Check if value > 30 and check if you already send this email if (sensors.getTempCByIndex(0) > 30 && emailSended == false){ emailSended = true; // check if you had already send an email in the last 5 minutes if (timeElapsed+EMAIL_SEND_DEBOUNCE < millis()){ timeElapsed = millis(); sendEmail(); } }else if (sensors.getTempCByIndex(0) < 30 && emailSended == true){ // The value return ok and so if you are going over 30 again new notification was sended emailSended = false; }
Give me a feedback, bye Renzo
-
28 January 2021 at 23:16 #9609
Renzo… Amazing! It does it now, it works like a charm…
I thought that the line // Ethernet.begin(mac, ip, myDns, gateway, subnet); was a comment and didn’t realize that it was commented out code! (Stupid me)…
Everything is perfect now, so all it needs now in order for me to close it is to email to 3 (or more recipients)
And I will let you be after that 🙂
-
29 January 2021 at 14:04 #9612
const char* arrayOfEmail[] = {“email1@gmail.com”, “email2@gmail.com”, “email3@gmail.com”};
EMailSender::Response resp = emailSend.send(arrayOfEmail, 3, message);That did Renzo, I guess I could do that myself!!!
Thank you so much for helping me in this project, I couldn’t have done it without your support!
🙂
-
17 November 2022 at 12:45 #23501
You have my best regards
Own a data transmission project using Arduino
Please send me a copy of the successful coding
And also how to connect the components
I am a beginner
(Excuse me I don’t speak English, I use google translate)
-
-
29 January 2021 at 22:54 #9628
Hi tpapas,
glad to have been helpful.
If you need more help write a topic.
Bye Renzo
-
-
AuthorPosts
- You must be logged in to reply to this topic.