Odosielanie e-mailu cez Arduino/NodeMCU

Tvoříte zajímavý projekt? Pochlubte se s ním.
Pravidla fóra
Vkládejte prosím jen HOTOVÉ projekty, které chcete představit ostatním.
Odpovědět
martinius96
Příspěvky: 420
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Odosielanie e-mailu cez Arduino/NodeMCU

Příspěvek od martinius96 » 15 bře 2018, 13:33

Ahoj, dotazy ako odosielať e-maily Arduino sa množia, preto som spísal ako nato.. Využijeme Arduino s Ethernet shieldom W5100 a NodeMCU v klientskom móde pre odosielanie mailov cez PHP script, na ktorý sa daný mikrokontróler ako klient pripojí.

Budeme odosielať text, ktorý bude preddefinovaný v php súbore, ktorý sa odošle na zadaný mail.
Väčšina hostingov, kde sa umiestňujú webové stránky podporujú aj rozšírenia ako funkciu mail, čo umožňuje komunikáciu so SMTP serverom. Budeme teda využívať externý webový sever, kam sa budeme pripájať ako klient. Vďaka spomínanej mail funkcii môžeme priamo z webových stránok odosielať e-maily na rôzne e-mailové adresy, pričom je odosielateľom e-mailová adresa registrátora danej domény (vaša e-mailová adresa), z ktorej sa budú tieto maily odosielať.

Testované hostingy: php5.sk (php5.cz), sweb.cz

PHP kód (univerzálny pre všetky dosky):

Kód: Vybrat vše

<?php
$sprava= "Ahoj svet!";
$sprava= wordwrap($msg,70);
mail("adresaprijimatela@jehomail.com","Predmet spravy",$sprava);
?>
Arduino + Ethernet shield W5100 sketch (HTTP):

Kód: Vybrat vše

#include <SPI.h>
#include <Ethernet.h>
#define Hostname "Arduino"   
byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};    
char server[] = "www.mojweb.php5.sk";      
IPAddress ip(192, 168, 1, 254);
EthernetClient client;   
void setup() {
 Serial.begin(9600);
}
 
void loop() {
   if (Ethernet.begin(mac) == 0) {    
    Serial.println("Chyba konfiguracie cez DHCP, nastavujem pevnu IP"); 
    Ethernet.begin(mac, ip);                       
  }  


if (client.connect(server, 80)) { 
    Serial.println("Pripojenie uspesne na webserver, vykonavam request: "); 
    client.print("GET /email.php");     
    client.println(" HTTP/1.1");              
    client.println("Host: www.mojweb.php5.sk");
    client.println("Connection: close");    
    client.println();                       
 client.stop();                                
  } else {                                          
    Serial.println("Pripojenie zlyhalo..."); 
  }  
delay(10000);
}
NodeMCU - HTTP sketch:

Kód: Vybrat vše

#include <ESP8266WiFi.h>

const char* ssid     = "wifimeno";
const char* password = "wifiheslo";

const char* host = "mojweb.php5.sk";

void setup() {
  Serial.begin(9600);

  Serial.println();
  Serial.println();
  Serial.print("Pripajam sa na wifi ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
  }
  String url = "/email.php";
  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "Connection: close\r\n\r\n");
 
delay(10000);
}
NodeMCU - HTTPS sketch:

Kód: Vybrat vše

#include <ESP8266WiFi.h>
#include <WiFiClientSecure.h>

const char* ssid = "wifimeno";
const char* password = "wifiheslo";

const char* host = "mojweb.php5.sk";
const int httpsPort = 443;
const char* fingerprint = "35 85 74 EF 67 35 A7 CE 40 69 50 F3 C0 F6 80 CF 80 3B 2E 19"; //odtlacok sha1 certifikatu

void setup() {
  Serial.begin(9600);
  Serial.println();
  Serial.print("connecting to ");
  Serial.println(ssid);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());

  

}

void loop() {
  // Use WiFiClientSecure class to create TLS connection
  WiFiClientSecure client;
  Serial.print("connecting to ");
  Serial.println(host);
  if (!client.connect(host, httpsPort)) {
    Serial.println("connection failed");
    return;
  }

  if (client.verify(fingerprint, host)) {
    Serial.println("certificate matches");
  } else {
    Serial.println("certificate doesn't match");
  }

  String url = "/email.php";
  Serial.print("requesting URL: ");
  Serial.println(url);

  client.print(String("GET ") + url + " HTTP/1.1\r\n" +
               "Host: " + host + "\r\n" +
               "User-Agent: BuildFailureDetectorESP8266\r\n" +
               "Connection: close\r\n\r\n");
               delay(10000);
}
Nezabudnite pri HTTPS uviesť aj fingerprint HTTPS certifikátu v SHA1 formáte, inak pripojenie nebude úspešné.
Freehostingy pracujú pri SMTP serveroch s e-mailovou adresou, ktorú ste si registrovali. Pozor na adresu g-mail. Z tejto adresy e-maily nebudú odosielané z dôvodu blokácie g-mailu pre odosielanie mailov externými službami/stránkami. E-maily centrum, zoznam fungovali ok.
E-maily sa dajú využiť napríklad pri rôznych situáciách, napríklad vytečenie vody, zadymenie..

jankop
Příspěvky: 577
Registrován: 06 zář 2017, 20:04
Reputation: 0
Bydliště: Brno
Kontaktovat uživatele:

Re: Odosielanie e-mailu cez Arduino/NodeMCU

Příspěvek od jankop » 15 bře 2018, 14:43

Už je to hodně dávno co jsem to zkoušel, ale odesílal jsem zprávy přímo přes SMTP server bez nějakého prostředníka. Proč tam máš ten mezistupeň?

martinius96
Příspěvky: 420
Registrován: 01 srp 2017, 19:29
Reputation: 0
Bydliště: Poprad
Kontaktovat uživatele:

Re: Odosielanie e-mailu cez Arduino/NodeMCU

Příspěvek od martinius96 » 15 bře 2018, 15:32

Ne webe môžeš mať napríklad výpis teplôt a súbežne s tým tam môžeš mať i tento "zabezpečovací" systém, ktorý ti pošle e-mail. Napríklad pri hustom daždi, pri vytopení, zadymení, ohni atď. Môže to nájsť celkom slušné uplatnenie, nakoľko ti notifikácia po prijatí e-mailu príde prakticky okamžite.

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host