Forum Replies Created

Viewing 15 posts - 856 through 870 (of 979 total)
  • Author
    Posts
  • Renzo Mischianti
    Keymaster

      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

      in reply to: Suggestion for EmailSender Tutorial #9600
      Renzo Mischianti
      Keymaster

        Hi Arthur,

        thanks for suggestion, It’s very interesting.

        I must find some time, but surely I add this section.

        Thank Renzo

        Renzo Mischianti
        Keymaster

          Hi VeloTobi,

          I also update the github project, now there is the simple version and the more complex.

          Bye Renzo

          Renzo Mischianti
          Keymaster

            Hi VeloTobi,

            please check the core and library version, I test the sketch width these and It’s work

            • Using board d1_mini
            • Using core esp8266 2.7.4
            • [ESP8266WiFi@1.0]
            • [ESP8266WebServer@1.0]
            • [WebSockets@2.1.4]
            • [WebSockets@2.1.4]
            • [Hash@1.0]
            • [DHT12_sensor_library@0.9.0]
            • [Wire@1.0]
            • [ArduinoJson@6.13.0]

            Bye Renzo

            Renzo Mischianti
            Keymaster

              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.
              Renzo Mischianti
              Keymaster

                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

                Renzo Mischianti
                Keymaster

                  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.

                  Weather radio station with Arduino UNO/MEGA Ethernet problem

                  Bye Renzo

                  Renzo Mischianti
                  Keymaster

                    If the email work the ethernet work, the arduino clones, usually, work like a charm,

                    With this information It’s very difficult to do a debug.

                    You must give me more information, what kind of problem do you have?

                    Bye Renzo

                     

                    Renzo Mischianti
                    Keymaster

                      Hehehehhe, I’m moved 😛

                      For the recipient you can follow the instruction on the article

                      Send email with attachments (v2.x library): Arduino Ethernet – 1

                      there is an example on library

                      Distribution list example

                      and the relative forum topic

                      EMail distribution list – more than one recipient

                      If you have some trouble write here.

                      Bye Renzo

                      Renzo Mischianti
                      Keymaster

                        Hi tpasas,

                        you are right, i put not clear label,

                        <YOUR-SENDGRID-API-KEY> is the user or apikey name, by default, if i remember, is ‘apikey’,

                         

                        YOUR-SENDGRID-PASSWD> is the key generated the long string.

                         

                        <FROM-EMAIL> is the verified email address sender.

                         

                        I think now is more comprehensive.

                         

                        When i have time i write a little guide.

                        Bye Renzo

                        Renzo Mischianti
                        Keymaster

                          you must set the from (in the declaration of EMailSender) the verified email, I think It’s sufficient, I don’t remember other operation.

                          Bye Renzo

                          Renzo Mischianti
                          Keymaster

                            Yes, all credential is encoded in base64.

                            Bye Renzo

                            Renzo Mischianti
                            Keymaster

                              Hi tpapas,

                              Next I try to free some memory from my library or do something alternative for Arduino UNO.

                              Now to use SMTP you must follow this step

                              https://sendgrid.com/docs/for-developers/sending-email/getting-started-smtp/

                              and

                              https://sendgrid.com/docs/for-developers/sending-email/integrating-with-the-smtp-api/

                              First you must validate the sender email than create api key to use as login and passwd.

                              If you have problem, write here.

                              Bye Renzo

                              Renzo Mischianti
                              Keymaster

                                Hi tpapas,

                                It’s the memory usage, i need to recreate the context and try to do some trick to work with this few memory.

                                I think for now the better solution is to get an Arduino Mega and retry, UNO had very low stats.

                                But i try to keep in work your configuration when find some time.

                                Bye Renzo

                                Renzo Mischianti
                                Keymaster

                                  Yes,

                                  Try to uncomment the EMailSender debug also.

                                  #define EMAIL_SENDER_DEBUG

                                  With this define uncommented you must receive all the client request response.

                                Viewing 15 posts - 856 through 870 (of 979 total)