Total newbie in Arduino and in this amazing looking library (thanks Renzo)!
I’m creating a simple project of a weather station for my radio station.
I’m finding bits and pieces from various projects and sketches and putting it all together, it seems that I’ve almost reached my goal and I’m pretty happy since I’ve never worked with an Arduino before.
I have an Arduino Uno with an Ethernet shield. In my weather station project, which is running a simple webserver, I have 2 temperatures, one for Outside and one for Inside. The inside temperature is inside the room where all the transmitter equipment is running and its air conditioned of course. What I need to do is send an email to myself if the Inside temperature exceeds 30C degrees. That’s all.
Tried to compile and run the code in the beginning of Renzo’s page (the one in the Arduino section “Send Simple email”) but it gets stuck in the #include <UIPEthernet.h> which I probably don’t have. I’m currently using Ethernet.h in my webserver.
Any help in making this happen, will be greatly appreciated!
“Sketch uses 27308 bytes (84%) of program storage space. Maximum is 32256 bytes.
Global variables use 2004 bytes (97%) of dynamic memory, leaving 44 bytes for local variables. Maximum is 2048 bytes.
Low memory available, stability problems may occur. ”
from the compiler!
I run it but it does absolutely nothing… What am I missing?!
// Enter a MAC address for your controller below.
// Newer Ethernet shields have a MAC address printed on a sticker on the shield
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
Renzo, thank you for the effort, yes now it compiled no problem
Sketch uses 20064 bytes (62%) of program storage space. Maximum is 32256 bytes.
Global variables use 1375 bytes (67%) of dynamic memory, leaving 673 bytes for local variables. Maximum is 2048 bytes.
But the code I sent you above, doesn’t seem to do anything! Is it missing something!? Do I need to do something? It doesn’t prompt me for anything and of course it doesn’t send the email.
Sorry Renzo … my bad! See I told you I’m a total newbie… The problem was that my serial monitor was set at 9600 baud so it couldn’t read… I set it now at 115200 and it did write :
Starting!
IP address 192.168.1.235
ONLY ONE RECIPIENTmiltiple destination and attachments
Insecure client:0
220 SG ESMTP service ready at ismtp
Sending status:
0
I think that is a memory problem again, try to put inside F(“string”) the serial string to free some memory, but Arduino UNO with 2k of ram It’s quite tedious.
I don’t have a w5100 shield only enc26j80 that It’s quite unusable with Arduino UNO.
Starting!
IP address 192.168.1.235
ONLY ONE RECIPIENTmiltiple destination and attachments
Insecure client:0
220 SG ESMTP service ready at ismtpd0005p1
Sending status:
0
Renzo, thank you for the help and the replies of course, I ‘m the least expert in this of course, but it doesn’t seem to me that its a memory problem. It does compile and running fine always producing the same results…
But… to satisfy mine and your curiosity, I will go out and get an Arduino Mega and try it there too. No harm done in that 🙂
Renzo, that I could follow and do easily, and yes it worked, I managed to do 3 recipients!
Now, another weird and upsetting problem occurred though.
I stopped using the UNO and installed the MEGA (which is actually a clone – not original), the email app worked beautifully now with the extra recipients and all… BUT, the webserver app with the weather station, which (like I told you) is my main app isn’t working anymore!
So I’m drawing a blank, now, I don’t know what to do and why isn’t this thing working?!
I’m asking you maybe you have an idea, because you’re a working with all this Arduino stuff!
Could it be the clone board? Could it be some 47Ohm resistors that somebody told me that I should solder under the Ethernet shield’s ethernet plug?
No idea…
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;
}
We are going quite off topic, so I create a topic in the relative section, and I need some time to check It. But I will response to you in that section.
It is impossible for me to connect to open smtp.sendgrid.net 25.
On the other hand I manage to send an email from telnet but with open smtp.sendgrid.net 587.
But suddenly it is in secure mode and the Arduino with the shield w5100 it does not work (well there I can at least connect to the server I just get the error:14: 17: 28.511 -> resp Code: 23514: 17: 28.511 -> Description: SMTP AUTH error (535 Authentication failed: The provided authorization grant is invalid, expired, or revoked))
Whereas with port 25 it is impossible for me to connect to the server either by telnet or via the arduino …
I did tests from Telnet under windows seven.
Do you have to open the connection with the sendGrid server first?
I tried open smtp.sendgrid.net 587
then ping smtp.sendgrid.net I get 500 command not implented
and if I don’t open first … 587
I get an invalid order
Have you tried from your orange email address to open a sendgrid account to see if you can connect to the smtp server port 25?
Thank you
I just re pinged (more than 3 times) smtp.sengrid.net:
sending a ‘ping’ request to smtp.sendgrid.net [52.57.139.126] server with 32 bytes
request deadline exceeded.
request deadline exceeded.
request deadline exceeded.
request deadline exceeded.
Ping statistics for 52.57.139.126:
packets: sent 4, received 0, lost = 4 (100%)
you can try 25, 2525, or 587 port for unencrypted connection, if you can’t use this ports mean that in your network these ports are blocked and you can’t use that.
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.