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;
}
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.
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.
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.
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);
}
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.45
Now 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 };
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.
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?
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;
}
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)
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)
Maintaining a repository (or site or forum) is a lot like tending to a garden - it requires constant care and attention to keep it thriving. If you're a skilled gardener (or coder!) and want to help keep our repository blooming, we'd love to have you on board! We're also looking for talented writers and forum moderators to help us grow our community. Interested in joining our team? Don't hesitate to reach out and let us know how you can contribute!
Are you a fan of electronics or programming? Share your knowledge with others, write a simple tutorial or how to make a great project Contact me: share_your_ideas@mischianti.org
The content displayed on this website is protected under a CC BY-NC-ND license. Visitors are prohibited from using, redistributing, or altering any content from this website for commercial purposes, including generating revenue through advertising. Any unauthorized use is a violation of the license terms and legal action may be taken against individuals or entities found to be in violation.
You must also provide the link to the source.
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.
To provide the best experiences, we use technologies like cookies to store and/or access device information. Consenting to these technologies will allow us to process data such as browsing behavior or unique IDs on this site. Not consenting or withdrawing consent, may adversely affect certain features and functions.
Functional
Always active
The technical storage or access is strictly necessary for the legitimate purpose of enabling the use of a specific service explicitly requested by the subscriber or user, or for the sole purpose of carrying out the transmission of a communication over an electronic communications network.
Preferences
The technical storage or access is necessary for the legitimate purpose of storing preferences that are not requested by the subscriber or user.
Statistics
The technical storage or access that is used exclusively for statistical purposes.The technical storage or access that is used exclusively for anonymous statistical purposes. Without a subpoena, voluntary compliance on the part of your Internet Service Provider, or additional records from a third party, information stored or retrieved for this purpose alone cannot usually be used to identify you.
Marketing
The technical storage or access is required to create user profiles to send advertising, or to track the user on a website or across several websites for similar marketing purposes.